Skip to contentSkip to conversation

Enable usbphy and hsotg for exynos4

PATCH Superseded Chanho Park 5 participants 11 messages Apr 14, 2014 – Apr 26, 2014

Subsystems (2)

v1 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

cover Enable usbphy and hsotg for exynos4

This patchset enables a exynos4 usbphy and hsotg DT node for exynos4. The usb phy node uses generic exynos phy driver. The driver uses PMU syscon and SYSREG syscon phandles.

Chanho Park (4):
ARM: dts: exynos4: add PMU syscon node
ARM: dts: exynos4: add exynos_usbphy node
ARM: dts: exynos4: add hsotg device node
ARM: dts: exynos4412-trats2: enable usb nodes

 arch/arm/boot/dts/exynos4.dtsi          | 26 ++++++++++++++++++++++++++
 arch/arm/boot/dts/exynos4412-trats2.dts | 10 ++++++++++
 arch/arm/boot/dts/exynos4x12.dtsi       |  5 +++++
 3 files changed, 41 insertions(+)
Signature · 1 line
1.8.3.2
#1 lore raw

PATCH 1/4 ARM: dts: exynos4: add PMU syscon node

This patch adds a PMU(Power Management Unit) syscon node. This should be required for USB Phy syscon regmap I/F.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
 arch/arm/boot/dts/exynos4.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +5 -0
index 2f8bcd0..e565b86 100644
@@ -110,6 +110,11 @@
 		reg = <0x10010000 0x400>;
 	};
 
+	pmu_reg: syscon at 10020000 {
+		compatible = "samsung,exynos4-pmureg", "syscon";
+		reg = <0x10020000 0x4000>;
+	};
+
 	dsi_0: dsi at 11C80000 {
 		compatible = "samsung,exynos4210-mipi-dsi";
 		reg = <0x11C80000 0x10000>;
Signature · 1 line
1.8.3.2
#2 lore raw

PATCH 1/4 ARM: dts: exynos4: add PMU syscon node

Hi Chanho,

Quoted 15 lines · Chanho Park

This patch adds a PMU(Power Management Unit) syscon node. This should be required for USB Phy syscon regmap I/F.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
  arch/arm/boot/dts/exynos4.dtsi | 5 +++++
  1 file changed, 5 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index 2f8bcd0..e565b86 100644

arch/arm/boot/dts/exynos4.dtsi line 114

Quoted 5 lines
arch/arm/boot/dts/exynos4.dtsi +2 -0
@@ -110,6 +110,11 @@
  		reg = <0x10010000 0x400>;
  	};
 
+	pmu_reg: syscon at 10020000 {
+		compatible = "samsung,exynos4-pmureg", "syscon";

This compatible string doesn't seem to be defined in [1], please add it there,

[1] Documentation/devicetree/bindings/arm/samsung/pmu.txt

Otherwise looks good, so after fixing that you may add my

Best regards,
Tomasz

#3 lore raw

PATCH 1/4 ARM: dts: exynos4: add PMU syscon node

Hi,

Quoted 24 lines · Tomasz Figa

Hi Chanho,

Quoted 20 lines · Chanho Park

This patch adds a PMU(Power Management Unit) syscon node. This should be required for USB Phy syscon regmap I/F.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
  arch/arm/boot/dts/exynos4.dtsi | 5 +++++
  1 file changed, 5 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index 2f8bcd0..e565b86 100644
@@ -110,6 +110,11 @@
                reg = <0x10010000 0x400>;
        };
 
Quoted 3 lines

arch/arm/boot/dts/exynos4.dtsi line 114

