On 31/03/20, Peter Chen wrote: > > > > compatible = "fsl,imx8qxp-lpcg"; > > > reg = <0x5b280000 0x10000>; > > > #clock-cells = <1>; > > > bit-offset = <0 4 16 20 24 28>; > > > clocks = <&clk IMX_SC_R_USB_2 IMX_SC_PM_CLK_PER>, > > > <&clk IMX_SC_R_USB_2 IMX_SC_PM_CLK_MISC>, > > > <&conn_ipg_clk>, > > > <&conn_ipg_clk>, > > > <&conn_ipg_clk>, > > > <&clk IMX_SC_R_USB_2 IMX_SC_PM_CLK_MST_BUS>; > > > clock-output-names = "usb3_app_clk", > > > "usb3_lpm_clk", > > > "usb3_ipg_clk", > > > "usb3_core_pclk", > > > "usb3_phy_clk", > > > "usb3_aclk"; > > > power-domains = <&pd IMX_SC_R_USB_2_PHY>; > > > }; > > > > > > usbotg3: usb3@5b110000 { > > > compatible = "fsl,imx8qm-usb3"; > > > #address-cells = <1>; > > > #size-cells = <1>; > > > ranges; > > > reg = <0x5B110000 0x10000>; > > > clocks = <&usb3_lpcg 1>, > > > <&usb3_lpcg 0>, > > > <&usb3_lpcg 5>, > > > <&usb3_lpcg 2>, > > > <&usb3_lpcg 3>; > > > clock-names = "usb3_lpm_clk", "usb3_bus_clk", "usb3_aclk", > > > "usb3_ipg_clk", "usb3_core_pclk"; > > > assigned-clocks = <&clk IMX_SC_R_USB_2 > > IMX_SC_PM_CLK_PER>, > > > <&clk IMX_SC_R_USB_2 IMX_SC_PM_CLK_MISC>, > > > <&clk IMX_SC_R_USB_2 IMX_SC_PM_CLK_MST_BUS>; > > > assigned-clock-rates = <125000000>, <12000000>, <250000000>; > > > power-domains = <&pd IMX_SC_R_USB_2>; > > > status = "disabled"; > > > > > > usbotg3_cdns3: cdns3 { > > > compatible = "cdns,usb3"; > > > #address-cells = <1>; > > > #size-cells = <1>; > > > interrupt-parent = <&gic>; > > > interrupts = <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>, > > > <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>, > > > <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>; > > > interrupt-names = "host", "peripheral", "otg"; > > > reg = <0x5B130000 0x10000>, /* memory area for HOST > > registers */ > > > <0x5B140000 0x10000>, /* memory area for > > DEVICE registers */ > > > <0x5B120000 0x10000>; /* memory area for > > OTG/DRD registers */ > > > reg-names = "xhci", "dev", "otg"; > > > phys = <&usb3_phy>; > > > phy-names = "cdns3,usb3-phy"; > > > status = "disabled"; > > > }; > > > }; > > > > Hello Peter, > > > > thx for the dts example. Now I get "wait clkvld timeout" in "cdns_imx_noncore_init()" > > So USB3_SSPHY_STATUS register seems to be wrong. > > > > dmesg | grep imx > > [ 1.065445] cdns3-imx 5b110000.usb3: Adding to iommu group 0 > > [ 1.257309] imx-scu scu: NXP i.MX SCU Initialized > > [ 1.275489] imx-scu-clk: probe of gpt0_clk failed with error -5 > > [ 1.291143] imx-scu-clk: probe of pwm_clk failed with error -22 > > [ 1.302517] imx-scu-clk: probe of lcd_clk failed with error -22 > > [ 1.341405] imx8qm-pinctrl scu:pinctrl: initialized IMX pinctrl driver > > [ 3.029484] cdns3-imx 5b110000.usb3: wait clkvld timeout > > [ 3.034891] cdns3-imx: probe of 5b110000.usb3 failed with error -110 > > [ 3.237393] sdhci-esdhc-imx 5b030000.mmc: Got CD GPIO > > [ 3.242468] sdhci-esdhc-imx 5b030000.mmc: Got WP GPIO > > [ 3.316687] imx8qxp-lpcg-clk 5a4a0000.clock-controller: ignoring dependency for > > device, assuming no driver > > > > Make sure the five clocks in dts are correct, and print the USB3_SSPHY_STATUS if > timeout still exists. ok thx, we got it fixed by replacing: clocks = <&usb3_lpcg 1>, <&usb3_lpcg 0>, <&usb3_lpcg 4>, <&usb3_lpcg 2>, <&usb3_lpcg 3>; with this: clocks = <&usb3_lpcg IMX_LPCG_CLK_1>, <&usb3_lpcg IMX_LPCG_CLK_0>, <&usb3_lpcg IMX_LPCG_CLK_7>, <&usb3_lpcg IMX_LPCG_CLK_4>, <&usb3_lpcg IMX_LPCG_CLK_5>; now the "wait clkvld timeout" is gone and the USB3_SSPHY_STATUS register is very similar to another imx8qm device which runs linux-imx from NXP. Now I try to get into USB HOST mode: --- a/drivers/usb/cdns3/cdns3-imx.c +++ b/drivers/usb/cdns3/cdns3-imx.c @@ -113,11 +115,11 @@ static int cdns_imx_noncore_init(struct cdns_imx *data) udelay(1); value = cdns_imx_readl(data, USB3_CORE_CTRL1); - value = (value & ~MODE_STRAP_MASK) | OTG_MODE | OC_DISABLE; + value = (value & ~MODE_STRAP_MASK) | HOST_MODE | OC_DISABLE; cdns_imx_writel(data, USB3_CORE_CTRL1, value); Is this change necessary? Do I need special changes on xhci.c do get it work with cdns-imx in host mode? I'am stuck at: [ 16.697525] xhci-hcd xhci-hcd.0.auto: can't setup: -110 I already tried to add the Intel quirk: udelay(1000) in xhci_reset() but without success. Is the host mode working on your side? Best regards, Oliver