All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.