public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 18/26] dm: usb: Remove inactive children after a bus scan
Date: Thu, 12 Nov 2015 15:08:41 +0100	[thread overview]
Message-ID: <56449D69.2020904@redhat.com> (raw)
In-Reply-To: <CAPnjgZ3kdmDJan52QM9go_RYc-Xemf-_K53sX-7xDfRusBm29A@mail.gmail.com>

Hi,

On 11-11-15 19:15, Simon Glass wrote:
> Hi Hans,
>
> On 11 November 2015 at 10:02, Hans de Goede <j.w.r.degoede@gmail.com> wrote:

<snip>

>> Ok, I've ran a whole battery of tests on your u-boot-dm/usb-working branch.
>
> Thanks!
>
>>
>> There are 2 issues:
>>
>> 1) You need to add these change to the commit introducing usb-keyb dm
>> support (or one of the related commits), otherwise usb-keyb support
>> breaks:
>>
>> --- a/arch/arm/Kconfig
>> +++ b/arch/arm/Kconfig
>> @@ -513,6 +513,7 @@ config ARCH_SUNXI
>>          select DM
>>          select DM_GPIO
>>          select DM_ETH
>> +       select DM_KEYBOARD
>>          select DM_SERIAL
>>          select DM_USB
>>          select OF_CONTROL
>>
>> The breakage is that without this usb_scan_device() returns -96
>> (EPFNOSUPPORT) for usb keyboards.
>
> OK. I am a bit concerned this might affect other boards too. Still, if
> we get this series applied soon there is plenty of time for testing.
> I'll look a bit closer.

Ok.

>> 2) With that branch there still is the purely cosmetical issue,
>> that if one plugs a usb-stick + keyb into the same hub, then swaps
>> their place and do "usb reset" and then "usb tree" looks like this:
>>
>> USB device tree:
>>    1  Hub (480 Mb/s, 100mA)
>>    |   USB2.0 Hub
>>    |
>>    +-3  Human Interface (1.5 Mb/s, 100mA)
>>    |    SINO WEALTH USB Composite Device
>>    |
>>    +-2  Mass Storage (480 Mb/s, 100mA)
>>         USB Flash Disk 4C0E960F
>>
>> Notice the order of devices listed: 1 - 3 - 2, which is a bit weird,
>> as said this is purely cosmetical.
>>
>> Note you can easily fix this by only reverting the:
>>
>> "dm: usb: Rename usb_find_child to usb_find_emul_child"
>>
>> commit, and keep the other 2 you revert and dropping this patch ?
>>
>> As I already suggested before, this is both more KISS and as you
>> can see it solves some actually (admittedly very minor) issues.
>>
>> I'm not really buying your arguments for your more complex solution,
>> as shown above re-using the devices actually causes issues.
>>
>> Your other argument of wanting to attach device-tree properties
>> I also do not find a strong argument, for one there has never been
>> a need to do so sofar, and if we ever need this we need a way
>> to specify which usb-device the properties belong to based on
>> the topology under the host / root-hub anyway, and match things
>> up when first scanning the bus. And if we can match things up
>> on the first scan we can also match them up on subsequent scans
>> and attach the same of-node again.
>>
>> Anyways I'm fine with doing things your way, but I still have
>> a preference for the more KISS and IMHO robust solution of
>> simple unbinding all devices on usb-stop.
>
> I wonder if it really is more complex. My preferred algorithm is to
> remove any devices that have not been probed after a scan. Yours is to
> remove and unbind any USB devices before a scan. What is the
> difference?

If you unbind everything before (re)scanning you always start with
a clean slate, making things more reproducible and simpler.

As for it being more complex, your approach needs a whole new
helper function and needs to walk the list of devices twice, where
as mine is just a single extra function call + error checking.

As an added bonus my approach allows adding an ifdef to usb_find_child
turning it into a nop like this

#if defined CONFIG_SANDBOX || !defined CONFIG_DM_DEVICE_REMOVE
    ...
    ... complex code to find child
    ...
#else
    return -ENODEV;
#endif

So besides not needing the extra helper function your solution
needs, my version also removes a bunch of extra code (from the
resulting binary) in almost all cases.

So your solution is definitely more complex, needlessly so IMHO.

> I much prefer not unbinding and rebinding devices. To my mind, devices
> should be bound once if possible, and most of the time it is possible.

Well in case of a re-scan we are discovering all devices from scratch,
not just looking for changed devices, simply starting with a clean
device list reflects this.

