Skip to contentSkip to conversation

ARM: dts: mx25: USB block requires only one clock

PATCH Superseded Denis Carikli 6 participants 18 messages Mar 12, 2014 – Mar 14, 2014

Subsystems (5)

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/9 ARM: dts: mx25: USB block requires only one clock

From: Fabio Estevam <[email protected]>

Like other imx SoCs only one USB clock is needed on mx25.

---
 arch/arm/boot/dts/imx25.dtsi |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
arch/arm/boot/dts/imx25.dtsi +2 -4
index 77bb743..829791e 100644
@@ -496,8 +496,7 @@
 				compatible = "fsl,imx25-usb", "fsl,imx27-usb";
 				reg = <0x53ff4000 0x0200>;
 				interrupts = <37>;
-				clocks = <&clks 9>, <&clks 70>, <&clks 8>;
-				clock-names = "ipg", "ahb", "per";
+				clocks = <&clks 70>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -506,8 +505,7 @@
 				compatible = "fsl,imx25-usb", "fsl,imx27-usb";
 				reg = <0x53ff4400 0x0200>;
 				interrupts = <35>;
-				clocks = <&clks 9>, <&clks 70>, <&clks 8>;
-				clock-names = "ipg", "ahb", "per";
+				clocks = <&clks 70>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v3 2/9 ARM: dts: mx35: USB block requires only one clock

From: Fabio Estevam <[email protected]>

Like other imx SoCs only one USB clock is needed on mx35.

---
 arch/arm/boot/dts/imx35.dtsi |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
arch/arm/boot/dts/imx35.dtsi +2 -4
index e59ccb4..474a73d 100644
@@ -296,8 +296,7 @@
 				compatible = "fsl,imx35-usb", "fsl,imx27-usb";
 				reg = <0x53ff4000 0x0200>;
 				interrupts = <37>;
-				clocks = <&clks 9>, <&clks 73>, <&clks 28>;
-				clock-names = "ipg", "ahb", "per";
+				clocks = <&clks 73>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -306,8 +305,7 @@
 				compatible = "fsl,imx35-usb", "fsl,imx27-usb";
 				reg = <0x53ff4400 0x0200>;
 				interrupts = <35>;
-				clocks = <&clks 9>, <&clks 73>, <&clks 28>;
-				clock-names = "ipg", "ahb", "per";
+				clocks = <&clks 73>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

In reply to Denis Carikli

This converts the Chipidea usbmisc driver to
use the standard usb-phy property.

It also adapt the dts that uses it.

---
 arch/arm/boot/dts/imx23.dtsi       |    2 +-
 arch/arm/boot/dts/imx27.dtsi       |    4 ++--
 arch/arm/boot/dts/imx28.dtsi       |    4 ++--
 arch/arm/boot/dts/imx51.dtsi       |    2 +-
 arch/arm/boot/dts/imx53.dtsi       |    4 ++--
 arch/arm/boot/dts/imx6qdl.dtsi     |    4 ++--
 arch/arm/boot/dts/imx6sl.dtsi      |    4 ++--
 drivers/usb/chipidea/ci_hdrc_imx.c |    2 +-
 8 files changed, 13 insertions(+), 13 deletions(-)
arch/arm/boot/dts/imx23.dtsi +1 -1
index bbcfb5a..e3c9924 100644
@@ -522,7 +522,7 @@
 			compatible = "fsl,imx23-usb", "fsl,imx27-usb";
 			reg = <0x80080000 0x40000>;
 			interrupts = <11>;
-			fsl,usbphy = <&usbphy0>;
+			usb-phy = <&usbphy0>;
 			clocks = <&clks 40>;
 			status = "disabled";
 		};
arch/arm/boot/dts/imx27.dtsi +2 -2
index 83a8247..94bcf1a 100644
@@ -466,7 +466,7 @@
 				interrupts = <56>;
 				clocks = <&clks 15>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -485,7 +485,7 @@
 				interrupts = <55>;
 				clocks = <&clks 15>;
 				fsl,usbmisc = <&usbmisc 2>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				status = "disabled";
 			};
 
arch/arm/boot/dts/imx28.dtsi +2 -2
index 90a5795..52ad72f 100644
@@ -1143,7 +1143,7 @@
 			reg = <0x80080000 0x10000>;
 			interrupts = <93>;
 			clocks = <&clks 60>;
-			fsl,usbphy = <&usbphy0>;
+			usb-phy = <&usbphy0>;
 			status = "disabled";
 		};
 
