[coreboot] USB HUB depth

Nico Huber nico.huber at secunet.com
Thu Mar 9 14:16:50 CET 2017

On 09.03.2017 11:18, Joshua Pincus wrote:
> Hi,
> I'm new to coreboot and to this group.  As this is my first post, let me
> thank you folks for developing an impressive and incredibly useful product!

Hi Joshua,

> I recently fired up the coreboot USB stack on an x86 development board.
> The USB stack reported back that I have 2 EHCI host controllers on the
> board.  Each controller, in turn, has a number of ports.  Attached to at
> most 1 of the ports beyond each controller is a USB 2.0 hub.  Each hub, in
> turn, has a number of ports which the coreboot USB stack enables.

are you talking about libpayload's USB stack? coreboot itself doesn't
have one.

> My issue is this: I see the host controllers get initialized.  I see the
> aforementioned hubs get initialized.  I see the ports underneath those hubs
> get enabled.  I do not see nor can I find any existing code that scans and
> attaches the ports associated with those hubs.  Consequently, none of the
> devices (aka keyboard, USB stick, etc.) plugged into the ports beyond those
> hubs are scanned and attached.  Put another way, it looks like the USB
> stack, as currently written, only scans and attaches devices at tier 0 and
> tier 1.  Anything beyond the hub is merely enabled.
> Am I wrong or missing something?  How difficult would it be to continue the
> process of recursion to subsequent tiers?

If you are talking about libpayload, there shouldn't be an artificial
limit. Responsible for hub class USB devices is the code in drivers/usb/
generic_hub.c + drivers/usb/usbhub.c.

Hope that helps,

More information about the coreboot mailing list