Linux-USB Archive on lore.kernel.org
 help / color / Atom feed
* using cdns3-imx driver on imx8qm
@ 2020-03-26 17:01 Oliver Graute
  2020-03-27  9:05 ` Peter Chen
  0 siblings, 1 reply; 10+ messages in thread
From: Oliver Graute @ 2020-03-26 17:01 UTC (permalink / raw)
  To: linux-usb
  Cc: Peter Chen, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	NXP Linux Team

Hello,

What is the right way for using the new cdns3-imx glue usb driver on a
imx8qm soc with linux-next. I added this snippet in imx8qm.dtsi and
enabled the driver in the kernel configuration.

usbotg3: usb3@5b110000 {
		compatible = "cdns,usb3";
		reg = <0x0 0x5B110000 0x0 0x10000>,
			<0x0 0x5B130000 0x0 0x10000>,
			<0x0 0x5B140000 0x0 0x10000>,
			<0x0 0x5B160000 0x0 0x40000>,
			<0x0 0x5B120000 0x0 0x10000>;
		interrupt-parent = <&gic>;
		interrupts = <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>;
		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>;
		cdns3,usbphy = <&usb3phynop1>;
		status = "disabled";
	};

In board dts I enabled this:

&usbotg3 {
	dr_mode = "host";
	status = "okay";
};


On probing I got:

[    2.932089] cdns-usb3 5b110000.usb3: missing host IRQ

I also tried to enable "fsl,imx8qm-usb3" compatible buts this results
directly into a crash.

What do I miss here? some comments would be helpful.

Best Regards,

Oliver

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-26 17:01 using cdns3-imx driver on imx8qm Oliver Graute
@ 2020-03-27  9:05 ` Peter Chen
  2020-03-27  9:50   ` Oliver Graute
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Chen @ 2020-03-27  9:05 UTC (permalink / raw)
  To: Oliver Graute
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	dl-linux-imx

On 20-03-26 18:01:09, Oliver Graute wrote:
> Hello,
> 
> What is the right way for using the new cdns3-imx glue usb driver on a
> imx8qm soc with linux-next. I added this snippet in imx8qm.dtsi and
> enabled the driver in the kernel configuration.
> 

Hi Oliver,

I just checked linux-next-0326, there is no imx8qm dtsi. 
When I worked this driver, I use a internal version
based on v5.4, the dts layout is different with internal tree.

Besides, you need a PHY driver for upstream version:
https://patchwork.kernel.org/patch/11454581/

Peter

> usbotg3: usb3@5b110000 {
> 		compatible = "cdns,usb3";
> 		reg = <0x0 0x5B110000 0x0 0x10000>,
> 			<0x0 0x5B130000 0x0 0x10000>,
> 			<0x0 0x5B140000 0x0 0x10000>,
> 			<0x0 0x5B160000 0x0 0x40000>,
> 			<0x0 0x5B120000 0x0 0x10000>;
> 		interrupt-parent = <&gic>;
> 		interrupts = <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>;
> 		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>;
> 		cdns3,usbphy = <&usb3phynop1>;
> 		status = "disabled";
> 	};
> 
> In board dts I enabled this:
> 
> &usbotg3 {
> 	dr_mode = "host";
> 	status = "okay";
> };
> 
> 
> On probing I got:
> 
> [    2.932089] cdns-usb3 5b110000.usb3: missing host IRQ
> 
> I also tried to enable "fsl,imx8qm-usb3" compatible buts this results
> directly into a crash.
> 
> What do I miss here? some comments would be helpful.
> 
> Best Regards,
> 
> Oliver

-- 

Thanks,
Peter Chen

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-27  9:05 ` Peter Chen
@ 2020-03-27  9:50   ` Oliver Graute
  2020-03-27 13:21     ` Peter Chen
  0 siblings, 1 reply; 10+ messages in thread
From: Oliver Graute @ 2020-03-27  9:50 UTC (permalink / raw)
  To: Peter Chen
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	dl-linux-imx

On 27/03/20, Peter Chen wrote:
> On 20-03-26 18:01:09, Oliver Graute wrote:
> > Hello,
> > 
> > What is the right way for using the new cdns3-imx glue usb driver on a
> > imx8qm soc with linux-next. I added this snippet in imx8qm.dtsi and
> > enabled the driver in the kernel configuration.
> > 
> 
> Hi Oliver,
> 
> I just checked linux-next-0326, there is no imx8qm dtsi. 

