From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: <gregkh@linuxfoundation.org>
Cc: linux-usb@vger.kernel.org, Michal Pecio <michal.pecio@gmail.com>,
Mathias Nyman <mathias.nyman@linux.intel.com>
Subject: [PATCH 7/9] xhci: retry Stop Endpoint on buggy NEC controllers
Date: Thu, 29 Feb 2024 16:14:36 +0200 [thread overview]
Message-ID: <20240229141438.619372-8-mathias.nyman@linux.intel.com> (raw)
In-Reply-To: <20240229141438.619372-1-mathias.nyman@linux.intel.com>
From: Michal Pecio <michal.pecio@gmail.com>
Two NEC uPD720200 adapters have been observed to randomly misbehave:
a Stop Endpoint command fails with Context Error, the Output Context
indicates Stopped state, and the endpoint keeps running. Very often,
Set TR Dequeue Pointer is seen to fail next with Context Error too,
in addition to problems from unexpectedly completed cancelled work.
The pathology is common on fast running isoc endpoints like uvcvideo,
but has also been reproduced on a full-speed bulk endpoint of pl2303.
It seems all EPs are affected, with risk proportional to their load.
Reproduction involves receiving any kind of stream and closing it to
make the device driver cancel URBs already queued in advance.
Deal with it by retrying the command like in the Running state.
Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
---
drivers/usb/host/xhci-ring.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index b2116501048c..6a29ebd6682d 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1154,6 +1154,15 @@ static void xhci_handle_cmd_stop_ep(struct xhci_hcd *xhci, int slot_id,
break;
ep->ep_state &= ~EP_STOP_CMD_PENDING;
return;
+ case EP_STATE_STOPPED:
+ /*
+ * NEC uPD720200 sometimes sets this state and fails with
+ * Context Error while continuing to process TRBs.
+ * Be conservative and trust EP_CTX_STATE on other chips.
+ */
+ if (!(xhci->quirks & XHCI_NEC_HOST))
+ break;
+ fallthrough;
case EP_STATE_RUNNING:
/* Race, HW handled stop ep cmd before ep was running */
xhci_dbg(xhci, "Stop ep completion ctx error, ep is running\n");
--
2.25.1
next prev parent reply other threads:[~2024-02-29 14:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-29 14:14 [PATCH 0/9] xhci features for usb-next Mathias Nyman
2024-02-29 14:14 ` [PATCH 1/9] xhci: rework how real & fake ports are found Mathias Nyman
2024-02-29 14:14 ` [PATCH 2/9] xhci: replace real & fake port with pointer to root hub port Mathias Nyman
2024-04-02 0:50 ` Thinh Nguyen
2024-04-02 10:23 ` Mathias Nyman
2024-04-02 23:13 ` Thinh Nguyen
2024-04-03 8:19 ` Mathias Nyman
2024-02-29 14:14 ` [PATCH 3/9] xhci: save slot ID in struct 'xhci_port' Mathias Nyman
2024-02-29 14:14 ` [PATCH 4/9] usb: xhci: remove duplicate code from 'xhci_clear_command_ring()' Mathias Nyman
2024-02-29 14:14 ` [PATCH 5/9] usb: xhci: utilize 'xhci_free_segments_for_ring()' for freeing segments Mathias Nyman
2024-02-29 14:14 ` [PATCH 6/9] xhci: fix matching completion events with TDs Mathias Nyman
2024-02-29 14:14 ` Mathias Nyman [this message]
2024-02-29 14:14 ` [PATCH 8/9] xhci: dbc: poll at different rate depending on data transfer activity Mathias Nyman
2024-02-29 14:14 ` [PATCH 9/9] usb: xhci: Add error handling in xhci_map_urb_for_dma Mathias Nyman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240229141438.619372-8-mathias.nyman@linux.intel.com \
--to=mathias.nyman@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=michal.pecio@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.