From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 879D1C43219 for ; Tue, 30 Apr 2019 03:07:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4EADE2147A for ; Tue, 30 Apr 2019 03:07:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="TgxO+DVI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729979AbfD3DHz (ORCPT ); Mon, 29 Apr 2019 23:07:55 -0400 Received: from hqemgate16.nvidia.com ([216.228.121.65]:3707 "EHLO hqemgate16.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729883AbfD3DHz (ORCPT ); Mon, 29 Apr 2019 23:07:55 -0400 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Mon, 29 Apr 2019 20:07:49 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Mon, 29 Apr 2019 20:07:53 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Mon, 29 Apr 2019 20:07:53 -0700 Received: from HQMAIL110.nvidia.com (172.18.146.15) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 30 Apr 2019 03:07:52 +0000 Received: from HQMAIL107.nvidia.com (172.20.187.13) by hqmail110.nvidia.com (172.18.146.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 30 Apr 2019 03:07:47 +0000 Received: from hqnvemgw01.nvidia.com (172.20.150.20) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 30 Apr 2019 03:07:47 +0000 Received: from jilin-desktop.nvidia.com (Not Verified[10.19.120.158]) by hqnvemgw01.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Mon, 29 Apr 2019 20:07:47 -0700 From: Jim Lin To: , CC: , , Jim Lin Subject: [PATCH v3 1/1] usb: xhci: Add Clear_TT_Buffer Date: Tue, 30 Apr 2019 11:06:32 +0800 Message-ID: <1556593592-3078-1-git-send-email-jilin@nvidia.com> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1556593669; bh=FwjnhXjjHjZ2pU++sQhaTIujmWXVbwgbV8T8yW0hDX8=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: MIME-Version:Content-Type; b=TgxO+DVI0IboqaJ1eINjvKFypxcyNhPz7yDd7JZ6hrgpIHngLsRySlpJ23pP0SPNE h0O4tva/9C+uzIyo9YaTXIbltGP1eIpE6YLS7jJR+zRG/F8Csv92fCmZNkcubzwKkS Ogs7ysa7JAjqRDcd7Rs2EB+/gmdmOJ7385y81i/rgvoLaGQ6uBZw6+GHd+FYek03Ny UFgDvokuZ+bQSvnB7Qo8uNArUf+GFwM1W4AQ4Vqnb3Q3PCT0D58R1Pl428lvCzu9HW FTp+HrDTuYeY9EwICm9/691xgNVjlYbBFQSXwhPk2XVVzJ/TQ9/4T3CC7W2cncRust /XO0QwvZm4wAQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org USB 2.0 specification chapter 11.17.5 says "as part of endpoint halt processing for full-/low-speed endpoints connected via a TT, the host software must use the Clear_TT_Buffer request to the TT to ensure that the buffer is not in the busy state". In our case, a full-speed speaker (ConferenceCam) is behind a high- speed hub (ConferenceCam Connect), sometimes once we get STALL on a request we may continue to get STALL with the folllowing requests, like Set_Interface. Here we add Clear_TT_Buffer for the following Set_Interface requests to get ACK successfully. Signed-off-by: Jim Lin --- v2: xhci_clear_tt_buffer_complete: add static, shorter indentation , remove its claiming in xhci.h v3: Add description for clearing_tt (xhci.h) drivers/usb/host/xhci-ring.c | 28 ++++++++++++++++++++++++++++ drivers/usb/host/xhci.c | 7 +++++++ drivers/usb/host/xhci.h | 2 ++ 3 files changed, 37 insertions(+) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 9215a28dad40..02b1ebad81e7 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1786,6 +1786,33 @@ struct xhci_segment *trb_in_td(struct xhci_hcd *xhci, return NULL; } +static void xhci_clear_hub_tt_buffer(struct xhci_hcd *xhci, + unsigned int slot_id, struct xhci_td *td) +{ + struct xhci_virt_device *dev; + struct xhci_slot_ctx *slot_ctx; + int saved_devnum; + + /* + * As part of low/full-speed endpoint-halt processing + * we must clear the TT buffer (USB 2.0 specification 11.17.5). + */ + if (td->urb->dev->tt && !usb_pipeint(td->urb->pipe) && + (td->urb->dev->tt->hub != xhci_to_hcd(xhci)->self.root_hub) && + !xhci->clearing_tt) { + xhci->clearing_tt = 1; + dev = xhci->devs[slot_id]; + slot_ctx = xhci_get_slot_ctx(xhci, dev->out_ctx); + /* Update devnum temporarily for usb_hub_clear_tt_buffer */ + saved_devnum = td->urb->dev->devnum; + td->urb->dev->devnum = (int) le32_to_cpu(slot_ctx->dev_state) & + DEV_ADDR_MASK; + if (usb_hub_clear_tt_buffer(td->urb)) + xhci->clearing_tt = 0; + td->urb->dev->devnum = saved_devnum; + } +} + static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, unsigned int stream_id, struct xhci_td *td, @@ -1804,6 +1831,7 @@ static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, if (reset_type == EP_HARD_RESET) { ep->ep_state |= EP_HARD_CLEAR_TOGGLE; xhci_cleanup_stalled_ring(xhci, ep_index, stream_id, td); + xhci_clear_hub_tt_buffer(xhci, slot_id, td); } xhci_ring_cmd_db(xhci); } diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 7fa58c99f126..4890c3518aa3 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -5132,6 +5132,12 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) } EXPORT_SYMBOL_GPL(xhci_gen_setup); +static void xhci_clear_tt_buffer_complete(struct usb_hcd *hcd, + struct usb_host_endpoint *ep) +{ + hcd_to_xhci(hcd)->clearing_tt = 0; +} + static const struct hc_driver xhci_hc_driver = { .description = "xhci-hcd", .product_desc = "xHCI Host Controller", @@ -5192,6 +5198,7 @@ static const struct hc_driver xhci_hc_driver = { .enable_usb3_lpm_timeout = xhci_enable_usb3_lpm_timeout, .disable_usb3_lpm_timeout = xhci_disable_usb3_lpm_timeout, .find_raw_port_number = xhci_find_raw_port_number, + .clear_tt_buffer_complete = xhci_clear_tt_buffer_complete, }; void xhci_init_driver(struct hc_driver *drv, diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 9334cdee382a..dab1476e5bdf 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1864,6 +1864,8 @@ struct xhci_hcd { unsigned hw_lpm_support:1; /* Broken Suspend flag for SNPS Suspend resume issue */ unsigned broken_suspend:1; + /* Clear_TT_Buffer in progress */ + unsigned clearing_tt:1; /* cached usb2 extened protocol capabilites */ u32 *ext_caps; unsigned int num_ext_caps; -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,1/1] usb: xhci: Add Clear_TT_Buffer From: Jim Lin Message-Id: <1556593592-3078-1-git-send-email-jilin@nvidia.com> Date: Tue, 30 Apr 2019 11:06:32 +0800 To: mathias.nyman@intel.com, gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Jim Lin List-ID: VVNCIDIuMCBzcGVjaWZpY2F0aW9uIGNoYXB0ZXIgMTEuMTcuNSBzYXlzICJhcyBwYXJ0IG9mIGVu ZHBvaW50IGhhbHQKcHJvY2Vzc2luZyBmb3IgZnVsbC0vbG93LXNwZWVkIGVuZHBvaW50cyBjb25u ZWN0ZWQgdmlhIGEgVFQsIHRoZSBob3N0CnNvZnR3YXJlIG11c3QgdXNlIHRoZSBDbGVhcl9UVF9C dWZmZXIgcmVxdWVzdCB0byB0aGUgVFQgdG8gZW5zdXJlCnRoYXQgdGhlIGJ1ZmZlciBpcyBub3Qg aW4gdGhlIGJ1c3kgc3RhdGUiLgoKSW4gb3VyIGNhc2UsIGEgZnVsbC1zcGVlZCBzcGVha2VyIChD b25mZXJlbmNlQ2FtKSBpcyBiZWhpbmQgYSBoaWdoLQpzcGVlZCBodWIgKENvbmZlcmVuY2VDYW0g Q29ubmVjdCksIHNvbWV0aW1lcyBvbmNlIHdlIGdldCBTVEFMTCBvbiBhCnJlcXVlc3Qgd2UgbWF5 IGNvbnRpbnVlIHRvIGdldCBTVEFMTCB3aXRoIHRoZSBmb2xsbG93aW5nIHJlcXVlc3RzLApsaWtl IFNldF9JbnRlcmZhY2UuCgpIZXJlIHdlIGFkZCBDbGVhcl9UVF9CdWZmZXIgZm9yIHRoZSBmb2xs b3dpbmcgU2V0X0ludGVyZmFjZSByZXF1ZXN0cwp0byBnZXQgQUNLIHN1Y2Nlc3NmdWxseS4KClNp Z25lZC1vZmYtYnk6IEppbSBMaW4gPGppbGluQG52aWRpYS5jb20+Ci0tLQp2MjogeGhjaV9jbGVh cl90dF9idWZmZXJfY29tcGxldGU6IGFkZCBzdGF0aWMsIHNob3J0ZXIgaW5kZW50YXRpb24KICAg ICwgcmVtb3ZlIGl0cyBjbGFpbWluZyBpbiB4aGNpLmgKdjM6IEFkZCBkZXNjcmlwdGlvbiBmb3Ig Y2xlYXJpbmdfdHQgKHhoY2kuaCkKCiBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIHwgMjgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy91c2IvaG9zdC94aGNpLmMgICAg ICB8ICA3ICsrKysrKysKIGRyaXZlcnMvdXNiL2hvc3QveGhjaS5oICAgICAgfCAgMiArKwogMyBm aWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv aG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggOTIx NWEyOGRhZDQwLi4wMmIxZWJhZDgxZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhj aS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMTc4Niw2ICsx Nzg2LDMzIEBAIHN0cnVjdCB4aGNpX3NlZ21lbnQgKnRyYl9pbl90ZChzdHJ1Y3QgeGhjaV9oY2Qg KnhoY2ksCiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHhoY2lfY2xlYXJfaHViX3R0 X2J1ZmZlcihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJdW5zaWduZWQgaW50IHNsb3RfaWQsIHN0 cnVjdCB4aGNpX3RkICp0ZCkKK3sKKwlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqZGV2OworCXN0 cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eDsKKwlpbnQgc2F2ZWRfZGV2bnVtOworCisJLyoK KwkgKiBBcyBwYXJ0IG9mIGxvdy9mdWxsLXNwZWVkIGVuZHBvaW50LWhhbHQgcHJvY2Vzc2luZwor CSAqIHdlIG11c3QgY2xlYXIgdGhlIFRUIGJ1ZmZlciAoVVNCIDIuMCBzcGVjaWZpY2F0aW9uIDEx LjE3LjUpLgorCSAqLworCWlmICh0ZC0+dXJiLT5kZXYtPnR0ICYmICF1c2JfcGlwZWludCh0ZC0+ dXJiLT5waXBlKSAmJgorCSAgICAodGQtPnVyYi0+ZGV2LT50dC0+aHViICE9IHhoY2lfdG9faGNk KHhoY2kpLT5zZWxmLnJvb3RfaHViKSAmJgorCSAgICAheGhjaS0+Y2xlYXJpbmdfdHQpIHsKKwkJ eGhjaS0+Y2xlYXJpbmdfdHQgPSAxOworCQlkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOworCQlz bG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCk7CisJCS8qIFVw ZGF0ZSBkZXZudW0gdGVtcG9yYXJpbHkgZm9yIHVzYl9odWJfY2xlYXJfdHRfYnVmZmVyICovCisJ CXNhdmVkX2Rldm51bSA9IHRkLT51cmItPmRldi0+ZGV2bnVtOworCQl0ZC0+dXJiLT5kZXYtPmRl dm51bSA9IChpbnQpIGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpICYKKwkJCURFVl9B RERSX01BU0s7CisJCWlmICh1c2JfaHViX2NsZWFyX3R0X2J1ZmZlcih0ZC0+dXJiKSkKKwkJCXho Y2ktPmNsZWFyaW5nX3R0ID0gMDsKKwkJdGQtPnVyYi0+ZGV2LT5kZXZudW0gPSBzYXZlZF9kZXZu dW07CisJfQorfQorCiBzdGF0aWMgdm9pZCB4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHN0 cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGlu dCBlcF9pbmRleCwKIAkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCwgc3RydWN0IHhoY2lfdGQgKnRk LApAQCAtMTgwNCw2ICsxODMxLDcgQEAgc3RhdGljIHZvaWQgeGhjaV9jbGVhbnVwX2hhbHRlZF9l bmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJaWYgKHJlc2V0X3R5cGUgPT0gRVBfSEFS RF9SRVNFVCkgewogCQllcC0+ZXBfc3RhdGUgfD0gRVBfSEFSRF9DTEVBUl9UT0dHTEU7CiAJCXho Y2lfY2xlYW51cF9zdGFsbGVkX3JpbmcoeGhjaSwgZXBfaW5kZXgsIHN0cmVhbV9pZCwgdGQpOwor CQl4aGNpX2NsZWFyX2h1Yl90dF9idWZmZXIoeGhjaSwgc2xvdF9pZCwgdGQpOwogCX0KIAl4aGNp X3JpbmdfY21kX2RiKHhoY2kpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNp LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA3ZmE1OGM5OWYxMjYuLjQ4OTBjMzUx OGFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91 c2IvaG9zdC94aGNpLmMKQEAgLTUxMzIsNiArNTEzMiwxMiBAQCBpbnQgeGhjaV9nZW5fc2V0dXAo c3RydWN0IHVzYl9oY2QgKmhjZCwgeGhjaV9nZXRfcXVpcmtzX3QgZ2V0X3F1aXJrcykKIH0KIEVY UE9SVF9TWU1CT0xfR1BMKHhoY2lfZ2VuX3NldHVwKTsKIAorc3RhdGljIHZvaWQgeGhjaV9jbGVh cl90dF9idWZmZXJfY29tcGxldGUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJc3RydWN0IHVzYl9o b3N0X2VuZHBvaW50ICplcCkKK3sKKwloY2RfdG9feGhjaShoY2QpLT5jbGVhcmluZ190dCA9IDA7 Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIHhoY2lfaGNfZHJpdmVyID0gewog CS5kZXNjcmlwdGlvbiA9CQkieGhjaS1oY2QiLAogCS5wcm9kdWN0X2Rlc2MgPQkJInhIQ0kgSG9z dCBDb250cm9sbGVyIiwKQEAgLTUxOTIsNiArNTE5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aGNfZHJpdmVyIHhoY2lfaGNfZHJpdmVyID0gewogCS5lbmFibGVfdXNiM19scG1fdGltZW91dCA9 CXhoY2lfZW5hYmxlX3VzYjNfbHBtX3RpbWVvdXQsCiAJLmRpc2FibGVfdXNiM19scG1fdGltZW91 dCA9CXhoY2lfZGlzYWJsZV91c2IzX2xwbV90aW1lb3V0LAogCS5maW5kX3Jhd19wb3J0X251bWJl ciA9CXhoY2lfZmluZF9yYXdfcG9ydF9udW1iZXIsCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0 ZSA9IHhoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAogfTsKIAogdm9pZCB4aGNpX2luaXRf ZHJpdmVyKHN0cnVjdCBoY19kcml2ZXIgKmRydiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hv c3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggOTMzNGNkZWUzODJhLi5k YWIxNDc2ZTViZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2Ry aXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC0xODY0LDYgKzE4NjQsOCBAQCBzdHJ1Y3QgeGhjaV9o Y2QgewogCXVuc2lnbmVkCQlod19scG1fc3VwcG9ydDoxOwogCS8qIEJyb2tlbiBTdXNwZW5kIGZs YWcgZm9yIFNOUFMgU3VzcGVuZCByZXN1bWUgaXNzdWUgKi8KIAl1bnNpZ25lZAkJYnJva2VuX3N1 c3BlbmQ6MTsKKwkvKiBDbGVhcl9UVF9CdWZmZXIgaW4gcHJvZ3Jlc3MgKi8KKwl1bnNpZ25lZAkJ Y2xlYXJpbmdfdHQ6MTsKIAkvKiBjYWNoZWQgdXNiMiBleHRlbmVkIHByb3RvY29sIGNhcGFiaWxp dGVzICovCiAJdTMyICAgICAgICAgICAgICAgICAgICAgKmV4dF9jYXBzOwogCXVuc2lnbmVkIGlu dCAgICAgICAgICAgIG51bV9leHRfY2FwczsK