From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] USB and unbinding
Date: Tue, 21 Jul 2015 21:52:44 +0200 [thread overview]
Message-ID: <55AEA30C.7020104@redhat.com> (raw)
In-Reply-To: <CAPnjgZ1csoxbahnsvbwOAwV4TbBsjFhnUN7=pLjRLndfCnr7qA@mail.gmail.com>
Hi,
On 07/20/2015 05:49 PM, Simon Glass wrote:
> Hi Hans,
>
> On 20 July 2015 at 09:31, Hans de Goede <hdegoede@redhat.com> wrote:
>> Hi,
>>
>> On 20-07-15 04:23, Simon Glass wrote:
>>>
>>> Hi Hans,
>>>
>>> I've been thinking about the USB unbinding code. I know that I agreed
>>> to go with it, but in retrospect I think that was a mistake.
>>>
>>> I believe we should separate out the unbinding and make it an option,
>>> so that it is not required in order to use USB. In effect this makes
>>> one of driver model's design goals (the option to drop unused code)
>>> useless since USB is a common interface.
>>>
>>> If I recall the only problem the lack of unbinding caused was that the
>>> keyboard driver broke. I suspect it broke in a way that can be fixed.
>>> In fact I recently converted usb_ether to driver model and I'm willing
>>> to do the keyboard side also.
>>>
>>> I'd like the USB code to function with or without the unbinding (i.e.
>>> it uses it if there). What do you think?
>>
>>
>> I strongly believe that unbinding is the proper thing todo for usb since
>> it is a hotplug bus.
>>
>> IMHO the way the usb_find_emul_child() function was used before to re-use
>> udevice-s after e.g. a "usb reset" was an ugly hack which just happened to
>> work, but it in no way reflects reality.
>>
>> More importantly we need unbind support to properly stop usb controllers
>> when
>> booting the OS, so that they are not DMA-ing to/from their scratch-ram area
>> in DRAM when the main OS boots, so not having unbind support combined with
>> USB really is a no no.
>>
>> This is why I suggested to simply select the unbind Kconfig when USB is
>> selected in Kconfig.
>
> I think you are referring to remove(), not unbind().
Right I mean that the remove callback *must* be called on usb_stop to avoid
the usb controller dma-ing over random DRAM when the OS starts.
> Although we might
> consider spiting them so we have a DM_DEVICE_REMOVE and a separate
> DM_DEVICE_UNBIND.
>
>>
>> The actual unbind core code is not that big, so I believe that the best
>> solution is to always build the core if either DM_DEVICE_REMOVE *or*
>> DM_USB is selected, and non USB drivers can leave out their unbind
>> code if DM_DEVICE_REMOVE is not set, that should still give us most of
>> the size savings without needing to do ugly hacks for USB.
>
> My main objection is that we tie USB such that it *will not work*
> unless we support unbinding. I'm fine with it being recommended, but
> core driver model features should be independent of subsystems. This
> also seems quite unnecessary. Re your common about the 'ugly hack that
> just happened to work', in principle we can just keep on creating new
> devices and ignore the old ones.
That will still cause problems with code addressing the usb-devices
by index, as the old devices will still be there.
> That's the idea behind not supporting
> unbinding. There should be no problem with this approach.
This approach will only work if find_child_devnum is fixed to search
backwards through the childs list, so that it will check the newly
added nodes first.
> So I'd like to adjust the USB code so that it still works without
> unbinding, even if it is not optimal. I think that is the right thing
> to do in this case.
As said, the remove callback of usb-host drivers *must* always be called,
other then that if you can make things work without unbind that is
fine with me.
Regards,
Hans
next prev parent reply other threads:[~2015-07-21 19:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-20 2:23 [U-Boot] USB and unbinding Simon Glass
2015-07-20 15:31 ` Hans de Goede
2015-07-20 15:49 ` Simon Glass
2015-07-21 19:52 ` Hans de Goede [this message]
2015-07-22 3:48 ` Simon Glass
2015-07-22 9:09 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55AEA30C.7020104@redhat.com \
--to=hdegoede@redhat.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox