Comment 261 for bug 88746

Revision history for this message
Daniel Gimpelevich (daniel-gimpelevich) wrote :

I seem to have gotten to the bottom of this bug, at least in Hardy. There were reports above that this is peculiar to nVidia chipsets, but later, others reported the same thing on VIA and SiS, and I've seen it on ATI as well. What do these have in common? EHCI is the spec for USB 2.0, but the spec for 1.1 may be either UHCI or OHCI. EHCI hosts fall back to either UHCI or OHCI buses when a USB 1.1 device is detected. I'm betting all the machines where ehci-hcd.ko works properly have EHCI hosts that only fall back to UHCI, and the machines with problems have EHCI hosts that fall back to OHCI buses. In such a case, when Ubuntu's initramfs starts udev, ehci-hcd.ko and ohci-hcd.ko will both auto-load in a relatively unpredictable order. Problems arise when the EHCI bus has both a USB 2.0 multifunction device and a USB 2.0 hub through which a USB 1.1 device is connected at the time that this happens.

If ohci-hcd.ko loads first:
All devices connected are recognized as USB 1.1 devices, and when ehci-hcd.ko subsequently loads, the USB 2.0 devices among them register a disconnect and a reconnect as USB 2.0 devices. Everything is then fine for about a minute, after which a spontaneous USB reset is processed, and things go completely haywire, causing no USB device to be usable until a reboot.

If ehci-hcd.ko loads first:
Only USB 2.0 devices are recognized at all, until ohci-hcd.ko loads, when they are all recognized. Almost immediately, a spontaneous USB reset is processed, and things go completely haywire, but they resolve themselves as soon as all USB 1.1 devices are unplugged, and go haywire again when they are plugged back in.

There is no trouble if either there is no USB 2.0 multifunction device, or no USB 1.1 devices are connected through a USB 2.0 hub. There is some kind of software conflict between ehci-hcd.ko and ohci-hcd.ko, because this all works fine in FreeDOS with the BIOS's USB Legacy Support, as well as in another non-Linux OS that has EHCI and OHCI support.