cmd: bind/unbind by class index doesn't work with usb gadget

Zixun LI admin at hifiphile.com
Fri Jul 26 15:24:28 CEST 2024


Bind/unbind a gadget function driver to a USB gadget device doesn't work
with class index, while using node path is ok. For example:

U-Boot> dm tree

 Class     Index  Probed  Driver                Name
-----------------------------------------------------------
 root          0  [ + ]   root_driver           root_driver
 simple_bus    0  [ + ]   simple_bus            |-- ahb
 simple_bus    1  [ + ]   simple_bus            |   |-- apb
 ...
 usb           0  [   ]   atmel_usba_udc        |   |   |-- gadget at f803c000

U-Boot> bind usb 0 usb_ether
Cannot find device 0 of class usb

Both USB host uclass and USB gadget uclass are using the same name "usb"
while they are under different class id of UCLASS_USB and
UCLASS_USB_GADGET_GENERIC.

bind_by_class_index() of cmd/bind.c uses uclass_get_by_name() to find
class id, since both class have the same name it will get the id of
UCLASS_USB instead since it is at the front of the uclass id list.

Then uclass_find_device() will try to find the wrong device and fail.

But fixing this issue simply by renaming gadget uclass name will break
the DT alias feature DM_UC_FLAG_SEQ_ALIAS.

Any idea how to fix it ? Like adding a name_seq_alias field to
uclass_driver structure ?


More information about the U-Boot mailing list