@@ -1152,7 +1152,7 @@
 			reg = <0x80090000 0x10000>;
 			interrupts = <92>;
 			clocks = <&clks 61>;
-			fsl,usbphy = <&usbphy1>;
+			usb-phy = <&usbphy1>;
 			status = "disabled";
 		};
 
arch/arm/boot/dts/imx51.dtsi +1 -1
index cb3204a..b290947 100644
@@ -249,7 +249,7 @@
 				interrupts = <18>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
arch/arm/boot/dts/imx53.dtsi +2 -2
index f0962e5..b10a3de 100644
@@ -276,7 +276,7 @@
 				interrupts = <18>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -286,7 +286,7 @@
 				interrupts = <14>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 1>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				status = "disabled";
 			};
 
arch/arm/boot/dts/imx6qdl.dtsi +2 -2
index cfc85be..d2f0087 100644
@@ -789,7 +789,7 @@
 				reg = <0x02184000 0x200>;
 				interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks 162>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -799,7 +799,7 @@
 				reg = <0x02184200 0x200>;
 				interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks 162>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
arch/arm/boot/dts/imx6sl.dtsi +2 -2
index 6477447..33f501a 100644
@@ -651,7 +651,7 @@
 				reg = <0x02184000 0x200>;
 				interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks IMX6SL_CLK_USBOH3>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -661,7 +661,7 @@
 				reg = <0x02184200 0x200>;
 				interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks IMX6SL_CLK_USBOH3>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
drivers/usb/chipidea/ci_hdrc_imx.c +1 -1
index c00f772..9a74100 100644
@@ -130,7 +130,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
+	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
 	if (IS_ERR(data->phy)) {
 		ret = PTR_ERR(data->phy);
 		goto err_clk;
Signature · 1 line
1.7.9.5
#3 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

Hi,

Quoted 3 lines · Denis Carikli

This converts the Chipidea usbmisc driver to
use the standard usb-phy property.

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_imx.c +0 -0
index c00f772..9a74100 100644

drivers/usb/chipidea/ci_hdrc_imx.c static int ci_hdrc_imx_probe(struct platform_device *pdev) · line 136

Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_imx.c +1 -1
@@ -130,7 +130,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
+	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
 	if (IS_ERR(data->phy)) {
 		ret = PTR_ERR(data->phy);
 		goto err_clk;

How about accepting the old property too and print a warning, that it is deprecated, rather than breaking all existing DT blobs?

Lothar Wa?mann

Signature · 9 lines
___________________________________________________________

Ka-Ro electronics GmbH | Pascalstra?e 22 | D - 52076 Aachen
Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10
Gesch?ftsf?hrer: Matthias Kaussen
Handelsregistereintrag: Amtsgericht Aachen, HRB 4996

www.karo-electronics.de | info at karo-electronics.de
___________________________________________________________
#4 lore raw

Re: [PATCH v3][ 3/9] usb: chipidea: Use standard usb-phy property.

?????, 12 ????? 2014, 11:19 +01:00 ?? Lothar Wa?mann <[email protected]>:

Quoted 15 lines

Hi,

Quoted 3 lines · Denis Carikli

This converts the Chipidea usbmisc driver to
use the standard usb-phy property.

[...]

Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_imx.c +0 -0
index c00f772..9a74100 100644
@@ -130,7 +130,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
 		return ret;
 	}
 
Quoted 8 lines

drivers/usb/chipidea/ci_hdrc_imx.c static int ci_hdrc_imx_probe(struct platform_device *pdev) · line 136

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_imx.c +1 -1
-	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0);
+	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
 	if (IS_ERR(data->phy)) {
 		ret = PTR_ERR(data->phy);
 		goto err_clk;

How about accepting the old property too and print a warning, that it is deprecated, rather than breaking all existing DT blobs?

And this change should be reflected in the bindings documentation.

---

#5 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

In reply to Denis Carikli
Quoted 169 lines

It also adapt the dts that uses it.

---
 arch/arm/boot/dts/imx23.dtsi       |    2 +-
 arch/arm/boot/dts/imx27.dtsi       |    4 ++--
 arch/arm/boot/dts/imx28.dtsi       |    4 ++--
 arch/arm/boot/dts/imx51.dtsi       |    2 +-
 arch/arm/boot/dts/imx53.dtsi       |    4 ++--
 arch/arm/boot/dts/imx6qdl.dtsi     |    4 ++--
 arch/arm/boot/dts/imx6sl.dtsi      |    4 ++--
 drivers/usb/chipidea/ci_hdrc_imx.c |    2 +-
 8 files changed, 13 insertions(+), 13 deletions(-)
arch/arm/boot/dts/imx23.dtsi +1 -1
index bbcfb5a..e3c9924 100644
@@ -522,7 +522,7 @@
 			compatible = "fsl,imx23-usb", "fsl,imx27-usb";
 			reg = <0x80080000 0x40000>;
 			interrupts = <11>;
-			fsl,usbphy = <&usbphy0>;
+			usb-phy = <&usbphy0>;
 			clocks = <&clks 40>;
 			status = "disabled";
 		};