Quoted 2 lines
arch/arm/boot/dts/exynos4.dtsi +2 -0
+       pmu_reg: syscon at 10020000 {
+               compatible = "samsung,exynos4-pmureg", "syscon";

Assume a case where exynos PMU is made as platform driver [1] and we
need use the compatible "samsung,exynos4-pmureg" in the driver. But since syscon driver uses compatible "syscon" and once the syscon driver is probed, the exynos PMU platform driver [1] will NEVER be probed.
So my question is, can we have 2 compatible strings for a DT node, and both the compatible strings are used for probing purpose? Recently I faced this issue on exynos5250, where i was testing PMU driver [1] and I noticed that PMU driver [1] was NEVER probed, if I enable syscon driver in menuconfig.

[1] http://www.spinics.net/lists/linux-samsung-soc/msg28038.html

Quoted 18 lines

This compatible string doesn't seem to be defined in [1], please add it there,

[1] Documentation/devicetree/bindings/arm/samsung/pmu.txt

Otherwise looks good, so after fixing that you may add my

Best regards,
Tomasz

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw

PATCH 1/4 ARM: dts: exynos4: add PMU syscon node

Hi Vikas,

Quoted 32 lines · Vikas Sajjan

Hi,

Quoted 24 lines · Tomasz Figa

Hi Chanho,

Quoted 20 lines · Chanho Park

This patch adds a PMU(Power Management Unit) syscon node. This should be required for USB Phy syscon regmap I/F.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
   arch/arm/boot/dts/exynos4.dtsi | 5 +++++
   1 file changed, 5 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index 2f8bcd0..e565b86 100644
@@ -110,6 +110,11 @@
                 reg = <0x10010000 0x400>;
         };
 
Quoted 3 lines

arch/arm/boot/dts/exynos4.dtsi line 114

Quoted 2 lines
arch/arm/boot/dts/exynos4.dtsi +2 -0
+       pmu_reg: syscon at 10020000 {
+               compatible = "samsung,exynos4-pmureg", "syscon";
Quoted 10 lines

Assume a case where exynos PMU is made as platform driver [1] and we
need use the compatible "samsung,exynos4-pmureg" in the driver. But since syscon driver uses compatible "syscon" and once the syscon driver is probed, the exynos PMU platform driver [1] will NEVER be probed.
So my question is, can we have 2 compatible strings for a DT node, and both the compatible strings are used for probing purpose? Recently I faced this issue on exynos5250, where i was testing PMU driver [1] and I noticed that PMU driver [1] was NEVER probed, if I enable syscon driver in menuconfig.

No, it is not possible to bind two drivers with different compatible strings to the same node. Basically this is because only one platform driver can be bound to particular platform device.

The rule is that the most specific compatible string (e.g. the first from the left) that matches should be used, but I'm not sure if this is implemented this way in Linux kernel, especially considering that a platform driver usually probes when it is being registered. So we might have a race here, which you can work around by making sure that your PMU driver is always registered first (e.g. by lowering its initcall level).

Best regards,
Tomasz

#5 lore raw

PATCH 1/4 ARM: dts: exynos4: add PMU syscon node

Hi Tomasz,

Quoted 52 lines · Tomasz Figa

Hi Vikas,

Quoted 36 lines · Vikas Sajjan

Hi,

Quoted 26 lines · Tomasz Figa

Hi Chanho,

Quoted 21 lines · Chanho Park

This patch adds a PMU(Power Management Unit) syscon node. This should be required for USB Phy syscon regmap I/F.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
   arch/arm/boot/dts/exynos4.dtsi | 5 +++++
   1 file changed, 5 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index 2f8bcd0..e565b86 100644
@@ -110,6 +110,11 @@
                 reg = <0x10010000 0x400>;
         };
 
Quoted 4 lines

arch/arm/boot/dts/exynos4.dtsi line 114

