[U-Boot] [PATCH 0/8] usb: driver-model fixes and dm support sunxi-ehci.c

Hans de Goede hdegoede at redhat.com
Thu Apr 30 21:38:01 CEST 2015


Hi,

On 30-04-15 16:48, Simon Glass wrote:
> Hi Hans,
>
> On 30 April 2015 at 08:35, Hans de Goede <hdegoede at redhat.com> wrote:
>> Hi Simon and Marek,
>>
>> This series completes my work on converting the sunxi usb/ehci code to
>> the driver model. With this series everything works as it did before,
>> and all the issues I've been seeing when switching to the driver model
>> are resolved.
>>
>> Please review / merge. I think it would be best to merge this through
>> the dm tree.
>
> Great to see this, thanks for all the work and fixes.
>
> I am not too keen on the passing through of struct usb_device, in fact
> I went to some lengths to avoid that.
>
> I'll read through the patches again, but I wonder if we can avoid
> heading in that direction? Conceptually in driver model the device
> does not exist until we find out what it is and can locate a device
> driver.

Right, the problem is that AFAICT the way the driver-model works is
that the driver needs to be known at device creation time, this
probably is a result of the auto alloc mem on behalf of the device
driver feature.

But for usb this is problematic as we need to read descriptors and
whats not before we can find the right driver, and then we do not
want to re-read those descriptors and the driver needs access to
them too.

What you've been doing sofar is in essence passing through
struct usb_device from usb_scan_device to the pre_child_probe
method, with the difference that you've been doing it field by
field. My patch which just adds the maxpacket size to the fields
you're passing (via platdata) also works, but requires re-reading
all the descriptors which is slow(ish) and may upset some devices,
this can be avoided by stuffing more of usb_device into the
plat_data passed from sb_scan_device to the pre_child_probe, but
I decided it would be easier to just pass all of the usb_device

Another slightly cleaner (IMHO) option then copying over the entire
usb_device would be to dynamically alloc usb_device in usb_scan_device,
and keep using the same usb_device all the time, so remove the on
stack copy, and do not auto-alloc the per child data for the uclass
as it is already allocated manually in usb_scan_device.

This effectively gives us the kernel model of allocating the
generic usb_device bits before looking for a driver.

Regards,

Hans


More information about the U-Boot mailing list