arch/arm/boot/dts/imx27.dtsi +2 -2
index 83a8247..94bcf1a 100644
@@ -466,7 +466,7 @@
 				interrupts = <56>;
 				clocks = <&clks 15>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -485,7 +485,7 @@
 				interrupts = <55>;
 				clocks = <&clks 15>;
 				fsl,usbmisc = <&usbmisc 2>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				status = "disabled";
 			};
 
arch/arm/boot/dts/imx28.dtsi +2 -2
index 90a5795..52ad72f 100644
@@ -1143,7 +1143,7 @@
 			reg = <0x80080000 0x10000>;
 			interrupts = <93>;
 			clocks = <&clks 60>;
-			fsl,usbphy = <&usbphy0>;
+			usb-phy = <&usbphy0>;
 			status = "disabled";
 		};
 
@@ -1152,7 +1152,7 @@
 			reg = <0x80090000 0x10000>;
 			interrupts = <92>;
 			clocks = <&clks 61>;
-			fsl,usbphy = <&usbphy1>;
+			usb-phy = <&usbphy1>;
 			status = "disabled";
 		};
 
arch/arm/boot/dts/imx51.dtsi +1 -1
index cb3204a..b290947 100644
@@ -249,7 +249,7 @@
 				interrupts = <18>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
arch/arm/boot/dts/imx53.dtsi +2 -2
index f0962e5..b10a3de 100644
@@ -276,7 +276,7 @@
 				interrupts = <18>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 0>;
-				fsl,usbphy = <&usbphy0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -286,7 +286,7 @@
 				interrupts = <14>;
 				clocks = <&clks IMX5_CLK_USBOH3_GATE>;
 				fsl,usbmisc = <&usbmisc 1>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				status = "disabled";
 			};
 
(quoted diff) +0 -0

b/arch/arm/boot/dts/imx6qdl.dtsi index cfc85be..d2f0087 100644

arch/arm/boot/dts/imx6qdl.dtsi +2 -2
@@ -789,7 +789,7 @@
 				reg = <0x02184000 0x200>;
 				interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks 162>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -799,7 +799,7 @@
 				reg = <0x02184200 0x200>;
 				interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks 162>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
(quoted diff) +0 -0

b/arch/arm/boot/dts/imx6sl.dtsi index 6477447..33f501a 100644

arch/arm/boot/dts/imx6sl.dtsi +2 -2
@@ -651,7 +651,7 @@
 				reg = <0x02184000 0x200>;
 				interrupts = <0 43 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks IMX6SL_CLK_USBOH3>;
-				fsl,usbphy = <&usbphy1>;
+				usb-phy = <&usbphy1>;
 				fsl,usbmisc = <&usbmisc 0>;
 				status = "disabled";
 			};
@@ -661,7 +661,7 @@
 				reg = <0x02184200 0x200>;
 				interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks IMX6SL_CLK_USBOH3>;
-				fsl,usbphy = <&usbphy2>;
+				usb-phy = <&usbphy2>;
 				fsl,usbmisc = <&usbmisc 1>;
 				status = "disabled";
 			};
drivers/usb/chipidea/ci_hdrc_imx.c +1 -1
index c00f772..9a74100 100644
@@ -130,7 +130,7 @@ static int ci_hdrc_imx_probe(struct platform_device
 *pdev)
 		return ret;
 	}
 
-	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy",
 0);
+	data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
 	if (IS_ERR(data->phy)) {
drivers/usb/chipidea/ci_hdrc_imx.c +0 -1
 		ret = PTR_ERR(data->phy);
 		goto err_clk;
--
Quoted 2 lines

1.7.9.5

According to Power_ePAPR_APPROVED_v1.1.pdf
"ethernet-phy" is the node name, it is the same with Sergei's suggestion. But you have changed the property name at this patch, in fact, "fsl,usbphy" is ok for property name, "fsl,usb-phy" may be better, but not worth a patch to change it.

Peter

#6 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

Hello.

Quoted 3 lines · Peter Chen
Quoted 3 lines

It also adapt the dts that uses it.

[...]

Quoted 2 lines

According to Power_ePAPR_APPROVED_v1.1.pdf
"ethernet-phy" is the node name, it is the same with Sergei's suggestion.

Nobody's talking about "ehternet-phy" here.

Quoted 3 lines

But you have changed the property name at this patch, in fact, "fsl,usbphy" is ok for property name, "fsl,usb-phy" may be better, but not worth a patch to change it.

No, it's not better and both are not OK because they're still Freescale
specific while the de-facto standard property "usb-phy" is already used by other USB drivers for the same purpose.

Quoted 1 line

Peter

WBR, Sergei

#7 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

Quoted 8 lines
Quoted 5 lines

According to Power_ePAPR_APPROVED_v1.1.pdf "ethernet-phy" is the node name, it is the same with Sergei's suggestion.

Nobody's talking about "ehternet-phy" here.

Hmm, you take "ethernet-phy" as an example, and suggest changing to "usb-phy" at last email.

Quoted 8 lines
Quoted 1 line

But you have changed the property name at this patch, in fact,

"fsl,usbphy"

Quoted 2 lines

is ok for property name, "fsl,usb-phy" may be better, but not worth a patch to change it.

No, it's not better and both are not OK because they're still
Freescale specific while the de-facto standard property "usb-phy" is already used by other USB drivers for the same purpose.

Am I missing something, property name should be the same for all platforms?

At Power_ePAPR_APPROVED_v1.1, page 18, the example property name like below:

fsl,channel-fifo-len
ibm,ppc-interrupt-server#s
linux,network-index

Peter

#8 lore raw

PATCH v3 3/9 usb: chipidea: Use standard usb-phy property.

Hello.

Quoted 6 lines · Peter Chen
Quoted 4 lines
Quoted 2 lines

According to Power_ePAPR_APPROVED_v1.1.pdf "ethernet-phy" is the node name, it is the same with Sergei's suggestion.

Nobody's talking about "ehternet-phy" here.

Hmm, you take "ethernet-phy" as an example, and suggest changing to "usb-phy" at last email.

Then it's a wrong mail. I'm not mixing nodes and properties.

Quoted 10 lines
Quoted 8 lines
Quoted 1 line

But you have changed the property name at this patch, in fact,

"fsl,usbphy"

Quoted 2 lines

is ok for property name, "fsl,usb-phy" may be better, but not worth a patch to change it.

No, it's not better and both are not OK because they're still
Freescale specific while the de-facto standard property "usb-phy" is already used by other USB drivers for the same purpose.

Am I missing something, property name should be the same for all platforms?

If they're doing the same standard thing, yes.

Quoted 1 line

Peter

WBR, Sergei

#9 lore raw

PATCH v3 4/9 usb: chipidea: usbmisc: Add USB Host support for i.MX25/i.MX35 CPUs

In reply to Denis Carikli

This adds the i.MX25 and the i.MX35 support in the ChipIdea usbmisc driver.

The i.MX25 and i.MX35 usb controllers are similar enough to be able to use the same code.

---
Changelog v2->v3:
- Add a commit log

Changelog v1->v2:
- converted two remaining defines to BIT()
- Removed a variable declaration that was not used in usbmisc_imx25_init

---
 drivers/usb/chipidea/usbmisc_imx.c |   58 ++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
drivers/usb/chipidea/usbmisc_imx.c +58 -0
index cd061ab..3523c09 100644
@@ -21,6 +21,26 @@
 #define MX25_USB_PHY_CTRL_OFFSET	0x08
 #define MX25_BM_EXTERNAL_VBUS_DIVIDER	BIT(23)
 
+#define MXC_EHCI_INTERFACE_SINGLE_UNI	(2 << 0)
+#define MXC_EHCI_INTERFACE_DIFF_UNI	(0 << 0)
+#define MXC_EHCI_INTERFACE_MASK		(0xf)
+
+#define MX25_OTG_SIC_SHIFT		29
+#define MX25_OTG_SIC_MASK		(0x3 << MX25_OTG_SIC_SHIFT)
+#define MX25_OTG_PM_BIT			BIT(24)
+#define MX25_OTG_PP_BIT			BIT(11)
+#define MX25_OTG_OCPOL_BIT		BIT(3)
+
+#define MX25_H1_SIC_SHIFT		21
+#define MX25_H1_SIC_MASK		(0x3 << MX25_H1_SIC_SHIFT)
+#define MX25_H1_PP_BIT			BIT(18)
+#define MX25_H1_PM_BIT			BIT(16)
+#define MX25_H1_IPPUE_UP_BIT		BIT(7)
+#define MX25_H1_IPPUE_DOWN_BIT		BIT(6)
+#define MX25_H1_TLL_BIT			BIT(5)
+#define MX25_H1_USBTE_BIT		BIT(4)
+#define MX25_H1_OCPOL_BIT		BIT(2)
+
 #define MX27_H1_PM_BIT			BIT(8)
 #define MX27_H2_PM_BIT			BIT(16)
 #define MX27_OTG_PM_BIT			BIT(24)
@@ -50,6 +70,39 @@ struct imx_usbmisc {
 
 static struct imx_usbmisc *usbmisc;
 
+static int usbmisc_imx25_init(struct imx_usbmisc_data *data)
+{
+	unsigned long flags;
+	u32 val = 0;
+
+	if (data->index > 1)
+		return -EINVAL;
+
+	spin_lock_irqsave(&usbmisc->lock, flags);
+	switch (data->index) {
+	case 0:
+		val = readl(usbmisc->base);
+		val &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PP_BIT);
+		val |= (MXC_EHCI_INTERFACE_DIFF_UNI & MXC_EHCI_INTERFACE_MASK) << MX25_OTG_SIC_SHIFT;
+		val |= (MX25_OTG_PM_BIT | MX25_OTG_OCPOL_BIT);
+		writel(val, usbmisc->base);
+		break;
+	case 1:
+		val = readl(usbmisc->base);
+		val &= ~(MX25_H1_SIC_MASK | MX25_H1_PP_BIT |  MX25_H1_IPPUE_UP_BIT);
+		val |= (MXC_EHCI_INTERFACE_SINGLE_UNI & MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT;
+		val |= (MX25_H1_PM_BIT | MX25_H1_OCPOL_BIT | MX25_H1_TLL_BIT |
+			MX25_H1_USBTE_BIT | MX25_H1_IPPUE_DOWN_BIT);
+
+		writel(val, usbmisc->base);
+
+		break;
+	}
+	spin_unlock_irqrestore(&usbmisc->lock, flags);
+
+	return 0;
+}
+
 static int usbmisc_imx25_post(struct imx_usbmisc_data *data)
 {
 	void __iomem *reg;
@@ -159,6 +212,7 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data *data)
 }
 
 static const struct usbmisc_ops imx25_usbmisc_ops = {
+	.init = usbmisc_imx25_init,
 	.post = usbmisc_imx25_post,
 };
 
@@ -200,6 +254,10 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
 		.data = &imx25_usbmisc_ops,
 	},
 	{
+		.compatible = "fsl,imx35-usbmisc",
+		.data = &imx25_usbmisc_ops,
+	},
+	{
 		.compatible = "fsl,imx27-usbmisc",
 		.data = &imx27_usbmisc_ops,
 	},
Signature · 1 line
1.7.9.5
#10 lore raw

PATCH v3 4/9 usb: chipidea: usbmisc: Add USB Host support for i.MX25/i.MX35 CPUs

Quoted 26 lines

This adds the i.MX25 and the i.MX35 support in the ChipIdea usbmisc driver.

The i.MX25 and i.MX35 usb controllers are similar enough to be able to use the same code.

---
Changelog v2->v3:
- Add a commit log

Changelog v1->v2:
- converted two remaining defines to BIT()
- Removed a variable declaration that was not used in usbmisc_imx25_init

---
 drivers/usb/chipidea/usbmisc_imx.c |   58
++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
drivers/usb/chipidea/usbmisc_imx.c +0 -0
index cd061ab..3523c09 100644

drivers/usb/chipidea/usbmisc_imx.c line 27

Quoted 7 lines
drivers/usb/chipidea/usbmisc_imx.c +4 -0
@@ -21,6 +21,26 @@
 #define MX25_USB_PHY_CTRL_OFFSET	0x08
 #define MX25_BM_EXTERNAL_VBUS_DIVIDER	BIT(23)
 
+#define MXC_EHCI_INTERFACE_SINGLE_UNI	(2 << 0)
+#define MXC_EHCI_INTERFACE_DIFF_UNI	(0 << 0)
+#define MXC_EHCI_INTERFACE_MASK		(0xf)
+

Have a check for my comment for above Macros please.

Peter

