mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
cmd: usb: ignore blk, emulation devices in usb tree/info display
Usb tree/info commands iterate over all usb uclass devices recursively. Blk uclass devices based on struct blk_desc are created for mass storage device, treating them as usb uclass devices based on struct usb_device and referencing usb config interface descriptors cause crash. To fix, ignore blk and usb_emul uclass devices in usb_show_info and usb_tree_graph. Also avoid addition of preamble for blk uclass child devices, otherwise tree dump gets messed up. Signed-off-by: Suneel Garapati <suneelglinux@gmail.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
93a51d301a
commit
abd7cedb19
1 changed files with 19 additions and 3 deletions
22
cmd/usb.c
22
cmd/usb.c
|
@ -349,6 +349,16 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre)
|
|||
printf(" %s", pre);
|
||||
#ifdef CONFIG_DM_USB
|
||||
has_child = device_has_active_children(dev->dev);
|
||||
if (device_get_uclass_id(dev->dev) == UCLASS_MASS_STORAGE) {
|
||||
struct udevice *child;
|
||||
|
||||
for (device_find_first_child(dev->dev, &child);
|
||||
child;
|
||||
device_find_next_child(&child)) {
|
||||
if (device_get_uclass_id(child) == UCLASS_BLK)
|
||||
has_child = 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* check if the device has connected children */
|
||||
int i;
|
||||
|
@ -414,8 +424,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 +619,9 @@ 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_USB_EMUL) &&
|
||||
(device_get_uclass_id(child) != UCLASS_BLK)) {
|
||||
udev = dev_get_parent_priv(child);
|
||||
usb_show_info(udev);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue