svn commit: r264337 - stable/9/sys/dev/usb/controller
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Apr 11 06:15:58 UTC 2014
Author: hselasky
Date: Fri Apr 11 06:15:58 2014
New Revision: 264337
URL: http://svnweb.freebsd.org/changeset/base/264337
Log:
MFC r264294:
Fix for infinite XHCI reset loops when the set address USB request fails.
Modified:
stable/9/sys/dev/usb/controller/xhci.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/usb/controller/xhci.c
==============================================================================
--- stable/9/sys/dev/usb/controller/xhci.c Fri Apr 11 06:13:56 2014 (r264336)
+++ stable/9/sys/dev/usb/controller/xhci.c Fri Apr 11 06:15:58 2014 (r264337)
@@ -1184,8 +1184,20 @@ retry:
*/
if (timeout == 0 &&
xhci_reset_command_queue_locked(sc) == 0) {
- timeout = 1;
- goto retry;
+ temp = le32toh(trb->dwTrb3);
+
+ /*
+ * Avoid infinite XHCI reset loops if the set
+ * address command fails to respond due to a
+ * non-enumerating device:
+ */
+ if (XHCI_TRB_3_TYPE_GET(temp) == XHCI_TRB_TYPE_ADDRESS_DEVICE &&
+ (temp & XHCI_TRB_3_BSR_BIT) == 0) {
+ DPRINTF("Set address timeout\n");
+ } else {
+ timeout = 1;
+ goto retry;
+ }
} else {
DPRINTF("Controller reset!\n");
usb_bus_reset_async_locked(&sc->sc_bus);
More information about the svn-src-stable-9
mailing list