Quoted 85 lines
drivers/usb/chipidea/usbmisc_imx.c +37 -0
+#define MX25_OTG_SIC_SHIFT		29
+#define MX25_OTG_SIC_MASK		(0x3 << MX25_OTG_SIC_SHIFT)
+#define MX25_OTG_PM_BIT			BIT(24)
+#define MX25_OTG_PP_BIT			BIT(11)
+#define MX25_OTG_OCPOL_BIT		BIT(3)
+
+#define MX25_H1_SIC_SHIFT		21
+#define MX25_H1_SIC_MASK		(0x3 << MX25_H1_SIC_SHIFT)
+#define MX25_H1_PP_BIT			BIT(18)
+#define MX25_H1_PM_BIT			BIT(16)
+#define MX25_H1_IPPUE_UP_BIT		BIT(7)
+#define MX25_H1_IPPUE_DOWN_BIT		BIT(6)
+#define MX25_H1_TLL_BIT			BIT(5)
+#define MX25_H1_USBTE_BIT		BIT(4)
+#define MX25_H1_OCPOL_BIT		BIT(2)
+
 #define MX27_H1_PM_BIT			BIT(8)
 #define MX27_H2_PM_BIT			BIT(16)
 #define MX27_OTG_PM_BIT			BIT(24)
@@ -50,6 +70,39 @@ struct imx_usbmisc {
 
 static struct imx_usbmisc *usbmisc;
 
+static int usbmisc_imx25_init(struct imx_usbmisc_data *data) {
+	unsigned long flags;
+	u32 val = 0;
+
+	if (data->index > 1)
+		return -EINVAL;
+
+	spin_lock_irqsave(&usbmisc->lock, flags);
+	switch (data->index) {
+	case 0:
+		val = readl(usbmisc->base);
+		val &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PP_BIT);
+		val |= (MXC_EHCI_INTERFACE_DIFF_UNI & MXC_EHCI_INTERFACE_MASK)
 << MX25_OTG_SIC_SHIFT;
+		val |= (MX25_OTG_PM_BIT | MX25_OTG_OCPOL_BIT);
+		writel(val, usbmisc->base);
+		break;
+	case 1:
+		val = readl(usbmisc->base);
+		val &= ~(MX25_H1_SIC_MASK | MX25_H1_PP_BIT |
 MX25_H1_IPPUE_UP_BIT);
+		val |= (MXC_EHCI_INTERFACE_SINGLE_UNI &
 MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT;
+		val |= (MX25_H1_PM_BIT | MX25_H1_OCPOL_BIT | MX25_H1_TLL_BIT

|

drivers/usb/chipidea/usbmisc_imx.c +16 -0
+			MX25_H1_USBTE_BIT | MX25_H1_IPPUE_DOWN_BIT);
+
+		writel(val, usbmisc->base);
+
+		break;
+	}
+	spin_unlock_irqrestore(&usbmisc->lock, flags);
+
+	return 0;
+}
+
 static int usbmisc_imx25_post(struct imx_usbmisc_data *data)  {
 	void __iomem *reg;
@@ -159,6 +212,7 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data
 *data)  }
 
 static const struct usbmisc_ops imx25_usbmisc_ops = {
+	.init = usbmisc_imx25_init,
 	.post = usbmisc_imx25_post,
 };
 
@@ -200,6 +254,10 @@ static const struct of_device_id usbmisc_imx_dt_ids[]
 = {
 		.data = &imx25_usbmisc_ops,
 	},
 	{
+		.compatible = "fsl,imx35-usbmisc",
+		.data = &imx25_usbmisc_ops,
+	},
+	{
 		.compatible = "fsl,imx27-usbmisc",
 		.data = &imx27_usbmisc_ops,

},
--
1.7.9.5

#11 lore raw

PATCH v3 5/9 ARM: dts: imx25.dtsi: Fix USB support.

In reply to Denis Carikli

From: Fabio Estevam <[email protected]>

This patch was adapted from the thread named
"USB Host support for mx25" on linux-usb at vger.kernel.org

---
Changelog v2->v3:
- rebased on top of the "usb: chipidea: Use standard usb-phy property." patch.
- Fixed the usbphy nodes index and added and added a reg property.

Changelog v1->v2:
- The usbphy nodes were made to look like the ones in imx53.dtsi
- The patch was rebased on top of the clock fixes commits.

---
 arch/arm/boot/dts/imx25.dtsi |   29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)
arch/arm/boot/dts/imx25.dtsi +18 -11
index 829791e..02697b2 100644
@@ -482,22 +482,13 @@
 				clocks = <&clks 99>;
 			};
 
