EHCI and USB1.1 and kernels, oh my!
March 20th, 2008So I mentioned that my laptop runs Gentoo Linux. I try to keep it up-to-date, but usually this means that things break. Frequently. This is just one of the latest issues I’ve encountered.
I use the tuxonice sources (regular kernel sources pre-patched with support for TuxOnIce, Linux’s somewhat more advanced hibernation functionality). The current stable version in Portage is 2.6.23-tuxonice-r10. This is the first version in which Gentoo acknowledged the namechange from Software Suspend 2. Anyway, since I was upgrading, I opted to reconfigure my kernel from scratch. For the most part, this is easy, except I usually get one or two things wrong. Never anything that prevents me from booting, but just some annoying bits. This time, there were two things – I compiled without support for the fuse module (supports mounting Filesystems in USErspace), so I couldn’t mount my Windows partition. Annoying, but I knew how to fix it, and the error was self-explanatory.
The other misconfiguration was USB. Previously, I was able to use my USB2 flash drive with no problem, despite the fact that both of my available ports are only 1.1. However, after reconfiguring, I could no longer use the drive. The big annoying yellow/orange activity light flashed repeatedly and quickly rather than remaining solid and flashing during actual activity. In addition, I found output similar to the following in dmesg repeating over and over again:
dmesg output:
CONNECT
hub 4-0:1.0: port 4, status 0501, change 0001, 480 Mb/s
hub 4-0:1.0: debounce: port 4: total 100ms stable 100ms status 0×501
ehci_hcd 0000:00:1d.7: port 4 high speed
ehci_hcd 0000:00:1d.7: GetStatus port 4 status 001005 POWER sig=se0 PE
CONNECT
usb 4-4: new high speed USB device using ehci_hcd and address 2
ehci_hcd 0000:00:1d.7: devpath 4 ep0in 3strikes
ehci_hcd 0000:00:1d.7: devpath 4 ep0in 3strikes
ehci_hcd 0000:00:1d.7: devpath 4 ep0in 3strikes
ehci_hcd 0000:00:1d.7: GetStatus port 4 status 001002 POWER sig=se0 CSC
hub 4-0:1.0: state 7 ports 6 chg 0000 evt 0010
hub 4-0:1.0: state 7 ports 6 chg 0000 evt 0010
ehci_hcd 0000:00:1d.7: GetStatus port 4 status 001803 POWER sig=j CSC
I googled around and found this message on the Linux Kernel Mailing List. EHCI provides USB2 functionality. Apparently, since I had compiled in support for EHCI, and since I plugged a USB2 device, EHCI took over and was attempting to handle the device, even though the device was not plugged into a USB2 port. The repeating dmesg output and flashing activity light represented EHCI repeatedly connecting and disconnecting the drive. I removed EHCI support, recompiled and reinstalled the kernel, and suddenly my flash drives operated normally again!
I don’t know if this behavior is intended – that if EHCI support is available, it will take over when managing a USB1.1 device, regardless of the version of the port involved. There may be some other obscure option I haven’t set, or this might be a known bug in the kernel. For now, though, since there’s no reason for me to even have EHCI support at all, my solution works.
Now to explore tuxoniceui_fbsplash difficulties…

March 20th, 2008 at 1:25 pm
Nice fix. However, I am pretty sure that the latest version of windows supports this out of the box.
March 20th, 2008 at 1:43 pm
I keep Windows around so I can test to make sure that my hardware isn’t broken. Also, not having EHCI support (and support for everything else under the sun) automatically built in means Linux performs better than Windows
.