Skip to contentSkip to conversation

riscv: dts: spacemit: Add PMIC regulators usb pcie

PATCH Superseded Han Gao 4 participants 7 messages Mar 31 – Apr 1

Subsystems (3)

v4 of 10 Superseded Latest is v10 →

lore
Share & tools
lore

Han Gao

author
#0 lore raw

v4 cover riscv: dts: spacemit: Add PMIC regulators usb pcie

Changes in v4:
- Drop reg_dc_in
- Drop vin-supply from reg_vcc_4v
- Rename regulator-name to match schematic net names: vcc4v0, pcie_vcc3v3
- Remove aldo2, aldo3, aldo4, dldo2, dldo3, dldo7 nodes
- Drop usb3_hub_5v, no device consumer
- Drop vdd-supply from USB hub nodes, hub is powered by always-on VCC_5V0
- Drop "identical to BPI-F3" claim from commit message
- Link to v3: https://lore.kernel.org/all/[email protected]/

Han Gao (3):
riscv: dts: spacemit: Enable i2c8 adapter for OrangePi RV2
riscv: dts: spacemit: Define the P1 PMIC regulators for OrangePi RV2
riscv: dts: spacemit: Enable USB3.0/PCIe on OrangePi RV2

 .../boot/dts/spacemit/k1-orangepi-rv2.dts     | 171 ++++++++++++++++++
 1 file changed, 171 insertions(+)

base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
prerequisite-patch-id: ef6e9c7b5854d0c08066b72f9a7868db8c2140eb
prerequisite-patch-id: cfe3800f8c791ec4c63e070af9628e88e0fc31b9
prerequisite-patch-id: b76493e625ae257c8adcd67874178458420e4d47
prerequisite-patch-id: 88e01dc92c83bd88ddeb78891d3088209fed8d6b
prerequisite-patch-id: 60336d10ab8322c70596d0f046b6b5c54bb24b54
prerequisite-patch-id: 68c4d869548687dc115dd91e2ffb8f4c11482d86
prerequisite-patch-id: fdadcf964c2cb3406160edb579d99a8d5695f8e6
prerequisite-patch-id: 73b9e745338b0499b849fa4f7f9508987ab39a59
prerequisite-patch-id: cd26770c2160c3c31a406bd8a6b01ab666180ae0
prerequisite-patch-id: e5dfddc32cefae195692da8b80e19adf086e4ad7
prerequisite-patch-id: 7fd53cbe4977598f26148a4bb1cf692bbdb79a09
prerequisite-patch-id: 96ebac57bb29619b97fe95422206a685825618e9
prerequisite-patch-id: 00fac16b52f60383db3140e2885f3f7f8d14dd1a
prerequisite-patch-id: 3b7a60047b922c48e93599f621cb738856f42354
prerequisite-patch-id: 275c030b963be05dd1041451f539a130ce614277
prerequisite-patch-id: 93963424b0871e64276af0e0b2199b52e29b4603
prerequisite-patch-id: 8383188b1c01ed6280629faaa29c37d699ade241
prerequisite-patch-id: 5f8126b912b924d63d4a1e0c5eb42d212eb0d369
prerequisite-patch-id: e80af628a2e0b5f2eeb3cb1b5e7133d08bdd2c4e
prerequisite-patch-id: 0234a6dca15eb91f98a45a46604ce5b4935048a5

Signature · 1 line
2.47.3
author
#2 lore raw

PATCH v4 2/3 riscv: dts: spacemit: Define the P1 PMIC regulators for OrangePi RV2

Define the DC power input and the 4v power as fixed regulator supplies.

Define the SpacemiT P1 PMIC voltage regulators and their constraints.

---
 .../boot/dts/spacemit/k1-orangepi-rv2.dts     | 97 +++++++++++++++++++
 1 file changed, 97 insertions(+)
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +97 -0
index 93880ba7bdfe..e5e358d49c09 100644
@@ -23,6 +23,15 @@ chosen {
 		stdout-path = "serial0";
 	};
 
+	reg_vcc_4v: regulator-vcc-4v {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc4v0";
+		regulator-min-microvolt = <4000000>;
+		regulator-max-microvolt = <4000000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
+
 	leds {
 		compatible = "gpio-leds";
 
@@ -91,6 +100,94 @@ &i2c8 {
 	pinctrl-0 = <&i2c8_cfg>;
 	pinctrl-names = "default";
 	status = "okay";
+
+	pmic@41 {
+		compatible = "spacemit,p1";
+		reg = <0x41>;
+		interrupts = <64>;
+		vin1-supply = <&reg_vcc_4v>;
+		vin2-supply = <&reg_vcc_4v>;
+		vin3-supply = <&reg_vcc_4v>;
+		vin4-supply = <&reg_vcc_4v>;
+		vin5-supply = <&reg_vcc_4v>;
+		vin6-supply = <&reg_vcc_4v>;
+		aldoin-supply = <&reg_vcc_4v>;
+		dldoin1-supply = <&buck5>;
+		dldoin2-supply = <&buck5>;
+
+		regulators {
+			buck1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck2 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck3_1v8: buck3 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck4 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck5: buck5 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck6 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			aldo1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-boot-on;
+			};
+
+			dldo1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-boot-on;
+			};
+
+			dldo4 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-always-on;
+			};
+
+			dldo5 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			dldo6 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-always-on;
+			};
+		};
+	};
 };
 
 &uart0 {
Signature · 1 line
2.47.3
author
#1 lore raw

PATCH v4 1/3 riscv: dts: spacemit: Enable i2c8 adapter for OrangePi RV2

In reply to Han Gao

The adapter is used to access the SpacemiT P1 PMIC present in this board.

---
 arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts | 6 ++++++
 1 file changed, 6 insertions(+)
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +6 -0
index 7b7331cb3c72..93880ba7bdfe 100644
@@ -87,6 +87,12 @@ &pdma {
 	status = "okay";
 };
 
+&i2c8 {
+	pinctrl-0 = <&i2c8_cfg>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
 &uart0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart0_2_cfg>;
Signature · 1 line
2.47.3
author
#3 lore raw

PATCH v4 3/3 riscv: dts: spacemit: Enable USB3.0/PCIe on OrangePi RV2

In reply to Han Gao

Enable the DWC3 USB 3.0 controller and its associated usbphy2 on the OrangePi RV2 board.

The board utilizes a Genesys Logic GL3523 USB3.0 hub.

Define a 3.3v fixed voltage regulator for PCIe and enable PCIe and PHY-related Device Tree nodes for the OrangePi RV2.

---
 .../boot/dts/spacemit/k1-orangepi-rv2.dts     | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +68 -0
index e5e358d49c09..e93e7f660820 100644
@@ -23,6 +23,15 @@ chosen {
 		stdout-path = "serial0";
 	};
 
+	pcie_vcc_3v3: regulator-pcie-vcc3v3 {
+		compatible = "regulator-fixed";
+		regulator-name = "pcie_vcc3v3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&gpio K1_GPIO(116) GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
 	reg_vcc_4v: regulator-vcc-4v {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc4v0";
@@ -44,6 +53,10 @@ led1 {
 	};
 };
 
+&combo_phy {
+	status = "okay";
+};
+
 &eth0 {
 	phy-handle = <&rgmii0>;
 	phy-mode = "rgmii-id";
@@ -190,8 +203,63 @@ dldo6 {
 	};
 };
 
+&pcie1_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_3_cfg>;
+	status = "okay";
+};
+
+&pcie1_port {
+	phys = <&pcie1_phy>;
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+};
+
+&pcie1 {
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+	status = "okay";
+};
+
+&pcie2_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie2_4_cfg>;
+	status = "okay";
+};
+
+&pcie2_port {
+	phys = <&pcie2_phy>;
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+};
+
+&pcie2 {
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+	status = "okay";
+};
+
 &uart0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart0_2_cfg>;
 	status = "okay";
 };
+
+&usbphy2 {
+	status = "okay";
+};
+
+&usb_dwc3 {
+	dr_mode = "host";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+
+	hub_2_0: hub@1 {
+		compatible = "usb5e3,610";
+		reg = <0x1>;
+		peer-hub = <&hub_3_0>;
+	};
+
+	hub_3_0: hub@2 {
+		compatible = "usb5e3,620";
+		reg = <0x2>;
+		peer-hub = <&hub_2_0>;
+	};
+};
Signature · 1 line
2.47.3
maintainer
#4 lore raw

Re: [PATCH v4 3/3] riscv: dts: spacemit: Enable USB3.0/PCIe on OrangePi RV2

Hi Han,

Quoted 20 lines · Han Gao

Enable the DWC3 USB 3.0 controller and its associated usbphy2 on the OrangePi RV2 board.

The board utilizes a Genesys Logic GL3523 USB3.0 hub.

Define a 3.3v fixed voltage regulator for PCIe and enable PCIe and PHY-related Device Tree nodes for the OrangePi RV2.

---
 .../boot/dts/spacemit/k1-orangepi-rv2.dts     | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +0 -0
index e5e358d49c09..e93e7f660820 100644
@@ -23,6 +23,15 @@ chosen {
 		stdout-path = "serial0";
 	};

arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts chosen { · line 34

Quoted 10 lines
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +9 -0
 
+	pcie_vcc_3v3: regulator-pcie-vcc3v3 {
+		compatible = "regulator-fixed";
+		regulator-name = "pcie_vcc3v3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		gpio = <&gpio K1_GPIO(116) GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+

I've noticed you dropped usb3_hub_5v which actually provide vbus supply.. so in current version, it will leave vbus as undetermined state - whether vbus is on or not will depend on bootloader to enable it or not?

The best choice would be waiting for Marco's onboard-dev vbus patch[1], while in K1 platform, we workaround it by force enabling vbus after power on (set regulator as always-on)..

Quoted 66 lines
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +47 -0
 	reg_vcc_4v: regulator-vcc-4v {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc4v0";
@@ -44,6 +53,10 @@ led1 {
 	};
 };
 
+&combo_phy {
+	status = "okay";
+};
+
 &eth0 {
 	phy-handle = <&rgmii0>;
 	phy-mode = "rgmii-id";
@@ -190,8 +203,63 @@ dldo6 {
 	};
 };
 
+&pcie1_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_3_cfg>;
+	status = "okay";
+};
+
+&pcie1_port {
+	phys = <&pcie1_phy>;
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+};
+
+&pcie1 {
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+	status = "okay";
+};
+
+&pcie2_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie2_4_cfg>;
+	status = "okay";
+};
+
+&pcie2_port {
+	phys = <&pcie2_phy>;
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+};
+
+&pcie2 {
+	vpcie3v3-supply = <&pcie_vcc_3v3>;
+	status = "okay";
+};
+
 &uart0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart0_2_cfg>;
 	status = "okay";
 };
+
+&usbphy2 {
+	status = "okay";
+};
+
+&usb_dwc3 {
+	dr_mode = "host";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+

arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts dldo6 { · line 263

Quoted 10 lines
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +10 -0
+	hub_2_0: hub@1 {
+		compatible = "usb5e3,610";
+		reg = <0x1>;
+		peer-hub = <&hub_3_0>;
+	};
+
+	hub_3_0: hub@2 {
+		compatible = "usb5e3,620";
+		reg = <0x2>;
+		peer-hub = <&hub_2_0>;

Can you confirm all usb ports work fine with this?

Quoted 5 lines
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts +2 -0
+	};
+};
Signature · 1 line
2.47.3
Signature · 1 line
Yixun Lan (dlan)
#6 lore raw
In reply to Han Gao

Hi,

Quoted 5 lines

Changes in v4:
- Drop reg_dc_in
- Drop vin-supply from reg_vcc_4v
- Drop usb3_hub_5v, no device consumer
- Drop vdd-supply from USB hub nodes, hub is powered by always-on VCC_5V0

Perhaps it can be declared that the hub is powered by vcc_5v0:

	hub_3_0: hub@2 {
		compatible = "usb5e3,620";
		reg = <0x2>;
		peer-hub = <&hub_2_0>;
        vdd-supply = <&vcc_5v0>;
	};

The vcc5v0_usb30 regulator is required to enable USB VBUS.

Thanks,
Chukun

Tested-by on v4 3/3
#5 lore raw

Re: [PATCH v4 3/3] riscv: dts: spacemit: Enable USB3.0/PCIe on OrangePi RV2

In reply to Han Gao

Hi Han

Quoted 7 lines · Han Gao

Enable the DWC3 USB 3.0 controller and its associated usbphy2 on the OrangePi RV2 board.

The board utilizes a Genesys Logic GL3523 USB3.0 hub.

Define a 3.3v fixed voltage regulator for PCIe and enable PCIe and PHY-related Device Tree nodes for the OrangePi RV2.

Fantastic! On OrangePi RV2 "lsusb" shows the USB3 host:

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 05e3:0620 Genesys Logic, Inc. GL3523 Hub

I haven't been able to access devices yet, but I guess I'm missing some kernel modules....

And on PCIe, I could read the contents of a Raspberry Pi SSD disk:# dd if=/dev/nvme0n1 of=/dev/null status=progress bs=4M 255730909184 bytes (256 GB, 238 GiB) copied, 664 s, 385 MB/s
61049+1 records in
61049+1 records out
256060514304 bytes (256 GB, 238 GiB) copied, 672.782 s, 381 MB/s

The SSD was freaking hot though :}

I'm excited to have these features in the mainline kernel, hopefully soon. Thanks again,
Michael.

Signature · 3 lines
Root Commit
Embedded Linux Training and Consulting
https://rootcommit.com