On Tue, Jul 02, 2024 at 04:20:43PM +0300, Roger Quadros wrote: > > > On 02/07/2024 15:07, Siddharth Vadapalli wrote: > > Prior to commit cd295286c786 ("usb: cdns3: avoid error messages if phys > > don't exist"), cdns3_probe() errors out only on failing to initialize the > > USB2/USB3 PHY. However, since commit cd295286c786, absence of the PHY > > device is also treated as an error, resulting in a regression. > > > > Extend commit cd295286c786 to treat -ENODEV as an acceptable return value > > of generic_phy_get_by_name() and continue device probe as was the case > > prior to the commit. > > > > Fixes: cd295286c786 ("usb: cdns3: avoid error messages if phys don't exist") > > Signed-off-by: Siddharth Vadapalli <s-vadapa...@ti.com> > > --- > > > > Hello, > > > > This patch is based on commit > > b4cbd1a257 Merge tag 'u-boot-amlogic-20240701' of > > https://source.denx.de/u-boot/custodians/u-boot-amlogic into next > > of the next branch of U-Boot. > > > > Regards, > > Siddharth. > > > > drivers/usb/cdns3/core.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c > > index b4e931646b..5b3e32953e 100644 > > --- a/drivers/usb/cdns3/core.c > > +++ b/drivers/usb/cdns3/core.c > > @@ -338,7 +338,7 @@ static int cdns3_probe(struct cdns3 *cdns) > > dev_err(dev, "USB2 PHY init failed: %d\n", ret); > > return ret; > > } > > - } else if (ret != -ENOENT && ret != -ENODATA) { > > + } else if (ret != -ENOENT && ret != -ENODATA && ret != -ENODEV) { > > With this change we will not error out on a genuine error condition > that produces ENODEV.
It isn't necessarily a genuine error condition which is why it was a "dev_warn" earlier for any error. If the previous stage has already configured the PHY, or if the PHY present in the device-tree in Linux is not the same as the PHY being used at U-Boot (USB 2 PHY at U-Boot vs SERDES in Linux), then it isn't an error. > > If PHY phandle is not present the API should return ENOENT right? > > static int __of_parse_phandle_with_args(const struct device_node *np, > > /* Retrieve the phandle list property */ > list = of_get_property(np, list_name, &size); > if (!list) > return -ENOENT; The PHY phandle is present, but it isn't the one being used by U-Boot. The device-tree could be pointing to SERDES as the PHY, since Linux uses USB with SERDES. So the entry exists, but the error is -ENODEV rather than -ENOENT. > > Can you please check and point where the -ENODEV error is coming from? The sequence of function calls is as follows: generic_phy_get_by_name generic_phy_get_by_index generic_phy_get_by_index_nodev uclass_get_device_by_ofnode uclass_find_device_by_ofnode -ENODEV In the above sequence, the device-tree contains SERDES PHY as the USB PHY since Linux uses the same and U-Boot's device-tree is in sync with Linux's. However, USB at U-Boot will use the USB 2 PHY. So one option is to remove the SERDES PHY from USB node to have it fallback to USB 2 PHY. At the same time, if the previous stage has configured SERDES for example, it might not be necessary to reconfigure SERDES. -ENODEV might be an acceptable error in such a situation as well. Please let me know. [...] Regards, Siddharth.