I'am currently using this series on top of linux-next-0214.

https://patchwork.kernel.org/patch/11248331/


> When I worked this driver, I use a internal version
> based on v5.4, the dts layout is different with internal tree.

I looked also at:

https://source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi?h=imx_5.4.3_2.0.0

How do I adapt the usbotg3 for linux-next? I already ported some usb
related dependencies from imx8-ss-conn.dtsi. But the cdns3 core driver
is stucked at probe and currently I don't understand how the cdns3-imx glue
layer comes into play.

> 
> Besides, you need a PHY driver for upstream version:
> https://patchwork.kernel.org/patch/11454581/


Best Regards,

Oliver

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-27  9:50   ` Oliver Graute
@ 2020-03-27 13:21     ` Peter Chen
  2020-03-31 14:25       ` Oliver Graute
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Chen @ 2020-03-27 13:21 UTC (permalink / raw)
  To: Oliver Graute
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	dl-linux-imx

On 20-03-27 10:50:28, Oliver Graute wrote:
> On 27/03/20, Peter Chen wrote:
> > On 20-03-26 18:01:09, Oliver Graute wrote:
> > > Hello,
> > > 
> > > What is the right way for using the new cdns3-imx glue usb driver on a
> > > imx8qm soc with linux-next. I added this snippet in imx8qm.dtsi and
> > > enabled the driver in the kernel configuration.
> > > 
> > 
> > Hi Oliver,
> > 
> > I just checked linux-next-0326, there is no imx8qm dtsi. 
> 
> I'am currently using this series on top of linux-next-0214.
> 
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.kernel.org%2Fpatch%2F11248331%2F&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C1b6963823b924b76684908d7d2344976%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637208994318640157&amp;sdata=HGG4r65ROTeY54uQArcWTZGT9%2BLrr0kndwmDegULtDw%3D&amp;reserved=0
> 
> 
> > When I worked this driver, I use a internal version
> > based on v5.4, the dts layout is different with internal tree.
> 
> I looked also at:
> 
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsource.codeaurora.org%2Fexternal%2Fimx%2Flinux-imx%2Ftree%2Farch%2Farm64%2Fboot%2Fdts%2Ffreescale%2Fimx8-ss-conn.dtsi%3Fh%3Dimx_5.4.3_2.0.0&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C1b6963823b924b76684908d7d2344976%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637208994318640157&amp;sdata=yTiMWh5BpWdtA%2B8Vy06KeCvg2jPzlgPOmKaM3fmK%2F6w%3D&amp;reserved=0
> 
> How do I adapt the usbotg3 for linux-next? I already ported some usb
> related dependencies from imx8-ss-conn.dtsi. But the cdns3 core driver
> is stucked at probe and currently I don't understand how the cdns3-imx glue
> layer comes into play.
> 

cdns3-imx is the parent device, the cdns3 core is the child device. The
example dts like below:

	usb3_lpcg: clock-controller@5b280000 {
		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";
		};
	};

After kernel boots up, it neither at host mode nor device mode, you
need to echo host or device to role-switch sys entry.

-- 

Thanks,
Peter Chen

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-27 13:21     ` Peter Chen
@ 2020-03-31 14:25       ` Oliver Graute
  2020-03-31 14:39         ` Peter Chen
  0 siblings, 1 reply; 10+ messages in thread
From: Oliver Graute @ 2020-03-31 14:25 UTC (permalink / raw)
  To: Peter Chen
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	dl-linux-imx