-			usbphy1: usbphy at 1 {
-				compatible = "nop-usbphy";
-				status = "disabled";
-			};
-
-			usbphy2: usbphy at 2 {
-				compatible = "nop-usbphy";
-				status = "disabled";
-			};
-
 			usbotg: usb at 53ff4000 {
 				compatible = "fsl,imx25-usb", "fsl,imx27-usb";
 				reg = <0x53ff4000 0x0200>;
 				interrupts = <37>;
 				clocks = <&clks 70>;
 				fsl,usbmisc = <&usbmisc 0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -507,6 +498,7 @@
 				interrupts = <35>;
 				clocks = <&clks 70>;
 				fsl,usbmisc = <&usbmisc 1>;
+				usb-phy = <&usbphy1>;
 				status = "disabled";
 			};
 
@@ -516,7 +508,6 @@
 				clocks = <&clks 9>, <&clks 70>, <&clks 8>;
 				clock-names = "ipg", "ahb", "per";
 				reg = <0x53ff4600 0x00f>;
-				status = "disabled";
 			};
 
 			dryice at 53ffc000 {
@@ -548,4 +539,20 @@
 			};
 		};
 	};
+
+	usbphy {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "simple-bus";
+
+		usbphy0: usbphy at 0 {
+			reg = <0>;
+			compatible = "usb-nop-xceiv";
+		};
+
+		usbphy1: usbphy at 1 {
+			reg = <1>;
+			compatible = "usb-nop-xceiv";
+		};
+	};
 };
Signature · 1 line
1.7.9.5
reviewer
#12 lore raw

PATCH v3 5/9 ARM: dts: imx25.dtsi: Fix USB support.

Hi Denis,

Quoted 5 lines · Denis Carikli

From: Fabio Estevam <[email protected]>

This patch was adapted from the thread named
"USB Host support for mx25" on linux-usb at vger.kernel.org

As you add me in the From field, you also need to add:

Signed-off-by line.

arch/arm/boot/dts/imx25.dtsi line 546

Quoted 6 lines
arch/arm/boot/dts/imx25.dtsi +5 -0
+
+       usbphy {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "simple-bus";

I made this comment earlier: why do we place usbphy0/1 under simple-bus?

This is not documented in the the bindings.

arch/arm/boot/dts/imx25.dtsi line 557

Quoted 11 lines
arch/arm/boot/dts/imx25.dtsi +11 -0
+
+               usbphy0: usbphy at 0 {
+                       reg = <0>;
+                       compatible = "usb-nop-xceiv";
+               };
+
+               usbphy1: usbphy at 1 {
+                       reg = <1>;
+                       compatible = "usb-nop-xceiv";
+               };
+       };

Regards,

Fabio Estevam

#13 lore raw

PATCH v3 5/9 ARM: dts: imx25.dtsi: Fix USB support.

Quoted 1 line · Fabio Estevam

Hi Denis,

Hi,

Quoted 4 lines

As you add me in the From field, you also need to add:

Signed-off-by line.

Thanks.

Quoted 6 lines

arch/arm/boot/dts/imx25.dtsi line 546

Quoted 4 lines
arch/arm/boot/dts/imx25.dtsi +4 -0
+       usbphy {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "simple-bus";

I made this comment earlier: why do we place usbphy0/1 under simple-bus?

The official ePAPR 1.1 standard talks about the system on a chip's internal I/O bus.
So, I wonder if, in general, it makes sense to group together, with a simple-bus compatible, potentially different usb phy, which are connected to potentially different usb controllers.

Still if I remove it from the usbphy node, I get the following messages more than once in dmesg:

Quoted 4 lines

ci_hdrc ci_hdrc.0: no usb2 phy configured platform ci_hdrc.0: Driver ci_hdrc requests probe deferral ci_hdrc ci_hdrc.1: no usb2 phy configured platform ci_hdrc.1: Driver ci_hdrc requests probe deferral

With at the end lsusb printing nothing.

Quoted 1 line

This is not documented in the the bindings.

I don't think that the simple-bus has to be added to Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt because that file only talks about what became usbphy's subnodes.

Denis.

#14 lore raw

PATCH v3 6/9 ARM: dts: mbimxsd25 baseboard: Add USB support

In reply to Denis Carikli

---
Changelog v1->v2:
- With the clock fix patches, the usb gadget also work. So I've set the otg port to otg instead of host.

---
 .../boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts  |   13 +++++++++++++
 1 file changed, 13 insertions(+)
arch/arm/boot/dts/imx25-eukrea-mbimxsd25-baseboard.dts +13 -0
index 62fb3da..ad12da3 100644
@@ -172,3 +172,16 @@
 	fsl,uart-has-rtscts;
 	status = "okay";
 };
