Hi Quentin,
On Mon, 19 May 2025 at 18:45, Quentin Schulz <quentin.sch...@cherry.de> wrote: > > Hi Anand, > > On 5/19/25 2:42 PM, Anand Moon wrote: > > Hi Lukasz, > > > > On Fri, 25 Apr 2025 at 16:32, Lukasz Czechowski > > <lukasz.czechow...@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.czechow...@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? > > > > Is the probe function never called or is the device not successfully > probed? not the same thing :) > > Looking at the device tree for the Odroid N2, it seems the onboard USB > hub is improperly defined. > Except the compatible and peer-hub properties, **everything** else in > both nodes need to be absolutely identical because only the first one to > bind will be probed, and that isn't necessarily stable across reboots or > rebuilds. So the vdd-supply need to be the same, the reset-gpios need to > be present and the same as well. > Yep I have modified this locally for testing. > Also, I assume phy-supply for the USB PHY would be enough for toggling > the enable pin of the USB hub but I'm not sure if it's proper or not, > maybe we should rather have an enable-gpios in the onboard driver too? > Ok I will check this. > Finally, please also read the cover letter where we explain that the > second patch fixes some issues when doing a `usb reset`, but that > there's still a corner case that doesn't work: if the HW default isn't > holding the reset line then the device may not appear when enumerating, > because the hub will be found before the device is probed and goes > through a reset, then the core will detect the device is removed (due to > reset) and not probe it, so that could also be an issue here. OK I feel dwc2 is not working on this boards so I am looking into this issue only dwc3 hub get detected. > > Cheers, > Quentin Thanks -Anand