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 08/22] dm: usb: Use device_chld_remove and _unbind to clean up usb devs on stop
Date: Tue, 30 Jun 2015 22:20:56 +0200	[thread overview]
Message-ID: <5592FA28.8010704@redhat.com> (raw)
In-Reply-To: <CAPnjgZ0Uwq=2dJoG0LcGbkwscYDV-cU9RzMvNQHZ+evY41chvw@mail.gmail.com>

Hi,

On 06/30/2015 06:07 PM, Simon Glass wrote:

<snip>

>>> Instead, I wonder if we can remove the children when we probe the bus?
>>
>>
>> That should work, but I do not really see any advantage in that,
>> removing the children is not that expensive and it feels like a
>> kludge.
>
> That's how it currently works, from what I can see in the code. But
> since there is a 'usb_started' boolean this is irrelevant.
>
>>
>>> Also, what happens to children that are in the device tree - i.e.
>>> static USB devices like WiFi? The device tree might have parameters
>>> for them. Still, that might not matter as I'm not sure that case is
>>> handled correctly today.
>>
>>
>> AFAIK there is no such thing as usb devices in devicetree, which
>> makes sense as usb is a fully discoverable bus.
>
> Sort-of. But as with PCI it is useful to be able to add settings for
> the devices in some cases. You can match them using vendor/device or
> interface IDs. Then the driver can access its settings.

AFAIK there is not a single example of having settings in devicetree
for an usb device, since usb-devices are always 100% self describing
since usb is a bus designed for hot(un)plug from the outset.

> That's why I'm suggesting we unbind the devices that are no-longer present.

You're asking to make the code more complicated here using a what if
reasoning with a "what if" which is likely to never happen.