+
+&usbhost1 {
+	phy_type = "serial";
+	dr_mode = "host";
+	status = "okay";
+};
+
+&usbotg {
+	phy_type = "utmi";
+	dr_mode = "otg";
+	external-vbus-divider;
+	status = "okay";
+};
Signature · 1 line
1.7.9.5
#15 lore raw

PATCH v3 7/9 ARM: dts: i.MX35: Add USB support.

In reply to Denis Carikli

---
Changelog v2->v3:
- rebased on top of the "usb: chipidea: Use standard usb-phy property." patch.
- Fixed the usbphy nodes index and added and added a reg property.

Changelog v1->v2:
- The usbphy nodes were made to look like the ones in imx53.dtsi
- The patch was rebased on top of the clock fixes commits.

---
 arch/arm/boot/dts/imx35.dtsi |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
arch/arm/boot/dts/imx35.dtsi +18 -0
index 474a73d..66bed6d 100644
@@ -298,6 +298,7 @@
 				interrupts = <37>;
 				clocks = <&clks 73>;
 				fsl,usbmisc = <&usbmisc 0>;
+				usb-phy = <&usbphy0>;
 				status = "disabled";
 			};
 
@@ -307,6 +308,7 @@
 				interrupts = <35>;
 				clocks = <&clks 73>;
 				fsl,usbmisc = <&usbmisc 1>;
+				usb-phy = <&usbphy1>;
 				status = "disabled";
 			};
 
@@ -355,4 +357,20 @@
 			};
 		};
 	};
+
+	usbphy {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "simple-bus";
+
+		usbphy0: usbphy at 0 {
+			reg = <0>;
+			compatible = "usb-nop-xceiv";
+		};
+
+		usbphy1: usbphy at 1 {
+			reg = <1>;
+			compatible = "usb-nop-xceiv";
+		};
+	};
 };
Signature · 1 line
1.7.9.5
#16 lore raw

PATCH v3 8/9 ARM: dts: mbimxsd35 baseboard: Add USB support.

In reply to Denis Carikli

---
Changelog v1->v2:
- With the clock fix patches, the usb gadget also work. So I've set the otg port to otg instead of host.
- Before I forgott to set dr_mode to host in the usbhost port. That is now fixed.

---
 .../boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts  |   13 +++++++++++++
 1 file changed, 13 insertions(+)
arch/arm/boot/dts/imx35-eukrea-mbimxsd35-baseboard.dts +13 -0
index 71197b9..f04ae91 100644
@@ -150,3 +150,16 @@
 	fsl,uart-has-rtscts;
 	status = "okay";
 };
+
+&usbhost1 {
+	phy_type = "serial";
+	dr_mode = "host";
+	status = "okay";
+};
+
+&usbotg {
+	phy_type = "utmi";
+	dr_mode = "otg";
+	external-vbus-divider;
+	status = "okay";
+};
Signature · 1 line
1.7.9.5
#17 lore raw

PATCH v3 9/9 ARM: imx_v4_v5_defconfig: Enable drivers for i.MX25/i.MX35 USB support.

In reply to Denis Carikli

---
Changelog v2->v3:
- Extra gadget drivers additions were removed from this patch.

Changelog v1->v2:
- With the clock fix patches, the usb gadget also work. So I've addeed it to this patch too.
- CONFIG_USB_OTG_FSM=y was not needed, so it was removed.

---
 arch/arm/configs/imx_v4_v5_defconfig |    6 ++++++
 1 file changed, 6 insertions(+)
arch/arm/configs/imx_v4_v5_defconfig +6 -0
index f1aeb7d..ec9b365 100644
@@ -80,6 +80,7 @@ CONFIG_MTD_UBI=y
 CONFIG_EEPROM_AT24=y
 CONFIG_EEPROM_AT25=y
 CONFIG_ATA=y
+CONFIG_BLK_DEV_SD=y
 CONFIG_PATA_IMX=y
 CONFIG_NETDEVICES=y
 CONFIG_CS89x0=y
@@ -153,6 +154,11 @@ CONFIG_USB_HID=m
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_MXC=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_NOP_USB_XCEIV=y
 CONFIG_MMC=y
 CONFIG_MMC_UNSAFE_RESUME=y
 CONFIG_MMC_SDHCI=y
Signature · 1 line
1.7.9.5