Quoted 2 lines
arch/arm/boot/dts/exynos4.dtsi +2 -0
+       pmu_reg: syscon at 10020000 {
+               compatible = "samsung,exynos4-pmureg", "syscon";
Quoted 10 lines

Assume a case where exynos PMU is made as platform driver [1] and we
need use the compatible "samsung,exynos4-pmureg" in the driver. But since syscon driver uses compatible "syscon" and once the syscon driver is probed, the exynos PMU platform driver [1] will NEVER be probed.
So my question is, can we have 2 compatible strings for a DT node, and both the compatible strings are used for probing purpose? Recently I faced this issue on exynos5250, where i was testing PMU driver [1] and I noticed that PMU driver [1] was NEVER probed, if I enable syscon driver in menuconfig.

Quoted 4 lines

No, it is not possible to bind two drivers with different compatible strings to the same node. Basically this is because only one platform driver can be bound to particular platform device.

Yes, correct.

Quoted 7 lines

The rule is that the most specific compatible string (e.g. the first from the left) that matches should be used, but I'm not sure if this is implemented this way in Linux kernel, especially considering that a platform driver usually probes when it is being registered. So we might have a race here, which you can work around by making sure that your PMU driver is always registered first (e.g. by lowering its initcall level).

I don't see it's using first compatible string from the left. I can see whichever driver registers platform driver first, it's probe is getting called. As in this particular case, PMU has two compatibility string as "samsung, exynosxxx-pmu", "syscon". But since "syscon" driver registers it's platform driver in postcore_initcall where as PMU platform driver [1], was registering as arch_initcall, only "syscon" probe got called.

In my V2 patch for converting PMU as driver form, I dropped idea of converting into platform driver, because we can't remove "syscon" from binding as many other driver wants to access PMU register via regmap handle. By lowering it's initcall level may be I can make PMU probe gets called but then how other drivers will be able to access PMU regmap handles?

Quoted 8 lines

Best regards,
Tomasz

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#6 lore raw

PATCH 2/4 ARM: dts: exynos4: add exynos_usbphy node

In reply to Chanho Park

This patch enables a exynos_usbphy node for exynos4 SoCs. A exynos4x12 usb phy node is almost same with 4210's one except compatible string and pmu syscon.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
 arch/arm/boot/dts/exynos4.dtsi    | 10 ++++++++++
 arch/arm/boot/dts/exynos4x12.dtsi |  5 +++++
 2 files changed, 15 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +10 -0
index e565b86..0e32d7f 100644
@@ -278,6 +278,16 @@
 		status = "disabled";
 	};
 
+	exynos_usbphy: exynos-usbphy at 125B0000 {
+		compatible = "samsung,exynos4210-usb2-phy";
+		reg = <0x125B0000 0x100>;
+		samsung,pmureg-phandle = <&pmu_reg>;
+		clocks = <&clock 305>, <&clock 2>;
+		clock-names = "phy", "ref";
+		status = "disabled";
+		#phy-cells = <1>;
+	};
+
 	ehci at 12580000 {
 		compatible = "samsung,exynos4210-ehci";
 		reg = <0x12580000 0x100>;
arch/arm/boot/dts/exynos4x12.dtsi +5 -0
index c4a9306..3d77a40 100644
@@ -243,4 +243,9 @@
 		clock-names = "biu", "ciu";
 		status = "disabled";
 	};
+
+	exynos-usbphy at 125B0000 {
+		compatible = "samsung,exynos4x12-usb2-phy";
+		samsung,sysreg-phandle = <&sys_reg>;
+	};
 };
Signature · 1 line
1.8.3.2
#7 lore raw

PATCH 2/4 ARM: dts: exynos4: add exynos_usbphy node

Hi Chanho,

Quoted 17 lines · Chanho Park

This patch enables a exynos_usbphy node for exynos4 SoCs. A exynos4x12 usb phy node is almost same with 4210's one except compatible string and pmu syscon.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
---
  arch/arm/boot/dts/exynos4.dtsi    | 10 ++++++++++
  arch/arm/boot/dts/exynos4x12.dtsi |  5 +++++
  2 files changed, 15 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index e565b86..0e32d7f 100644

arch/arm/boot/dts/exynos4.dtsi line 285

Quoted 8 lines
arch/arm/boot/dts/exynos4.dtsi +5 -0
@@ -278,6 +278,16 @@
  		status = "disabled";
  	};
 