>
>>
>>
>>
>>>
>>>>
>>>>
>>>>>
>>>>>>
>>>>>> The result of this commit is best seen in the output of "dm tree" after
>>>>>> plugging out an usb hub with 2 devices plugges in and plugging in a
>>>>>> keyb.
>>>>>> instead, before this commit the output would be:
>>>>>>
>>>>>>     usb         [ + ]    `-- sunxi-musb
>>>>>>     usb_hub     [   ]        |-- usb_hub
>>>>>>     usb_mass_st [   ]        |   |-- usb_mass_storage
>>>>>>     usb_dev_gen [   ]        |   `-- generic_bus_0_dev_3
>>>>>>     usb_dev_gen [ + ]        `-- generic_bus_0_dev_1
>>>>>>
>>>>>> Notice the non active usb_hub child and its 2 non active children. The
>>>>>> first child being non-active as in this example also causes
>>>>>> usb_get_dev_index
>>>>>> to return NULL when probing the first child, which results in the usb
>>>>>> kbd
>>>>>> code not binding to the keyboard.
>>>>>
>>>>>
>>>>>
>>>>> Although I suspect that could be fixed.
>>>>
>>>>
>>>>
>>>> Right, but just removing the children is a much cleaner solution, and
>>>> also
>>>> makes the output of "dm tree" properly reflect reality.
>>>
>>>
>>> True, although you also have 'usb tree' for that. Another option would
>>> be to mark devices that were found and remove the others after the
>>> scan.
>>
>>
>> That seems like needless complexity. I believe that simply removing +
>> unbinding
>> the children on usb_stop is the right thing to do, and it also is the KISS
>> solution.
>
> I'm good with the remove(), but less sure about the unbind().

The unbind is necessary for usb_get_dev_index() to work properly,
which is necessary for proper output of "usb tree" and for driver
binding to work properly, without the unbind usb-keyboards will e.g.
not work in certain circumstances.

> The
> state of 'dm tree' does not bother me,

The state if dm tree is what usb_get_dev_index() works from, so if
it is not in a good state, then usb_get_dev_index() will not work.

> and I worry that we then limit
> our ability to use usb_find_child() to locate a device's parameters
> (i.e. support for more complex devices which need settings might be
> harder).

Again this is a what if reasoning for a hypothetical future problem
which will likely never happen, where as the broken state of the
dm tree after a "usb reset" is causing real problems.

> For now, can we just leave this alone? I really don't want to re-visit
> this later.

Nope we cannot leave this alone, without unbinding usb devices which
no longer exist, the dm tree will be broken and with it
usb_get_dev_index() and through usb_get_dev_index() the keyboard
driver.

Regards,

Hans

  reply	other threads:[~2015-06-30 20:20 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-17 19:33 [U-Boot] [PATCH 00/22] Convert musb host mode code to the device-model Hans de Goede
2015-06-17 19:33 ` [U-Boot] [PATCH 01/22] usb: Always declare usb function prototypes Hans de Goede
2015-06-29  3:44   ` Simon Glass
2015-07-07 18:33     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 02/22] usb: Drop device-model specific copy of usb_legacy_port_reset Hans de Goede
2015-06-29  3:44   ` Simon Glass
2015-07-07 18:33     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 03/22] usb: usb_setup_device: Drop unneeded portnr function argument Hans de Goede
2015-06-29  3:44   ` Simon Glass
2015-06-30 12:29     ` Hans de Goede
2015-06-30 14:51       ` Simon Glass
2015-07-07 18:34         ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 04/22] usb: Pass device instead of portnr to usb_legacy_port_reset Hans de Goede
2015-06-29  3:44   ` Simon Glass
2015-06-30 12:31     ` Hans de Goede
2015-06-30 14:58       ` Simon Glass
2015-07-07 18:34         ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 05/22] usb: Add an usb_device parameter to usb_reset_root_port Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:34     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 06/22] dm: Export device_chld_remove / device_chld_unbind Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-06-30 12:33     ` Hans de Goede
2015-06-17 19:33 ` [U-Boot] [PATCH 07/22] dm: usb: Fix "usb tree" output Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:34     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 08/22] dm: usb: Use device_chld_remove and _unbind to clean up usb devs on stop Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-06-30 12:54     ` Hans de Goede
2015-06-30 14:58       ` Simon Glass
2015-06-30 15:54         ` Hans de Goede
2015-06-30 16:07           ` Simon Glass
2015-06-30 20:20             ` Hans de Goede [this message]
2015-06-30 21:20               ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 09/22] dm: usb: Allow usb host drivers to implement usb_reset_root_port Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:35     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 10/22] dm: usb: Do not assume that first child is always a hub Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:35     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 11/22] musb: Allow musb_platform_enable to return an error code Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:35     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 12/22] musb: Update usb-compat to work with struct usb_device without a parent ptr Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-01 14:57     ` Hans de Goede
2015-07-07 18:35       ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 13/22] musb: Rename and wrap public functions Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:35     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 14/22] musb: Add musb_host_data struct to hold global data Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:36     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 15/22] musb: Add device-model support to the musb-host u-boot glue Hans de Goede
2015-06-29  3:45   ` Simon Glass
2015-07-07 18:36     ` Simon Glass
2015-06-17 19:33 ` [U-Boot] [PATCH 16/22] sunxi: usb-phy: Add support for reading otg id pin value Hans de Goede
2015-06-19  7:37   ` Ian Campbell
2015-06-17 19:34 ` [U-Boot] [PATCH 17/22] sunxi: musb: Move vbus check to sunxi_musb_enable Hans de Goede
2015-06-19  7:37   ` Ian Campbell
2015-06-17 19:34 ` [U-Boot] [PATCH 18/22] sunxi: musb: Add id pin support Hans de Goede
2015-06-19  7:40   ` Ian Campbell
2015-06-19  9:33     ` Hans de Goede
2015-06-17 19:34 ` [U-Boot] [PATCH 19/22] sunxi: musb: Move musb config and platdata to the sunxi-musb glue Hans de Goede
2015-06-19  7:43   ` Ian Campbell
2015-06-19  9:35     ` Hans de Goede
2015-06-19 13:31       ` Ian Campbell
2015-06-17 19:34 ` [U-Boot] [PATCH 20/22] sunxi: musb: Use device-model for musb host mode Hans de Goede
2015-06-19  7:45   ` Ian Campbell
2015-06-17 19:34 ` [U-Boot] [PATCH 21/22] sunxi: Kconfig: Enable CONFIG_USB and friends by default on sunxi Hans de Goede
2015-06-19  7:46   ` Ian Campbell
2015-06-19  9:37     ` Hans de Goede
2015-06-19 13:32       ` Ian Campbell
2015-06-17 19:34 ` [U-Boot] [PATCH 22/22] sunxi: ga10h: Enable both otg and regular usb host controllers Hans de Goede
2015-06-19  7:46   ` Ian Campbell
2015-06-19 13:10 ` [U-Boot] [PATCH 00/22] Convert musb host mode code to the device-model Simon Glass
2015-06-19 13:12   ` Hans de Goede
2015-06-19 13:14   ` 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=5592FA28.8010704@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