> This is different from the Linux approach of combining 'bind' and
> 'probe'. At present sandbox cannot support 'usb reset'. I would like
> sandbox to provide full support so that we can use tests to verify
> functionality rather than manual testing.
>
> Re the ordering above, I suppose I could fix that command easily
> enough. This is not a common problem though. Does it really matter?

Nope, as said this is a cosmetic issue, and for the record
I'm fine with your approach of always re-using existing devices
on a re-scan. I prefer the start with a clean slate approach but
either is fine with me.

>> ###
>>
>> Talking about usb-stop, there is still one (BIG!) problem after
>> this patch set when building usb-support with DM_DEVICE_REMOVE
>> not set. This means that the controllers dma engines will not
>> be stopped when booting the actual OS and they will still be
>> accessing parts of the main memory while the actual OS is
>> booting, which is BAD. So I suggest adding something like
>> this to all host drivers which use dma in this way:
>>
>> #if defined CONFIG_DM_USB && !defined CONFIG_DM_DEVICE_REMOVE
>> #error The EHCI driver cannot be used without CONFIG_DM_DEVICE_REMOVE otherwise DMA stays active while booting the OS
>> #endif
>
> Sounds good. I am not suggesting that we encourage people to build USB
> with out DM_DEVICE_REMOVE. I just want to make sure that we don't
> create unnecessary dependencies such that DM_DEVICE_REMOVE becomes
> impossible to use.
>
> We have a note in the Kconfig for that, but I agree we need to make it
> more explicit. With the #if approach it makes the pitfall much more
> obvious.

Ack, so we need to have patches for this for at least ohci, ehci, xhci
and I guess also uhci ? Who is going to write these patches ?

Regards,

Hans

  reply	other threads:[~2015-11-12 14:08 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09  6:47 [U-Boot] [PATCH v2 00/26] usb: Drop requirement for USB unbinding, add tests Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 01/26] sandbox: Add a way to skip time delays Simon Glass
2015-11-20  3:30   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 02/26] dm: usb: Avoid time delays in sandbox tests Simon Glass
2015-11-20  3:30   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 03/26] Move console definitions into a new console.h file Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 04/26] Drop config.h header from display_options.c Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 05/26] Add a circular memory buffer implementation Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 06/26] console: Add a console buffer Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 07/26] sandbox: Enable console recording and silent console Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 08/26] test: Record and silence console in tests Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 09/26] usb: Refactor USB tree output code for testing Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 10/26] dm: core: Add safe device iteration macros Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 11/26] sandbox: usb: Allow dynamic emulated USB device descriptors Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 12/26] sandbox: usb: Allow up to 4 emulated devices on a hub Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 13/26] sandbox: usb: Allow finding a USB emulator for a device Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 14/26] Revert "dm: usb: Rename usb_find_child to usb_find_emul_child" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 15/26] Revert "dm: usb: Use device_unbind_children to clean up usb devs on stop" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 16/26] Revert "dm: Export device_remove_children / device_unbind_children" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 17/26] dm: usb: Deprecate usb_get_dev_index() Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 18/26] dm: usb: Remove inactive children after a bus scan Simon Glass
2015-11-09  8:22   ` Hans de Goede
2015-11-09 20:25     ` Simon Glass
2015-11-10 23:30       ` Simon Glass
2015-11-11 17:02         ` Hans de Goede
2015-11-11 18:15           ` Simon Glass
2015-11-12 14:08             ` Hans de Goede [this message]
2015-11-13 21:58               ` Simon Glass
2015-11-15 19:35                 ` Hans de Goede
2015-11-16 21:08                   ` Simon Glass
2015-11-20  3:32                     ` Simon Glass
2015-11-11 17:03         ` Hans de Goede
2015-11-09  6:48 ` [U-Boot] [PATCH v2 19/26] dm: test: usb: Add tests for the 'usb tree' command Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 20/26] dm: test: usb: Add a test for device reordering Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 21/26] usb: Drop unused code in usb_kbd.c Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 22/26] usb: Avoid open-coded USB constants " Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 23/26] usb: sandbox: Add support for interrupt operations Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 24/26] usb: sandbox: Add a USB emulation driver Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 25/26] sandbox: Enable USB keyboard Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 26/26] dm: test: usb: sandbox: Add keyboard tests for sandbox Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  8:14 ` [U-Boot] [PATCH v2 00/26] usb: Drop requirement for USB unbinding, add tests Hans de Goede
2015-11-09 16:54   ` Simon Glass
2015-11-18 15:53     ` Simon Glass
2015-11-09 14:17 ` Marek Vasut

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=56449D69.2020904@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