+	exynos_usbphy: exynos-usbphy at 125B0000 {
+		compatible = "samsung,exynos4210-usb2-phy";
+		reg = <0x125B0000 0x100>;
+		samsung,pmureg-phandle = <&pmu_reg>;
+		clocks = <&clock 305>, <&clock 2>;

Please use clock macros from include/dt-bindings instead of numbers directly.

Best regards,
Tomasz

#8 lore raw

PATCH 3/4 ARM: dts: exynos4: add hsotg device node

In reply to Chanho Park

This patch adds a hsotg node for exynos4 USB2.0 device controller.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
Cc Marek Szyprowski <[email protected]>
---
 arch/arm/boot/dts/exynos4.dtsi | 11 +++++++++++
 1 file changed, 11 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +11 -0
index 0e32d7f..e541ecb 100644
@@ -288,6 +288,17 @@
 		#phy-cells = <1>;
 	};
 
+	hsotg at 12480000 {
+		compatible = "samsung,s3c6400-hsotg";
+		reg = <0x12480000 0x20000>;
+		interrupts = <0 71 0>;
+		clocks = <&clock 305>;
+		clock-names = "otg";
+		phys = <&exynos_usbphy 0>;
+		phy-names = "device";
+		status = "disabled";
+	};
+
 	ehci at 12580000 {
 		compatible = "samsung,exynos4210-ehci";
 		reg = <0x12580000 0x100>;
Signature · 1 line
1.8.3.2
#9 lore raw

PATCH 3/4 ARM: dts: exynos4: add hsotg device node

Hi Chanho,

Quoted 15 lines · Chanho Park

This patch adds a hsotg node for exynos4 USB2.0 device controller.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
Cc Marek Szyprowski <[email protected]>
---
  arch/arm/boot/dts/exynos4.dtsi | 11 +++++++++++
  1 file changed, 11 insertions(+)
arch/arm/boot/dts/exynos4.dtsi +0 -0
index 0e32d7f..e541ecb 100644

arch/arm/boot/dts/exynos4.dtsi line 295

Quoted 8 lines
arch/arm/boot/dts/exynos4.dtsi +5 -0
@@ -288,6 +288,17 @@
  		#phy-cells = <1>;
  	};
 
+	hsotg at 12480000 {
+		compatible = "samsung,s3c6400-hsotg";
+		reg = <0x12480000 0x20000>;
+		interrupts = <0 71 0>;
+		clocks = <&clock 305>;

Please use clock macros.

arch/arm/boot/dts/exynos4.dtsi line 298

Quoted 3 lines
arch/arm/boot/dts/exynos4.dtsi +3 -0
+		clock-names = "otg";
+		phys = <&exynos_usbphy 0>;
+		phy-names = "device";

This is not the correct phy name for this binding. According to what the driver uses and the example in ...bindings/usb/dwc2.txt "usb2-phy" should be used.

Best regards,
Tomasz

#10 lore raw

PATCH 4/4 ARM: dts: exynos4412-trats2: enable usb nodes

In reply to Chanho Park

This patch enables exynos_usbphy and hsotg device nodes.

Cc Tomasz Figa <[email protected]>
Cc Kamil Debski <[email protected]>
Cc Marek Szyprowski <[email protected]>
---
 arch/arm/boot/dts/exynos4412-trats2.dts | 10 ++++++++++
 1 file changed, 10 insertions(+)
arch/arm/boot/dts/exynos4412-trats2.dts +10 -0
index 9583563..a16db6c 100644
@@ -665,6 +665,16 @@
 		};
 	};
 
+	exynos-usbphy at 125B0000 {
+		status = "okay";
+	};
+
+	hsotg at 12480000 {
+		vusb_d-supply = <&ldo15_reg>;
+		vusb_a-supply = <&ldo12_reg>;
+		status = "okay";
+	};
+
 	thermistor-ap at 0 {
 		compatible = "ntc,ncp15wb473";
 		pullup-uv = <1800000>;	 /* VCC_1.8V_AP */
Signature · 1 line
1.8.3.2