[PATCH 1/2] usb: ehci-mx6: Move fdtdec_get_alias_seq() inside the CONFIG_MX6

On a imx7s-warp board the fdtdec_get_alias_seq() function always fails.
As priv->portnr is only used on i.MX6, move fdtdec_get_alias_seq() inside the CONFIG_MX6 block.
Signed-off-by: Fabio Estevam festevam@denx.de --- drivers/usb/host/ehci-mx6.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 238c93183b05..48b5c8b0c53c 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -569,7 +569,6 @@ static int mx6_parse_dt_addrs(struct udevice *dev) const void *blob = gd->fdt_blob; int offset = dev_of_offset(dev); void *__iomem addr; - int ret, devnump;
phy_off = fdtdec_lookup_phandle(blob, offset, "fsl,usbphy"); if (phy_off < 0) { @@ -578,11 +577,6 @@ static int mx6_parse_dt_addrs(struct udevice *dev) return -EINVAL; }
- ret = fdtdec_get_alias_seq(blob, dev->uclass->uc_drv->name, - phy_off, &devnump); - if (ret < 0) - return ret; - misc_off = fdtdec_lookup_phandle(blob, offset, "fsl,usbmisc"); if (misc_off < 0) return -EINVAL; @@ -592,7 +586,6 @@ static int mx6_parse_dt_addrs(struct udevice *dev) return -EINVAL;
priv->phy_addr = addr; - priv->portnr = devnump;
addr = (void __iomem *)fdtdec_get_addr(blob, misc_off, "reg"); if ((fdt_addr_t)addr == FDT_ADDR_T_NONE) @@ -601,7 +594,13 @@ static int mx6_parse_dt_addrs(struct udevice *dev) priv->misc_addr = addr;
#if defined(CONFIG_MX6) - int anatop_off; + int anatop_off, ret, devnump; + + ret = fdtdec_get_alias_seq(blob, dev->uclass->uc_drv->name, + phy_off, &devnump); + if (ret < 0) + return ret; + priv->portnr = devnump;
/* Resolve ANATOP offset through USB PHY node */ anatop_off = fdtdec_lookup_phandle(blob, phy_off, "fsl,anatop");

