[U-Boot] [PATCH v3] cmd: usb: add blk devices to ignore list in tree graph
Suneel Garapati
suneelglinux at gmail.com
Thu Sep 21 02:18:59 UTC 2017
Hi Bin,
On Wed, Sep 20, 2017 at 12:42 AM, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Suneel,
>
> On Wed, Sep 20, 2017 at 2:32 PM, Suneel Garapati <suneelglinux at gmail.com> wrote:
>> Hi Bin,
>>
>> On Tue, Sep 19, 2017 at 8:32 PM, Bin Meng <bmeng.cn at gmail.com> wrote:
>>> Hi Suneel,
>>>
>>> On Wed, Sep 20, 2017 at 2:31 AM, Suneel Garapati <suneelglinux at gmail.com> wrote:
>>>> Hi Bin,
>>>>
>>>> On Tue, Sep 19, 2017 at 12:32 AM, Bin Meng <bmeng.cn at gmail.com> wrote:
>>>>> Hi Suneel,
>>>>>
>>>>> On Tue, Sep 19, 2017 at 1:55 PM, Suneel Garapati <suneelglinux at gmail.com> wrote:
>>>>>> add blk child devices to ignore list while displaying
>>>>>> usb tree graph, otherwise usb tree and info commands
>>>>>> may cause crash treating blk as usb device.
>>>>>>
>>>>>> Signed-off-by: Suneel Garapati <suneelglinux at gmail.com>
>>>>>> ---
>>>>>>
>>>>>> Changes v3:
>>>>>> - remove 'check on parent uclass' in description
>>>>>
>>>>> thanks for making the changes.
>>>>>
>>>>>> Changes v2:
>>>>>> - remove check on parent uclass
>>>>>> Changes v1:
>>>>>> - add separate check on blk uclass
>>>>>> - modify description
>>>>>> - add separate check on parent uclass as usb
>>>>>>
>>>>>> cmd/usb.c | 11 ++++++++---
>>>>>> 1 file changed, 8 insertions(+), 3 deletions(-)
>>>>>>
>>>>>> diff --git a/cmd/usb.c b/cmd/usb.c
>>>>>> index d95bcf5..3889994 100644
>>>>>> --- a/cmd/usb.c
>>>>>> +++ b/cmd/usb.c
>>>>>> @@ -414,8 +414,12 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre)
>>>>>>
>>>>>> udev = dev_get_parent_priv(child);
>>>>>>
>>>>>> - /* Ignore emulators, we only want real devices */
>>>>>> - if (device_get_uclass_id(child) != UCLASS_USB_EMUL) {
>>>>>> + /*
>>>>>> + * Ignore emulators and block child devices, we only want
>>>>>> + * real devices
>>>>>> + */
>>>>>> + if ((device_get_uclass_id(child) != UCLASS_USB_EMUL) &&
>>>>>> + (device_get_uclass_id(child) != UCLASS_BLK)) {
>>>>>> usb_show_tree_graph(udev, pre);
>>>>>> pre[index] = 0;
>>>>>> }
>>>>>> @@ -605,7 +609,8 @@ static void usb_show_info(struct usb_device *udev)
>>>>>> for (device_find_first_child(udev->dev, &child);
>>>>>> child;
>>>>>> device_find_next_child(&child)) {
>>>>>> - if (device_active(child)) {
>>>>>> + if (device_active(child) &&
>>>>>> + (device_get_uclass_id(child) != UCLASS_BLK)) {
>>>>>> udev = dev_get_parent_priv(child);
>>>>>> usb_show_info(udev);
>>>>>> }
>>>>>> --
>>>>>
>>>>> My testing of 'usb info' looks OK, however 'usb tree' still has some
>>>>> issues below:
>>>>>
>>>>> => usb tree
>>>>> USB device tree:
>>>>> 1 Hub (5 Gb/s, 0mA)
>>>>> | U-Boot XHCI Host Controller
>>>>> |
>>>>> +-2 Hub (5 Gb/s, 0mA)
>>>>> | | GenesysLogic USB3.0 Hub
>>>>> | |
>>>>> | +-5 Vendor specific (5 Gb/s, 36mA)
>>>>> | Realtek USB 10/100/1000 LAN 00E04C680977
>>>>> |
>>>> Leaving block devices, why the extra print here for lan port?
>>>
>>> There is nothing wrong here. Every device has a separation line.
>>>
>>>>
>>>>> +-3 Hub (480 Mb/s, 100mA)
>>>>> | | GenesysLogic USB2.0 Hub
>>>>> | |
>>>> And here?
>>>>
>>>
>>> Again, nothing wrong here.
>>>
>>>>> | +-6 Mass Storage (480 Mb/s, 98mA)
>>>>> | | | USBest Technology USB Mass Storage Device 101111c452b7c0
>>>>> | | |
>>>>>
>>>>> As you see, we just don't print out the BLK device, but we still print
>>>>> out the | here.
>>>> I believe if the extra print for other devices is correct, then this
>>>> tree is fine.
>>>
>>> It's not correct. The tree graphic does not look correct now.
>>>
>>>> Also, I believe this is not related to the fix this patch aims at.
>>>> Let me know if otherwise.
>>>
>>> No, you should not fix one thing but introduce another thing.
>>
>> Ok. Let me be explicit here, to understand where I am going wrong.
>>
>> Each usb_show_tree_graph call on a device can be broken down like
>> below into three line print sets
>>
>> <old-pre><devnum> <class description>
>> <new-pre><device description>
>> <repeat new-pre> (This is unconditional print, even before this fix)
>>
>> USB device tree:
>>
>> 1 Hub (5 Gb/s, 0mA)
>> | U-Boot XHCI Host Controller
>> |
>>
>> +-2 Hub (5 Gb/s, 0mA)
>> | | GenesysLogic USB3.0 Hub
>> | |
>>
>> | +-5 Vendor specific (5 Gb/s, 36mA)
>> | Realtek USB 10/100/1000 LAN 00E04C680977
>> |
>>
>> +-3 Hub (480 Mb/s, 100mA)
>> | | GenesysLogic USB2.0 Hub
>> | | (You confirmed this as device separator)
>>
>> | +-6 Mass Storage (480 Mb/s, 98mA)
>> | | | USBest Technology USB Mass Storage Device 101111c452b7c0
>> | | | (so is this unconditional print as device separator)
>>
>> Call to block child is ignored here, so is the set of prints as
>> described above and continues with next device below.
>> It is not like only device description is cancelled but preamble is
>> being printed.
>>
>> | +-7 Human Interface (1.5 Mb/s, 70mA)
>> | Dell Dell USB Keyboard
>> |
>>
>> +-4 Mass Storage (480 Mb/s, 300mA)
>> | JetFlash Mass Storage Device 16Q6ZPH20GF3E8UQ
>> |
>>
>> Also, request you to let me know the correct tree graph you have in mind.
>>
>
> Please check the attached 'usb tree' logs, and I believe that explains
> where the problem is.
Thanks for the inputs. I have sent v4 including the fix for unwanted
preamble for child blk devices.
Regards,
Suneel
>
> Regards,
> Bin
More information about the U-Boot
mailing list