
On Mar 1, 2008, at 12:35 AM, Markus Klotzbücher wrote:
At this time the EHCI driver is exclusive in that there's no support for having the companion controller active. I presume this is one of the major themes for adding EHCI support, so that's definitely open for discussion.
This is definitely an issue, but not one that can or should be solved for the USB subsystem solely. What we really need to implement such features in a clean manner is a well thought out U-Boot Driver Model...
Agreed. But for USB it also goes beyond just a driver model. In particular we have: usb_lowlevel_init() usb_lowlevel_stop() submit_bulk_msg() submit_control_msg() submit_int_msg()
The functionality of the usb_lowlevel_*() functions will need to be addressed by a driver abstraction. This leaves the submit_*() functions. Those should be abstracted in the USB stack itself and be directed to the HC driver to which the USB device is attached. Something like function pointers in struct usb_device should do the trick...
Attached a patch with the common code changes as well as the EHCI driver itself. The patch does not contain any changes to get it built (i.e. included in libusb, etc). A seasoned U-Boot developer should have no problem playing with it, while the details are being worked out for getting this alongside a USB 1.1 HC driver.
Nice work! One thing we definitely will want to do is separate the low-level board/cpu specific and generic ehci code such as done for the generic ohci driver. From a first look it doesn't seem this would be too hard.
Agreed on both counts.