[coreboot] SeaBIOS wit USB3.0 hub and USB3.0 devide behind the hub

Julius Werner jwerner at chromium.org
Thu Dec 11 06:44:06 CET 2014


This is a complicated case most firmware USB stacks don't support (I
don't have experience with SeaBIOS, but I know that both U-Boot and
libpayload won't work with that either). A USB 3.0 hub is essentially
two completely separate logical hubs connecting to two completely
separate logical ports on the host. The USB 3.0 part of the hub uses a
slightly different protocol (e.g. some bits in the port status have
different meanings) and from a quick glance the SeaBIOS code doesn't
seem to take that into account. I'm not sure where exactly it would
break, but one possibility is the speed detection (in USB 2.0 the port
status bits 9 and 10 indicate the speed, but in USB 3.0 it's implied
to always be SuperSpeed and those two bits indicate the link state and
the port power status instead). The speed is written in the XHCI Slot
Context for the device and using the wrong value there might cause
problems.

If you just want a quick workaround, simply make the device enumerate
at HighSpeed and it should work (only plugging the device "half-way"
into the socket so that the SuperSpeed lines in the back of the plug
don't connect usually does the trick). If you want it fixed someone
would have to enhance the usb-hub driver to take all the peculiarities
of USB 3.0 hubs into account.



More information about the coreboot mailing list