Unlike imx6, on imx7 the USB PHY is described as:
usbphynop1: usbphynop1 { compatible = "usb-nop-xceiv"; clocks = <&clks IMX7D_USB_PHY1_CLK>; clock-names = "main_clk"; #phy-cells = <0>; }; which does not have the 'reg' property.
Do not return an error when the 'reg' property is not found for the USB PHY.
This fixes USB gadget regression on a imx7s-warp board.
Successfully tested the "ums 0 mmc 0" command on two boards: imx7s-warp and imx6dl-pico-pi.
Signed-off-by: Fabio Estevam festevam@denx.de --- drivers/usb/host/ehci-mx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 48b5c8b0c53c..c3e4170513ec 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -583,7 +583,7 @@ static int mx6_parse_dt_addrs(struct udevice *dev)
addr = (void __iomem *)fdtdec_get_addr(blob, phy_off, "reg"); if ((fdt_addr_t)addr == FDT_ADDR_T_NONE) - return -EINVAL; + addr = NULL;
priv->phy_addr = addr;

Hi Fabio,
Le 20/06/2021 à 17:00, Fabio Estevam a écrit :
Unlike imx6, on imx7 the USB PHY is described as:
usbphynop1: usbphynop1 { compatible = "usb-nop-xceiv"; clocks = <&clks IMX7D_USB_PHY1_CLK>; clock-names = "main_clk"; #phy-cells = <0>; };
which does not have the 'reg' property.
Do not return an error when the 'reg' property is not found for the USB PHY.
This fixes USB gadget regression on a imx7s-warp board.
Successfully tested the "ums 0 mmc 0" command on two boards: imx7s-warp and imx6dl-pico-pi.
Signed-off-by: Fabio Estevam festevam@denx.de
Thanks for the fix.
Successfully tested on two boards: - imx7s-warp, - imx7d-pico-pi
Tested-by: Pierre-Jean Texier texier.pj2@gmail.com
drivers/usb/host/ehci-mx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 48b5c8b0c53c..c3e4170513ec 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -583,7 +583,7 @@ static int mx6_parse_dt_addrs(struct udevice *dev)
addr = (void __iomem *)fdtdec_get_addr(blob, phy_off, "reg"); if ((fdt_addr_t)addr == FDT_ADDR_T_NONE)
return -EINVAL;
addr = NULL;
priv->phy_addr = addr;
Regards,

Hi Pierre-Jean,
On 20/06/2021 13:01, Pierre-Jean Texier wrote:
Thanks for the fix.
Successfully tested on two boards:
- imx7s-warp,
- imx7d-pico-pi
Tested-by: Pierre-Jean Texier texier.pj2@gmail.com
Thanks for testing.
As you tested on the imx7s-warp board, you probably noticed a 'slowdown' related to the MMC.
I have sent a revert to restore the original MMC behavior: https://lore.kernel.org/u-boot/AM0PR04MB5283657FEFD76E04A8BA3F7B90369@AM0PR0...
If this patch helps on your test, could you please send a Tested-by tag for this one too?
Thanks,
Fabio Estevam

Fabio,
Le 20/06/2021 à 18:28, Fabio Estevam a écrit :
Hi Pierre-Jean,
On 20/06/2021 13:01, Pierre-Jean Texier wrote:
Thanks for the fix.
Successfully tested on two boards: - imx7s-warp, - imx7d-pico-pi
Tested-by: Pierre-Jean Texier texier.pj2@gmail.com
Thanks for testing.
As you tested on the imx7s-warp board, you probably noticed a 'slowdown' related to the MMC.
Yes indeed, I noticed this issue.
I have sent a revert to restore the original MMC behavior: https://lore.kernel.org/u-boot/AM0PR04MB5283657FEFD76E04A8BA3F7B90369@AM0PR0...
If this patch helps on your test, could you please send a Tested-by tag for this one too?
Sure, will do ;)
Thanks,

On 6/20/21 5:00 PM, Fabio Estevam wrote:
Unlike imx6, on imx7 the USB PHY is described as:
usbphynop1: usbphynop1 { compatible = "usb-nop-xceiv"; clocks = <&clks IMX7D_USB_PHY1_CLK>; clock-names = "main_clk"; #phy-cells = <0>; };
which does not have the 'reg' property.
Do not return an error when the 'reg' property is not found for the USB PHY.
This fixes USB gadget regression on a imx7s-warp board.
Successfully tested the "ums 0 mmc 0" command on two boards: imx7s-warp and imx6dl-pico-pi.
Signed-off-by: Fabio Estevam festevam@denx.de
drivers/usb/host/ehci-mx6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 48b5c8b0c53c..c3e4170513ec 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -583,7 +583,7 @@ static int mx6_parse_dt_addrs(struct udevice *dev)
addr = (void __iomem *)fdtdec_get_addr(blob, phy_off, "reg"); if ((fdt_addr_t)addr == FDT_ADDR_T_NONE)
return -EINVAL;
addr = NULL;
priv->phy_addr = addr;
I applied both, but this looks very much like mx8mm which also uses nop-phy . So I think what would be even nicer is if you could try and enable CONFIG_PHY , patch the DT to specify phys = <&usbphynop1>; instead of fsl,usbphy = <&usbphynop1>; and see whether that works. You can have a look at how the usb was enabled on the verdin board.
Maybe then we can get rid of some of those ifdefs and switch to generic EHCI PHY etc.

Hi Marek,
On Sun, Jun 20, 2021 at 5:11 PM Marek Vasut marex@denx.de wrote:
I applied both, but this looks very much like mx8mm which also uses nop-phy . So I think what would be even nicer is if you could try and enable CONFIG_PHY , patch the DT to specify phys = <&usbphynop1>; instead of fsl,usbphy = <&usbphynop1>; and see whether that works. You can have a look at how the usb was enabled on the verdin board.
Maybe then we can get rid of some of those ifdefs and switch to generic EHCI PHY etc.
I will follow these suggestions after 2021.07 is out, thanks.
participants (4)
-
Fabio Estevam
-
Fabio Estevam
-
Marek Vasut
-
Pierre-Jean Texier