Comment 45 for bug 296710

Revision history for this message
TJ (tj) wrote :

So, as described on IRC #ubuntu-kernel by mjg59, the issue is USB host controllers sharing physical ports.

In this test-case the PC has 4x USB 1.1 host controllers and 1x USB2 host controller.

The three physical external USB ports are connected such that the USB2 host controller and one of the USB1.1 controllers can access and claim them.

The test-case used port 1 (the rear-most port). If ehci_hcd (USB2) starts first it claims the port via:

/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host8/target8:0:0

If uhci_hcd (USB1.1) starts first it claims the port via:

/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host7/target7:0:0

So, as we know, the solution is to force ehci_hcd to load and initialise a host controller and, most importantly, *claim the shared ports* before uhci_hcd.

The previous gap in our understanding of this issue is the nature of the physical ports being *shared* by the host controllers on a first come, first served basis.

If the USB drivers remain as modules then this requires the modules listed in required load-order in /etc/initramfs-tools/modules:

ehci_hcd
uhci_hcd
ohci_hcd

Alternatively, if the modules are built-in to the kernel image we need to ensure the link order is the same (fastest protocol driver first), and that support for USB3 (SuperSpeed - 5Gbps) via a xhci_hcd module doesn't get tripped up by this issue in the future.