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.
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?
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.
Cheers,
Quentin