On 27/03/20, Peter Chen wrote:
> On 20-03-27 10:50:28, Oliver Graute wrote:
> > On 27/03/20, Peter Chen wrote:
> > > On 20-03-26 18:01:09, Oliver Graute wrote:
> > > > Hello,
> > > > 
> > > > What is the right way for using the new cdns3-imx glue usb driver on a
> > > > imx8qm soc with linux-next. I added this snippet in imx8qm.dtsi and
> > > > enabled the driver in the kernel configuration.
> > > > 
> > > 
> > > Hi Oliver,
> > > 
> > > I just checked linux-next-0326, there is no imx8qm dtsi. 
> > 
> > I'am currently using this series on top of linux-next-0214.
> > 
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.kernel.org%2Fpatch%2F11248331%2F&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C1b6963823b924b76684908d7d2344976%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637208994318640157&amp;sdata=HGG4r65ROTeY54uQArcWTZGT9%2BLrr0kndwmDegULtDw%3D&amp;reserved=0
> > 
> > 
> > > When I worked this driver, I use a internal version
> > > based on v5.4, the dts layout is different with internal tree.
> > 
> > I looked also at:
> > 
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsource.codeaurora.org%2Fexternal%2Fimx%2Flinux-imx%2Ftree%2Farch%2Farm64%2Fboot%2Fdts%2Ffreescale%2Fimx8-ss-conn.dtsi%3Fh%3Dimx_5.4.3_2.0.0&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C1b6963823b924b76684908d7d2344976%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637208994318640157&amp;sdata=yTiMWh5BpWdtA%2B8Vy06KeCvg2jPzlgPOmKaM3fmK%2F6w%3D&amp;reserved=0
> > 
> > How do I adapt the usbotg3 for linux-next? I already ported some usb
> > related dependencies from imx8-ss-conn.dtsi. But the cdns3 core driver
> > is stucked at probe and currently I don't understand how the cdns3-imx glue
> > layer comes into play.
> > 
> 
> cdns3-imx is the parent device, the cdns3 core is the child device. The
> example dts like below:
> 
> 	usb3_lpcg: clock-controller@5b280000 {
> 		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

Some Idea howto fix that?

Best regards,

Oliver

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: using cdns3-imx driver on imx8qm
  2020-03-31 14:25       ` Oliver Graute
@ 2020-03-31 14:39         ` Peter Chen
  2020-04-01 10:34           ` Oliver Graute
  2020-04-03 14:40           ` Oliver Graute
  0 siblings, 2 replies; 10+ messages in thread
From: Peter Chen @ 2020-03-31 14:39 UTC (permalink / raw)
  To: Oliver Graute
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Oliver Graute,
	dl-linux-imx

  
> > 		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.

Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-31 14:39         ` Peter Chen
@ 2020-04-01 10:34           ` Oliver Graute
  2020-04-01 11:36             ` Felipe Balbi
  2020-04-02  1:16             ` Peter Chen
  2020-04-03 14:40           ` Oliver Graute
  1 sibling, 2 replies; 10+ messages in thread
From: Oliver Graute @ 2020-04-01 10:34 UTC (permalink / raw)
  To: Peter Chen
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, oliver.graute,
	dl-linux-imx

> Make sure the five clocks in dts are correct, and print the USB3_SSPHY_STATUS if
> timeout still exists.

ok I got this for USB3_SSPHY_STATUS

[    3.057122] cdns3-imx 5b110000.usb3: wait clkvld timeout 0xb0b03827

Unfortunally my imx8qm spec is incomplete regarding the USB3_SSPHY_STATUS register.

this are my related DTS nodes:

	usb3_lpcg: clock-controller@5b280000 {
		compatible = "fsl,imx8qxp-lpcg";
		reg = <0x5b280000 0x10000>;
		#clock-cells = <1>;
		/* bit-offset = <0 4 16 20 24 28>; */
		clock-indices = <IMX_LPCG_CLK_0>, <IMX_LPCG_CLK_1>,
				<IMX_LPCG_CLK_4>, <IMX_LPCG_CLK_5>,
				<IMX_LPCG_CLK_6>, <IMX_LPCG_CLK_7>;
		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 = <0x0 0x5B110000 0x0 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 = <&usbphynop2>;
			phy-names = "cdns3,usb2-phy";
			status = "disabled";
		};
	};

I'am also using the SCU related clock patches from here: 

https://patchwork.kernel.org/patch/11248255/

Thx for your comments,

Best regards,

Oliver

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-04-01 10:34           ` Oliver Graute
@ 2020-04-01 11:36             ` Felipe Balbi
  2020-04-02  1:16             ` Peter Chen
  1 sibling, 0 replies; 10+ messages in thread
From: Felipe Balbi @ 2020-04-01 11:36 UTC (permalink / raw)
  To: Oliver Graute, Peter Chen
  Cc: linux-usb, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, oliver.graute,
	dl-linux-imx

[-- Attachment #1: Type: text/plain, Size: 630 bytes --]


Hi,

Oliver Graute <oliver.graute@kococonnector.com> writes:
>> Make sure the five clocks in dts are correct, and print the USB3_SSPHY_STATUS if
>> timeout still exists.
>
> ok I got this for USB3_SSPHY_STATUS
>
> [    3.057122] cdns3-imx 5b110000.usb3: wait clkvld timeout 0xb0b03827
>
> Unfortunally my imx8qm spec is incomplete regarding the
> USB3_SSPHY_STATUS register.

for testing purposes, you could just have the bootloader enable the
necessary clocks and use dummy fixed-clock in your DTS.

At least you could get something working from USB-side and focus on the
clock tree after that.

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-04-01 10:34           ` Oliver Graute
  2020-04-01 11:36             ` Felipe Balbi
@ 2020-04-02  1:16             ` Peter Chen
  1 sibling, 0 replies; 10+ messages in thread
From: Peter Chen @ 2020-04-02  1:16 UTC (permalink / raw)
  To: Oliver Graute
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, oliver.graute,
	dl-linux-imx

On 20-04-01 12:34:34, Oliver Graute wrote:
> > Make sure the five clocks in dts are correct, and print the USB3_SSPHY_STATUS if
> > timeout still exists.
> 
> ok I got this for USB3_SSPHY_STATUS
> 
> [    3.057122] cdns3-imx 5b110000.usb3: wait clkvld timeout 0xb0b03827
> 

It indicates usb3_aclk did not open correctly. Tried to see if u-boot
could work well, and see if set its assigned-clock-rates as 500000000
could work.

Peter


> Unfortunally my imx8qm spec is incomplete regarding the USB3_SSPHY_STATUS register.
> 
> this are my related DTS nodes:
> 
> 	usb3_lpcg: clock-controller@5b280000 {
> 		compatible = "fsl,imx8qxp-lpcg";
> 		reg = <0x5b280000 0x10000>;
> 		#clock-cells = <1>;
> 		/* bit-offset = <0 4 16 20 24 28>; */
> 		clock-indices = <IMX_LPCG_CLK_0>, <IMX_LPCG_CLK_1>,
> 				<IMX_LPCG_CLK_4>, <IMX_LPCG_CLK_5>,
> 				<IMX_LPCG_CLK_6>, <IMX_LPCG_CLK_7>;
> 		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 = <0x0 0x5B110000 0x0 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 = <&usbphynop2>;
> 			phy-names = "cdns3,usb2-phy";
> 			status = "disabled";
> 		};
> 	};
> 
> I'am also using the SCU related clock patches from here: 
> 
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.kernel.org%2Fpatch%2F11248255%2F&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7Ce6d163e72ed14b064f4208d7d629842f%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C1%7C637213346107862080&amp;sdata=ChqqxYqxdJysskHzHP1dmF69zGVzw4PfDz%2Fim%2F0khHc%3D&amp;reserved=0
> 
> Thx for your comments,
> 
> Best regards,
> 
> Oliver

-- 

Thanks,
Peter Chen

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: using cdns3-imx driver on imx8qm
  2020-03-31 14:39         ` Peter Chen
  2020-04-01 10:34           ` Oliver Graute
@ 2020-04-03 14:40           ` Oliver Graute
  1 sibling, 0 replies; 10+ messages in thread
From: Oliver Graute @ 2020-04-03 14:40 UTC (permalink / raw)
  To: Peter Chen
  Cc: linux-usb, Felipe Balbi, Greg Kroah-Hartman, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Mathias Nyman,
	dl-linux-imx

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


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, back to index

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-26 17:01 using cdns3-imx driver on imx8qm Oliver Graute
2020-03-27  9:05 ` Peter Chen
2020-03-27  9:50   ` Oliver Graute
2020-03-27 13:21     ` Peter Chen
2020-03-31 14:25       ` Oliver Graute
2020-03-31 14:39         ` Peter Chen
2020-04-01 10:34           ` Oliver Graute
2020-04-01 11:36             ` Felipe Balbi
2020-04-02  1:16             ` Peter Chen
2020-04-03 14:40           ` Oliver Graute

Linux-USB Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-usb/0 linux-usb/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-usb linux-usb/ https://lore.kernel.org/linux-usb \
		linux-usb@vger.kernel.org
	public-inbox-index linux-usb

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-usb


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git