On Mon, 12 Feb 2007, Guilherme Salgado wrote:

> > On Thu, 11 Jan 2007, Jon Smirl wrote:
> >
> [...]
> >
> > Here we see a resume that failed.  The key indicator is the 0x1000 bit in
> > the portsc value; it means the port is still suspended even after it was
> > supposed to have resumed.  This is the Intel hardware-resume bug I
> > described earlier.  I have seen it on a few occasions but I cannot
> > duplicate it reproducibly.  If you can, your system would make a good test
> > case.  Try applying the diagnostic patch below and see what happens.
> >
> > When this sort of error occurs, the USB core resets the device and
> > re-enumerates it.
> >
> > > hub 3-0:1.0: port 2 status 0004.0107 after resume, 0
> > > hub 3-0:1.0: logical disconnect on port 2
> > > usb 3-2: can't resume, status -19
> >
> > This shows the core realizing that the resume failed.
> >
> 
> I've been experiencing a similar resume failure on my fingerprint
> reader (on a Thinkpad T60) and I can reproduce it easily. I applied
> your diagnostic patch on a 2.6.20 tree and this is what I got on
> syslog. Please let me know if this is of any help and if there's
> anything else I could do to help further debugging.
> 
> Feb 12 22:51:30 frida kernel: [ 3529.760000] usb usb5: usb auto-resume
> Feb 12 22:51:30 frida kernel: [ 3529.760000] usb usb5: finish resume
> Feb 12 22:51:30 frida kernel: [ 3529.760000] hub 5-0:1.0: hub_resume
> Feb 12 22:51:30 frida kernel: [ 3529.760000] usb usb5: wakeup_rh
> Feb 12 22:51:30 frida kernel: [ 3529.800000] hub 5-0:1.0: state 7
> ports 2 chg 0000 evt 0000
> Feb 12 22:51:30 frida kernel: [ 3529.800000] usb 5-2: usb auto-resume
> Feb 12 22:51:30 frida kernel: [ 3529.832000] uhci_hcd 0000:00:1d.3:
> port 2 resume iterations 0:0
> Feb 12 22:51:30 frida kernel: [ 3529.832000] uhci_hcd 0000:00:1d.3:
> port 2 portsc 1095,01

Yep, that's the problem.  It's good to have a reliable test case, thanks.

Below is a revised version of the diagnostic patch.  Try using it instead 
of the earlier one and let's see what happens.

Alan Stern



Index: 2.6.20/drivers/usb/host/uhci-hub.c
===================================================================
--- 2.6.20.orig/drivers/usb/host/uhci-hub.c
+++ 2.6.20/drivers/usb/host/uhci-hub.c
@@ -95,6 +95,7 @@ static void uhci_finish_suspend(struct u
 {
        int status;
        int i;
+       int j;
 
        if (inw(port_addr) & (USBPORTSC_SUSP | USBPORTSC_RD)) {
                CLR_RH_PORTSTAT(USBPORTSC_SUSP | USBPORTSC_RD);
@@ -106,11 +107,17 @@ static void uhci_finish_suspend(struct u
                 * which is supposed to take 3 bit times (= 2 microseconds).
                 * Experiments show that some controllers take longer, so
                 * we'll poll for completion. */
+       for (j = 0; j < 1000; ++j) {
                for (i = 0; i < 10; ++i) {
-                       if (!(inw(port_addr) & USBPORTSC_RD))
-                               break;
+                       if (!(inw(port_addr) &
+                                       (USBPORTSC_SUSP | USBPORTSC_RD)))
+                               goto done; //break;
                        udelay(1);
                }
+               CLR_RH_PORTSTAT(USBPORTSC_SUSP | USBPORTSC_RD);
+       }
+done:          dev_info(uhci_dev(uhci), "port %d resume iterations %d:%d\n",
+                               port+1, j, i);
        }
        clear_bit(port, &uhci->resuming_ports);
 }


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to