[PATCH 1/4] usb: onboard-hub: Use the ofnode to check if the peer-hub was probed

Anand Moon linux.amoon at gmail.com
Mon May 19 14:42:21 CEST 2025


Hi Lukasz,

On Fri, 25 Apr 2025 at 16:32, Lukasz Czechowski
<lukasz.czechowski at thaumatec.com> wrote:
>
> Currently the check in usb_onboard_hub_bind is relying on specific
> compatible string for the Michrochip USB5744. Replace this with
> more generic approach that will allow to add new types of devices
> to the of_match table. Because the driver only needs to bind one
> "half" of the hub, the peer-hub node is used to find out if it
> was already done. In case peer-hub was bound, -ENODEV is returned.
>
> Signed-off-by: Lukasz Czechowski <lukasz.czechowski at thaumatec.com>
> ---
>  common/usb_onboard_hub.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/common/usb_onboard_hub.c b/common/usb_onboard_hub.c
> index 7fe62b043e6a..9f8c1a304cdf 100644
> --- a/common/usb_onboard_hub.c
> +++ b/common/usb_onboard_hub.c
> @@ -9,6 +9,7 @@
>
>  #include <asm/gpio.h>
>  #include <dm.h>
> +#include <dm/device.h>
>  #include <dm/device_compat.h>
>  #include <i2c.h>
>  #include <linux/delay.h>
> @@ -179,8 +180,8 @@ err:
>  static int usb_onboard_hub_bind(struct udevice *dev)
>  {
>         struct ofnode_phandle_args phandle;
> -       const void *fdt = gd->fdt_blob;
> -       int ret, off;
> +       struct udevice *peerdev;
> +       int ret;
>
>         ret = dev_read_phandle_with_args(dev, "peer-hub", NULL, 0, 0, &phandle);
>         if (ret == -ENOENT) {
> @@ -193,10 +194,14 @@ static int usb_onboard_hub_bind(struct udevice *dev)
>                 return ret;
>         }
>
> -       off = ofnode_to_offset(phandle.node);
> -       ret = fdt_node_check_compatible(fdt, off, "usb424,5744");
> -       if (!ret)
> +       ret = device_find_global_by_ofnode(phandle.node, &peerdev);
> +       if (ret) {
> +               dev_dbg(dev, "binding before peer-hub %s\n",
> +                       ofnode_get_name(phandle.node));
>                 return 0;
> +       }
> +
> +       dev_dbg(dev, "peer-hub %s has been bound\n", peerdev->name);
>
>         return -ENODEV;
>  }
>

Thanks for your work

I'm currently trying to reorder my changes for the
Odroid Amlogic platform on top of your patch series.
However, I'm facing an issue where the probe is not getting called
and it isn't working on the Odroid N2+ board. I'm struggling to identify the
missing piece that's causing this failure. Could you share some pointers?

# dm tree
 simple_bus   11  [ + ]   dwc3-meson-g12a       |   `-- usb at ffe09000
 usb_gadget    0  [   ]   dwc2-udc-otg          |       |-- usb at ff400000
 usb           0  [ + ]   xhci-dwc3             |       `-- usb at ff500000
 usb_hub       0  [ + ]   usb_hub               |           `-- usb_hub
 usb_hub       1  [ + ]   usb_hub               |               |-- usb_hub
 usb_mass_s    0  [ + ]   usb_mass_storage      |               |
`-- usb_mass_storage
 blk           2  [ + ]   usb_storage_blk       |               |
 |-- usb_mass_storage.lun0
 partition     0  [ + ]   blk_partition         |               |
 |   `-- usb_mass_storage.lun0:1
 bootdev       3  [   ]   usb_bootdev           |               |
 `-- usb_mass_storage.lun0.bootdev
 usb_hub       2  [ + ]   usb_hub               |               `-- usb_hub

# dm devices
                                  usb_hub
usb_kbd                   062 keyboard             <none>
usb_mass_storage          066 usb_mass_storage     usb_mass_storage
usb_onboard_hub           128 usb_hub              <none>
usb_storage_blk           022 blk                  usb_mass_storage.lun0

Thanks
-Anand


More information about the U-Boot mailing list