Re: using cdns3-imx driver on imx8qm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/04/20, Peter Chen wrote:
> On 20-04-06 18:25:17, Oliver Graute wrote:
> > On 03/04/20, Oliver Graute wrote:
> > > 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?
> 
> No
> 
> > > 
> > > Do I need special changes on xhci.c do get it work with cdns-imx in host mode?
> > > 
> 
> No
> 
> > > I'am stuck at:
> > > 
> > > [   16.697525] xhci-hcd xhci-hcd.0.auto: can't setup: -110
> > 
> > A bit more debug information:
> > 
> > [    5.988571] cdns-usb3 5b130000.cdns3: DRD version v0 (00000100)
> > [    6.012664] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
> > [    6.018173] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
> > [    6.036369] xhci-hcd xhci-hcd.0.auto: // Halt the HC
> > [    6.041335] xhci-hcd xhci-hcd.0.auto: Resetting HCD
> > [    6.056364] xhci-hcd xhci-hcd.0.auto: // Reset the HC
> > [   16.062450] xhci-hcd xhci-hcd.0.auto: can't setup: -110
> > [   16.067686] xhci-hcd xhci-hcd.0.auto: USB bus 1 deregistered
> > [   16.073361] xhci-hcd: probe of xhci-hcd.0.auto failed with error -110
> > 
> 
> set dr_mode = "otg" at dts, and after boot up, run below commands at
> console:
> 
> echo host > /sys/class/usb_role/5b130000.cdns3-role-switch/role

I tried that but still get same result. Is there a reason to set 
dr_mode = "otg" and do the host mode later on?   

Are there any tweaks to get this usb controller working in host mode?

Some further hints for debugging would be helpfull.

Best Regards,

Oliver



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux