diff mbox series

arm64: dts: rockchip: fix PCIe regulators for Radxa ROCK 3A

Message ID 20240912235923.1013-1-naoki@radxa.com (mailing list archive)
State New
Headers show
Series arm64: dts: rockchip: fix PCIe regulators for Radxa ROCK 3A | expand

Commit Message

FUKAUMI Naoki Sept. 12, 2024, 11:59 p.m. UTC
on Radxa ROCK 3A, GPIO0_D4 is used to enable both pi6c PCIe clock
generator and "vcc3v3_pcie" regulator (PCIe3 M.2 M key connector).

since pi6c needs to be enabled before using PCIe3, GPIO0_D4 need to be
controlled by "vcc3v3_pi6c_03" regulator. so make "vcc3v3_pi6c_03"
vin-supply for "vcc3v3_pcie".

then, currently "vcc3v3_pcie" regulator is used for PCIe2 M.2 E key
connector, but by schematic[1], it's wrong. "vcc3v3_wf" regulator is
right one, add it and fix related vin-supply.

in addition to above fixes, some cosmetic changes for pinctrl node
names. no functional change is intended.

[1] https://dl.radxa.com/rock3/docs/hw/3a/radxa_rock_3a_v1310_schematic.pdf

tested with Radxa Wireless Module A8 on PCIe2 and Dual 2.5G Router HAT
on PCIe3.

$ lspci
0000:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3568 Remote Signal Processor (rev 01)
0000:01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8852BE PCIe 802.11ax Wireless Network Controller
0002:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3568 Remote Signal Processor (rev 01)
0002:01:00.0 PCI bridge: ASMedia Technology Inc. ASM2806 4-Port PCIe x2 Gen3 Packet Switch (rev 01)
0002:02:00.0 PCI bridge: ASMedia Technology Inc. ASM2806 4-Port PCIe x2 Gen3 Packet Switch (rev 01)
0002:02:02.0 PCI bridge: ASMedia Technology Inc. ASM2806 4-Port PCIe x2 Gen3 Packet Switch (rev 01)
0002:02:06.0 PCI bridge: ASMedia Technology Inc. ASM2806 4-Port PCIe x2 Gen3 Packet Switch (rev 01)
0002:02:0e.0 PCI bridge: ASMedia Technology Inc. ASM2806 4-Port PCIe x2 Gen3 Packet Switch (rev 01)
0002:03:00.0 Non-Volatile memory controller: ADATA Technology Co., Ltd. LEGEND 700, XPG GAMMIX S20 NVMe SSD (DRAM-less) (rev 03)
0002:05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
0002:06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
$ lspci -t
-[0000:00]---00.0-[01-ff]----00.0
-[0002:00]---00.0-[01-ff]----00.0-[02-06]--+-00.0-[03]----00.0
                                           +-02.0-[04]--
                                           +-06.0-[05]----00.0
                                           \-0e.0-[06]----00.0

Fixes: 0522cd811220 ("arm64: dts: rockchip: Add PCIe v3 nodes to rock-3a")
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
---
 .../boot/dts/rockchip/rk3568-rock-3a.dts      | 52 ++++++++++++++-----
 1 file changed, 38 insertions(+), 14 deletions(-)

Comments

Chukun Pan Sept. 13, 2024, 3:30 a.m. UTC | #1
> @@ -119,14 +123,10 @@ vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {

Please add /* actually fed by vcc5v0_sys */

>  	vcc3v3_pcie: vcc3v3-pcie-regulator {
>  		compatible = "regulator-fixed";
> -		enable-active-high;
> -		gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
> -		pinctrl-names = "default";
> -		pinctrl-0 = <&pcie_enable_h>;
>  		regulator-name = "vcc3v3_pcie";
>  		regulator-min-microvolt = <3300000>;
>  		regulator-max-microvolt = <3300000>;
> -		vin-supply = <&vcc5v0_sys>;
> +		vin-supply = <&vcc3v3_pi6c_03>;
>  	};

I recommend renaming vcc3v3_pcie to vcc3v3_pcie30x1, which better
matches the schematic.

>  &pcie2x1 {
>  	pinctrl-names = "default";
> -	pinctrl-0 = <&pcie_reset_h>;
> +	pinctrl-0 = <&pcie2x1m1_pins>;
>  	reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
> -	vpcie3v3-supply = <&vcc3v3_pcie>;
> +	vpcie3v3-supply = <&vcc3v3_wf>;
>  	status = "okay";
>  };

Please separate the changes for pcie2x1 and pcie3 into 2 patches.

> +		pcie2x1m1_pins: pcie2x1m1-pins {
> +			rockchip,pins =
> +				/* pcie20_clkreqnm1 */
> +				<2 RK_PD0 4 &pcfg_pull_none>,
> +				/* pcie20_perstnm1 */
> +				<3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>,
> +				/* pcie20_wakenm1 */
> +				<2 RK_PD1 4 &pcfg_pull_none>;

Why not pcie20m1_pins?

> +		pcie3x2m1_pins: pcie3x2m1-pins {
> +			rockchip,pins =
> +				/* pcie30x2_clkreqnm1 */
> +				<2 RK_PD4 4 &pcfg_pull_none>,
> +				/* pcie30x2_perstnm1 */
> +				<2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>,
> +				/* pcie30x2_wakenm1 */
> +				<2 RK_PD5 4 &pcfg_pull_none>;
> +		};

Why not pcie30x2m1_pins?
Also missing blank line.

> +		pcie_pwren_h: pcie-pwren-h {
> +			rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
>  		};

Thanks,
Chukun
FUKAUMI Naoki Sept. 13, 2024, 4:21 a.m. UTC | #2
hi,

On 9/13/24 12:30, Chukun Pan wrote:
>> @@ -119,14 +123,10 @@ vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {
> 
> Please add /* actually fed by vcc5v0_sys */
> 
>>   	vcc3v3_pcie: vcc3v3-pcie-regulator {
>>   		compatible = "regulator-fixed";
>> -		enable-active-high;
>> -		gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
>> -		pinctrl-names = "default";
>> -		pinctrl-0 = <&pcie_enable_h>;
>>   		regulator-name = "vcc3v3_pcie";
>>   		regulator-min-microvolt = <3300000>;
>>   		regulator-max-microvolt = <3300000>;
>> -		vin-supply = <&vcc5v0_sys>;
>> +		vin-supply = <&vcc3v3_pi6c_03>;
>>   	};
> 
> I recommend renaming vcc3v3_pcie to vcc3v3_pcie30x1, which better
> matches the schematic.

ok

>>   &pcie2x1 {
>>   	pinctrl-names = "default";
>> -	pinctrl-0 = <&pcie_reset_h>;
>> +	pinctrl-0 = <&pcie2x1m1_pins>;
>>   	reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
>> -	vpcie3v3-supply = <&vcc3v3_pcie>;
>> +	vpcie3v3-supply = <&vcc3v3_wf>;
>>   	status = "okay";
>>   };
> 
> Please separate the changes for pcie2x1 and pcie3 into 2 patches.

ok

>> +		pcie2x1m1_pins: pcie2x1m1-pins {
>> +			rockchip,pins =
>> +				/* pcie20_clkreqnm1 */
>> +				<2 RK_PD0 4 &pcfg_pull_none>,
>> +				/* pcie20_perstnm1 */
>> +				<3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>,
>> +				/* pcie20_wakenm1 */
>> +				<2 RK_PD1 4 &pcfg_pull_none>;
> 
> Why not pcie20m1_pins?

$ make dtbs
   DTC     arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dtb
arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts:656.32-664.5: ERROR 
(duplicate_label): /pinctrl/pcie/pcie20m1-pins: Duplicate label 
'pcie20m1_pins' on /pinctrl/pcie/pcie20m1-pins and 
/pinctrl/pcie20/pcie20m1-pins

we need gpio pin for reset.

>> +		pcie3x2m1_pins: pcie3x2m1-pins {
>> +			rockchip,pins =
>> +				/* pcie30x2_clkreqnm1 */
>> +				<2 RK_PD4 4 &pcfg_pull_none>,
>> +				/* pcie30x2_perstnm1 */
>> +				<2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>,
>> +				/* pcie30x2_wakenm1 */
>> +				<2 RK_PD5 4 &pcfg_pull_none>;
>> +		};
> 
> Why not pcie30x2m1_pins?

$ make dtbs
   DTC     arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dtb
arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts:665.36-673.5: ERROR 
(duplicate_label): /pinctrl/pcie/pcie30x2m1-pins: Duplicate label 
'pcie30x2m1_pins' on /pinctrl/pcie/pcie30x2m1-pins and 
/pinctrl/pcie30x2/pcie30x2m1-pins

> Also missing blank line.
> 
>> +		pcie_pwren_h: pcie-pwren-h {
>> +			rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
>>   		};
> 
> Thanks,
> Chukun

thank you very much for your review.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.
Chukun Pan Sept. 13, 2024, 7:02 a.m. UTC | #3
> arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts:656.32-664.5: ERROR 
> (duplicate_label): /pinctrl/pcie/pcie20m1-pins: Duplicate label 
> 'pcie20m1_pins' on /pinctrl/pcie/pcie20m1-pins and 
> /pinctrl/pcie20/pcie20m1-pins
> 
> we need gpio pin for reset.

Can't it work just written like this?

&pcie2x1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pcie20m1_pins>;
	reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
	vpcie3v3-supply = <&vcc3v3_pcie>;
	status = "okay";
};

If not, please overwrite the pinctrl:

	pcie20 {
		pcie20m1_pins: pcie20m1-pins {

Thanks,
Chukun
FUKAUMI Naoki Sept. 13, 2024, 7:50 a.m. UTC | #4
hi,

On 9/13/24 16:02, Chukun Pan wrote:
>> arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts:656.32-664.5: ERROR
>> (duplicate_label): /pinctrl/pcie/pcie20m1-pins: Duplicate label
>> 'pcie20m1_pins' on /pinctrl/pcie/pcie20m1-pins and
>> /pinctrl/pcie20/pcie20m1-pins
>>
>> we need gpio pin for reset.

sorry, "U-Boot need gpio pin"

> Can't it work just written like this?
> 
> &pcie2x1 {
> 	pinctrl-names = "default";
> 	pinctrl-0 = <&pcie20m1_pins>;
> 	reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
> 	vpcie3v3-supply = <&vcc3v3_pcie>;
> 	status = "okay";
> };
> 
> If not, please overwrite the pinctrl:
> 
> 	pcie20 {
> 		pcie20m1_pins: pcie20m1-pins {

I didn't know how to overwrite it. thank you.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.

> Thanks,
> Chukun
>
Chukun Pan Sept. 13, 2024, 10 a.m. UTC | #5
> sorry, "U-Boot need gpio pin"
> I didn't know how to overwrite it. thank you.

You can look at the two files:
 rk3568-rock-3b.dts
 rk3568-pinctrl.dtsi

> <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>
> <2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>

So this is only needed by uboot?

Thanks,
Chukun
FUKAUMI Naoki Sept. 13, 2024, 10:21 a.m. UTC | #6
hi

On 9/13/24 19:00, Chukun Pan wrote:
>> sorry, "U-Boot need gpio pin"
>> I didn't know how to overwrite it. thank you.
> 
> You can look at the two files:
>   rk3568-rock-3b.dts
>   rk3568-pinctrl.dtsi

thanks. now you know what I want to do :)

>> <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>
>> <2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>
> 
> So this is only needed by uboot?

hmm. sorry, anything which resets PCIe via GPIO.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.

> Thanks,
> Chukun
>
FUKAUMI Naoki Sept. 13, 2024, 11:08 a.m. UTC | #7
hi

btw, how do you think about pcie30_avdd0v9 and pcie30_avdd1v8?
as far as I can see, it's unused.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.

On 9/13/24 19:00, Chukun Pan wrote:
>> sorry, "U-Boot need gpio pin"
>> I didn't know how to overwrite it. thank you.
> 
> You can look at the two files:
>   rk3568-rock-3b.dts
>   rk3568-pinctrl.dtsi
> 
>> <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>
>> <2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>
> 
> So this is only needed by uboot?
> 
> Thanks,
> Chukun
>
Chukun Pan Sept. 13, 2024, 12:06 p.m. UTC | #8
> btw, how do you think about pcie30_avdd0v9 and pcie30_avdd1v8?
> as far as I can see, it's unused.

The schematic notes that PCIe uses VDDA_0V9 and VCCA_1V8,
so they can be removed.

Thanks,
Chukun
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
index 59f1403b4fa56..885196c58b915 100644
--- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
@@ -109,6 +109,10 @@  pcie30_avdd1v8: pcie30-avdd1v8-regulator {
 	/* pi6c pcie clock generator */
 	vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {
 		compatible = "regulator-fixed";
+		enable-active-high;
+		gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pcie_pwren_h>;
 		regulator-name = "vcc3v3_pi6c_03";
 		regulator-always-on;
 		regulator-boot-on;
@@ -119,14 +123,10 @@  vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {
 
 	vcc3v3_pcie: vcc3v3-pcie-regulator {
 		compatible = "regulator-fixed";
-		enable-active-high;
-		gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&pcie_enable_h>;
 		regulator-name = "vcc3v3_pcie";
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
-		vin-supply = <&vcc5v0_sys>;
+		vin-supply = <&vcc3v3_pi6c_03>;
 	};
 
 	vcc3v3_sys: vcc3v3-sys-regulator {
@@ -136,7 +136,17 @@  vcc3v3_sys: vcc3v3-sys-regulator {
 		regulator-boot-on;
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
-		vin-supply = <&vcc12v_dcin>;
+		vin-supply = <&vcc5v0_sys>;
+	};
+
+	vcc3v3_wf: vcc3v3-wf-regulator {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3_wf";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		vin-supply = <&vcc3v3_sys>;
 	};
 
 	vcc5v0_sys: vcc5v0-sys-regulator {
@@ -592,9 +602,9 @@  rgmii_phy1: ethernet-phy@0 {
 
 &pcie2x1 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&pcie_reset_h>;
+	pinctrl-0 = <&pcie2x1m1_pins>;
 	reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
-	vpcie3v3-supply = <&vcc3v3_pcie>;
+	vpcie3v3-supply = <&vcc3v3_wf>;
 	status = "okay";
 };
 
@@ -605,7 +615,7 @@  &pcie30phy {
 
 &pcie3x2 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&pcie30x2m1_pins>;
+	pinctrl-0 = <&pcie3x2m1_pins>;
 	reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;
 	vpcie3v3-supply = <&vcc3v3_pcie>;
 	status = "okay";
@@ -643,12 +653,26 @@  led_user_en: led_user_en {
 	};
 
 	pcie {
-		pcie_enable_h: pcie-enable-h {
-			rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
+		pcie2x1m1_pins: pcie2x1m1-pins {
+			rockchip,pins =
+				/* pcie20_clkreqnm1 */
+				<2 RK_PD0 4 &pcfg_pull_none>,
+				/* pcie20_perstnm1 */
+				<3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>,
+				/* pcie20_wakenm1 */
+				<2 RK_PD1 4 &pcfg_pull_none>;
 		};
-
-		pcie_reset_h: pcie-reset-h {
-			rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
+		pcie3x2m1_pins: pcie3x2m1-pins {
+			rockchip,pins =
+				/* pcie30x2_clkreqnm1 */
+				<2 RK_PD4 4 &pcfg_pull_none>,
+				/* pcie30x2_perstnm1 */
+				<2 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>,
+				/* pcie30x2_wakenm1 */
+				<2 RK_PD5 4 &pcfg_pull_none>;
+		};
+		pcie_pwren_h: pcie-pwren-h {
+			rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
 		};
 	};