xHCI separate roothubs issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alan,

I'm working on separating out the xHCI roothub into a USB 3.0 and a USB
2.0 roothub, and it's turning out to touch way more code than I
expected.  Before I go too far down the rabbit hole, can you check
whether my initial design is sane?

It turns out that the xHCI host has two completely separate busses for
USB 3.0 and non-SuperSpeed ports.  So a USB 3.0 device can have the same
address as a USB 2.0 device under the same roothub.  That to me sounds
like an argument for having separate usb_bus structures in struct
usb_hcd.

Originally, my idea was to set the speed of the roothub USB device
(usb_bus->root_hub) to either USB 3.0 or USB 2.0, and key off that in
the xHCI hub functions to determine whether the driver should be
returning the port status for the USB 3.0 ports, or the USB 2.0 ports.
Only it turns out hub_status_data() and hub_control() are called with
the usb_hcd pointer, not the usb_bus pointer.  This means I have to
modify all the hub functions of all the hosts to straighten that out.

Plus, there are other ways that the "hcd is-a bus" mentality has blurred
the line between the host and the bus.  The status urb and timer for the
roothub are currently in usb_hcd, and would need to be moved into
usb_bus.  I would have create a pointer back to usb_hcd in usb_bus,
since the preferred way to get an hcd from a bus is to use
container_of(), which won't work if there is a second bus.

And then there's the question of what to do about power management for
the xHCI roothub.  It's obvious we shouldn't suspend the PCI controller
until both buses are suspended, but I haven't looked at the suspend
code to see if it's even feasible.

Do you see a better alternative than adding a second usb_bus to usb_hcd?

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux