USB EHCI Problem with Low Speed Devices on kernel 2.6.11+

From: Dominik Wezel
Date: Sat Aug 27 2005 - 08:49:44 EST


Hi folks

Looks like something the list has seen before, but I actually ran out of ideas even after seeing about everything google, yahoo and the kernel majordomo had to offer as advice ...

Hardware
========
- IBM Thinkpad T40
- Targus PAUH212 USB 2.0 HUB 7 Ports connected to Laptop
- USB Keyboard/Mouse (any do, i.e. any cause same problem) connected to hub

Kernel
======
- 2.6.8, 2.6.11.10 and 2.6.12.4, all show same problem

Distro
======
- debian sarge
- using hotplug and udev

Problem
=======
When turning on the laptop and during POST and GrUB loading, all ports on the hub are enabled. During the USB initialization phase, when the hub is detected, shortly all ports become disabled, then turn on again (uhci_hcd detects the lo-speed ports). Upon initialization of ehci_hcd however, the ports are disconnected again (for good):

---8<----
Aug 27 14:29:50 solaris kernel: ehci_hcd 0000:00:1d.7: USB 2.0 initialized, EHCI 1.00, driver 10 Dec 2004
Aug 27 14:29:50 solaris kernel: hub 4-0:1.0: USB hub found
Aug 27 14:29:50 solaris kernel: hub 4-0:1.0: 6 ports detected
Aug 27 14:29:50 solaris kernel: usb 2-1: USB disconnect, address 2
Aug 27 14:29:50 solaris kernel: usb 2-1.5: USB disconnect, address 3
Aug 27 14:29:50 solaris kernel: usb 2-1.6: USB disconnect, address 4
---8<----

Addresses 2, 3 and 4 are a keyboard, mouse and palm sync cable respectively.

and afterwards the log becomes cluttered with:

---8<----
Aug 27 14:30:31 solaris kernel: usb 4-3: new high speed USB device using ehci_hcd and address 79
Aug 27 14:30:31 solaris kernel: usb 4-3: device not accepting address 79, error -71
Aug 27 14:30:32 solaris kernel: usb 4-3: new high speed USB device using ehci_hcd and address 81
Aug 27 14:30:32 solaris kernel: usb 4-3: device not accepting address 81, error -71
Aug 27 14:30:33 solaris kernel: usb 4-3: new high speed USB device using ehci_hcd and address 86
Aug 27 14:30:34 solaris kernel: usb 4-3: device not accepting address 86, error -71
Aug 27 14:30:34 solaris kernel: usb 4-3: new high speed USB device using ehci_hcd and address 89
Aug 27 14:30:35 solaris kernel: usb 4-3: device not accepting address 89, error -71
Aug 27 14:30:35 solaris kernel: usb 4-3: new high speed USB device using ehci_hcd and address 90
Aug 27 14:30:35 solaris kernel: usb 4-3: device not accepting address 90, error -71
---8<----

first address to be assigned was 30 in all logs, but the number raises mostly in increments of 2 till about 120, then restarts with 12.

Interestlingly, the keyboard and mouse have been detected immediately before the intialization of ehcihcd:

---8<---
Aug 27 14:29:50 solaris kernel: uhci_hcd 0000:00:1d.2: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3
Aug 27 14:29:50 solaris kernel: PCI: Setting latency timer of device 0000:00:1d.2 to 64
Aug 27 14:29:50 solaris kernel: uhci_hcd 0000:00:1d.2: irq 11, io base 0x1840
Aug 27 14:29:50 solaris kernel: uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 3
Aug 27 14:29:50 solaris kernel: hub 3-0:1.0: USB hub found
Aug 27 14:29:50 solaris kernel: hub 3-0:1.0: 2 ports detected
/* These are the 2 ports on the laptop */
Aug 27 14:29:50 solaris kernel: usb 2-1: new full speed USB device using uhci_hcd and address 2
Aug 27 14:29:50 solaris kernel: hub 2-1:1.0: USB hub found
Aug 27 14:29:50 solaris kernel: hub 2-1:1.0: 7 ports detected
/* These are the 7 ports of the external hub */
Aug 27 14:29:50 solaris kernel: usb 2-1.5: new low speed USB device using uhci_hcd and address 3
Aug 27 14:29:50 solaris kernel: usb 2-1.6: new low speed USB device using uhci_hcd and address 4
Aug 27 14:29:50 solaris kernel: usbcore: registered new driver hiddev
Aug 27 14:29:50 solaris kernel: input: USB HID v1.10 Mouse [Logitech Trackball] on usb-0000:00:1d.1-1.5
Aug 27 14:29:50 solaris kernel: input: USB HID v1.10 Keyboard [CHICONY USB Keyboard] on usb-0000:00:1d.1-1.6
Aug 27 14:29:50 solaris kernel: input,hiddev96: USB HID v1.10 Device [CHICONY USB Keyboard] on usb-0000:00:1d.1-1.6
Aug 27 14:29:50 solaris kernel: usbcore: registered new driver usbhid
Aug 27 14:29:50 solaris kernel: drivers/usb/input/hid-core.c: v2.0:USB HID core driver
---8<---

which means the ehci_hcd has afterwards superseded uhci_hcd.

Even more interestingly: in about 5% of the boot cases, ehci_hcd manages to detect the ports correctly (or at least doesn't interfere with uhci). I can then use both low-speed and hi-speed devices for a variable amount of time (spanning 20 minutes up to 8 hours), after which the ports suddenly go down. Rebooting however falls (in 19 of 20 cases) outside of the 5%, and I'm lost again (fortunately the internal keyboard and mouse always work, so at least I /can/ reboot).

Measures taken
==============
I've found an article suggesting to
echo Y > /sys/module/usbcore/parameters/old_scheme_first
which I've done. Interestingly, when turning the parameter to 'Y' and then pluggin the hub out and in, all ports come on. Unfortunately this doesn't work once the setting is done in the boot process (/etc/init.d/local).
---
I've also found articles suggesting to throw away the hub and get another one, which of course I can't take plain seriously, because now I know the problem of this hub, and I'm not going to change it for a hub whose problem I even don't know yet... =;)
---
Of course, I've also tried a kernel with ehci_hcd disabled. This works fine for the keyboard and mouse now, as long as I don't use any high-speed devices, such as the palm sync, which doesn't work any more in this setup (neither when plugged in the hub nor when plugged in the laptop [root hub]).

Measures not taken
==================
I didn't test the hub on Microsoft Windows, because I assume that wouldn't add to the solution space, since the problem is clearly located in the uhci_hcd vs. ehci_hcd domain of the linux kernel, as the hub is fully functional (within the lo speed scope) when used with only uhci.

Thanks for any ideas or suggestions!

--

Dominik Wezel
Systems Engineer

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/