Posts Tagged ‘ehci’

EHCI and USB1.1 and kernels, oh my!

Thursday, March 20th, 2008

So 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…