[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