svn commit: r264339 - stable/8/sys/dev/usb/controller
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Apr 11 06:18:24 UTC 2014
Author: hselasky
Date: Fri Apr 11 06:18:24 2014
New Revision: 264339
URL: http://svnweb.freebsd.org/changeset/base/264339
Log:
MFC r264294:
Fix for infinite XHCI reset loops when the set address USB request fails.
Modified:
stable/8/sys/dev/usb/controller/xhci.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/dev/ (props changed)
stable/8/sys/dev/usb/ (props changed)
Modified: stable/8/sys/dev/usb/controller/xhci.c
==============================================================================
--- stable/8/sys/dev/usb/controller/xhci.c Fri Apr 11 06:17:44 2014 (r264338)
+++ stable/8/sys/dev/usb/controller/xhci.c Fri Apr 11 06:18:24 2014 (r264339)
@@ -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-all
mailing list