On Mon, Jun 4, 2018 at 11:31 PM, Vasily Khoruzhick <anars...@gmail.com> wrote: > On Mon, Jun 4, 2018 at 10:58 PM, Vasily Khoruzhick <anars...@gmail.com> wrote: >>> And A64-Relic has only ehci0 and ohci0 no ehci1 and ohci1, better to >>> debug it from your side, what went wrong. >> >> Sure, I can do bisect. > > dd3228170ad7388bdd57ff18b9e463c36508ebe9 is the first bad commit > commit dd3228170ad7388bdd57ff18b9e463c36508ebe9 > Author: Jagan Teki <ja...@amarulasolutions.com> > Date: Mon May 7 13:03:38 2018 +0530 > > usb: sunxi: Switch to use generic-phy > > Allwinner USB PHY handling can be done through driver-model > generic-phy so add the generic-phy ops to relevant places > on host and musb sunxi driver and enable them in respective > SOC's. > > Signed-off-by: Jagan Teki <ja...@amarulasolutions.com> > Acked-by: Jun Nie <jun....@linaro.org>
Original code in ehci-sunxi.c and ohci-sunxi.c used following as phy_index: priv->phy_index = ((uintptr_t)hccr - SUNXI_USB1_BASE) / BASE_DIST So apparently phy_index for EHCI1 was 0. This quick hack fixes EHCI1 and OHCI1 for me (I hope gmail won't garble formatting): diff --git a/drivers/usb/host/ehci-sunxi.c b/drivers/usb/host/ehci-sunxi.c index 360efc9116..db87d062fa 100644 --- a/drivers/usb/host/ehci-sunxi.c +++ b/drivers/usb/host/ehci-sunxi.c @@ -47,6 +47,7 @@ static int ehci_usb_probe(struct udevice *dev) phys = 0; goto no_phy; } + printf("%s: phys: %d\n", __func__, phys); ret = generic_phy_get_by_name(dev, "usb", &priv->phy); if (ret) { @@ -75,8 +76,8 @@ no_phy: #if defined(CONFIG_MACH_SUNXI_H3_H5) || defined(CONFIG_MACH_SUN50I) extra_ahb_gate_mask = 1 << AHB_GATE_OFFSET_USB_OHCI0; #endif - priv->ahb_gate_mask <<= phys * AHB_CLK_DIST; - extra_ahb_gate_mask <<= phys * AHB_CLK_DIST; + priv->ahb_gate_mask <<= 0; //phys * AHB_CLK_DIST; + extra_ahb_gate_mask <<= 0; //phys * AHB_CLK_DIST; setbits_le32(&priv->ccm->ahb_gate0, priv->ahb_gate_mask | extra_ahb_gate_mask); diff --git a/drivers/usb/host/ohci-sunxi.c b/drivers/usb/host/ohci-sunxi.c index ce2b47a5c4..cd7984240e 100644 --- a/drivers/usb/host/ohci-sunxi.c +++ b/drivers/usb/host/ohci-sunxi.c @@ -78,9 +78,9 @@ no_phy: extra_ahb_gate_mask = 1 << AHB_GATE_OFFSET_USB_EHCI0; #endif priv->usb_gate_mask = CCM_USB_CTRL_OHCI0_CLK; - priv->ahb_gate_mask <<= phys * AHB_CLK_DIST; - extra_ahb_gate_mask <<= phys * AHB_CLK_DIST; - priv->usb_gate_mask <<= phys; + priv->ahb_gate_mask <<= 0; //phys * AHB_CLK_DIST; + extra_ahb_gate_mask <<= 0; //phys * AHB_CLK_DIST; + priv->usb_gate_mask <<= 0; //phys; setbits_le32(&priv->ccm->ahb_gate0, priv->ahb_gate_mask | extra_ahb_gate_mask); I'm too tired to look into what this code does and why phy_index has to be 0 for EHCI1/OHCI1, but I can safely and surely say that dd3228170ad7388bdd57ff18b9e463c36508ebe9 caused the issue. EHCI1/OHCI1 won't work if ECHI0/OHCI0 aren't enabled. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot