[PATCH] spin longer for ehci port reset completion
authorDavid Brownell <david-b@pacbell.net>
Mon, 13 Jun 2005 14:15:28 +0000 (07:15 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 13 Jun 2005 15:20:41 +0000 (08:20 -0700)
This makes the EHCI driver spin a bit longer before concluding that the
port reset failed.  "Obviously safe."

It allows some devices to enumerate that previously didn't.  We've seen
a bunch of these problem reports recently, this will make some go away.

As reported by Michael Zapf <Michael.Zapf@uni-kassel.de>, some EHCI
controllers seem to take forever to finish port resets and produce
"port N reset error -110" type errors.  Spinning a bit longer helps.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/usb/host/ehci-hub.c

index 429330bc38de08f35b198a74d0fb190121bbc03c..d7b4f7939ded4d16989478ca58fa3edc573fb728 100644 (file)
@@ -439,9 +439,12 @@ static int ehci_hub_control (
                        /* force reset to complete */
                        writel (temp & ~PORT_RESET,
                                        &ehci->regs->port_status [wIndex]);
+                       /* REVISIT:  some hardware needs 550+ usec to clear
+                        * this bit; seems too long to spin routinely...
+                        */
                        retval = handshake (
                                        &ehci->regs->port_status [wIndex],
-                                       PORT_RESET, 0, 500);
+                                       PORT_RESET, 0, 750);
                        if (retval != 0) {
                                ehci_err (ehci, "port %d reset error %d\n",
                                        wIndex + 1, retval);