arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts | 2 ++ arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts | 2 ++ arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts | 3 +++ arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts | 3 +++ 27 files changed, 73 insertions(+)
The RK860-2/-3 regulators are used on rk3588 boards to supply components
like the big cpu-clusters and npu individually.
Most of these things will be, and in fact most regulator nodes right now are,
always-on - probably nobody has tried completely turning of the big clusters
for example.
This changed with the new NPU driver, which does combined runtime-suspends
with the regulator being tied to the power-domain (it supplies the pd).
If the NPU runtime-suspends while running a load and then starts again
hangs can be observed with messages like
rockchip-pm-domain fd8d8000.power-management:power-controller: failed to set domain 'nputop' on, val=0
Removing the regulator from the domain and instead setting it to always-on
"fixes" the issue, which suggests that the domain is trying to get current
from the regulator before it is ready when it gets turned back on.
And in fact the datasheet for the regulator defines an "Internal soft-start
time". For a target output voltage of 1.0V the _typical_ time to reach at
least 92% of the output is given as 260uS.
So that value is dependent on the target voltage (up to 1.5V for the type)
and also the rest of the board design.
So add a regulator-enable-ramp-delay to all rk860-2/-3 nodes we have in
mainline right now. I've chosen 500uS to be on the safe side, as
260uS is the "typical" value for 1.0V and sadly no max value is given
in the datasheet.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts | 2 ++
arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts | 2 ++
arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts | 3 +++
arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts | 3 +++
27 files changed, 73 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts b/arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts
index e04f21d8c831..a290360c3c49 100644
--- a/arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3582-radxa-e52c.dts
@@ -219,6 +219,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -236,6 +237,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -264,6 +266,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi
index e44125e9a8fb..d44685f7a8dc 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-armsom-lm7.dtsi
@@ -86,6 +86,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -103,6 +104,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts b/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
index ae9274365bed..0d0ff629127a 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
@@ -212,6 +212,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -229,6 +230,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi
index cc37f082adea..9606d3378b95 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5.dtsi
@@ -152,6 +152,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -169,6 +170,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -190,6 +192,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi
index 8a783dc64c0e..27f92fe334c4 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi
@@ -98,6 +98,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -115,6 +116,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi
index 4331cdc70f97..a7e4b0cf44b5 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-fet3588-c.dtsi
@@ -154,6 +154,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -171,6 +172,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -194,6 +196,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi
index 80e16ea4154c..610305dc8b78 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-firefly-core-3588j.dtsi
@@ -56,6 +56,7 @@ vdd_cpu_big0_s0: regulator@42 {
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-name = "vdd_cpu_big0_s0";
@@ -74,6 +75,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -96,6 +98,7 @@ vdd_npu_s0: vdd_npu_mem_s0: regulator@42 {
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-name = "vdd_npu_s0";
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi
index 6726eeb49255..50d3cda8956e 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-firefly-icore-3588q.dtsi
@@ -56,6 +56,7 @@ vdd_cpu_big0_s0: regulator@42 {
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-name = "vdd_cpu_big0_s0";
@@ -73,6 +74,7 @@ vdd_cpu_big1_s0: regulator@43 {
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-name = "vdd_cpu_big1_s0";
@@ -96,6 +98,7 @@ vdd_npu_s0: vdd_npu_mem_s0: regulator@42 {
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-name = "vdd_npu_s0";
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi
index af431fdcbea7..070c9930dd30 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-friendlyelec-cm3588.dtsi
@@ -146,6 +146,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -163,6 +164,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -184,6 +186,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts b/arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts
index 73d8ce4fde2b..f871c99e5b9a 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-h96-max-v58.dts
@@ -241,6 +241,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -258,6 +259,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
index ebe77cdd24e8..f13ecd02dafa 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
@@ -394,6 +394,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
@@ -411,6 +412,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -505,6 +507,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi
index 3d8b6f0c5541..4cb4fe409cd4 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-nanopc-t6.dtsi
@@ -411,6 +411,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -428,6 +429,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -449,6 +451,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi
index 91d56c34a1e4..e8e66e72ea54 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi
@@ -230,6 +230,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -247,6 +248,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
index 7de17117df7a..ee0e49643acc 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts
@@ -307,6 +307,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -324,6 +325,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -347,6 +349,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi
index 6052787d2560..2d91fa8185a8 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dtsi
@@ -281,6 +281,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -298,6 +299,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
index c4933a08dd1e..1546a81cca50 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
@@ -198,6 +198,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
@@ -270,6 +271,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -287,6 +289,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts b/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
index 5a428e00ab93..29e6e730548b 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
@@ -232,6 +232,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -249,6 +250,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
index 60ad272982ad..189bce24e656 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
@@ -133,6 +133,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -150,6 +151,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -173,6 +175,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts b/arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts
index 8b717c4017a4..c95a1386d61b 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts
@@ -251,6 +251,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -268,6 +269,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -289,6 +291,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts b/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts
index 873a2bd6a6de..009b6a0579e7 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts
@@ -470,6 +470,7 @@ vdd_cpu_big0_s0: regulator@42 {
compatible = "rockchip,rk8602";
reg = <0x42>;
fcs,suspend-voltage-selector = <1>;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <1050000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_cpu_big0_s0";
@@ -485,6 +486,7 @@ vdd_cpu_big1_s0: regulator@43 {
compatible = "rockchip,rk8603", "rockchip,rk8602";
reg = <0x43>;
fcs,suspend-voltage-selector = <1>;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <1050000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_cpu_big1_s0";
@@ -504,6 +506,7 @@ vdd_npu_s0: regulator@42 {
compatible = "rockchip,rk8602";
reg = <0x42>;
fcs,suspend-voltage-selector = <1>;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <950000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_npu_s0";
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts b/arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts
index 4ec7bc4a9e96..f9896bce86f7 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts
@@ -296,6 +296,7 @@ vdd_cpu_big0_s0: regulator@42 {
reg = <0x42>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <1050000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_cpu_big0_s0";
@@ -313,6 +314,7 @@ vdd_cpu_big1_s0: regulator@43 {
reg = <0x43>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <1050000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_cpu_big1_s0";
@@ -334,6 +336,7 @@ vdd_npu_s0: regulator@42 {
reg = <0x42>;
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-max-microvolt = <950000>;
regulator-min-microvolt = <550000>;
regulator-name = "vdd_npu_s0";
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts b/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
index 2c22abaf40a8..caafb142ae4f 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
@@ -233,6 +233,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -250,6 +251,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi
index fbf062ec3bf1..9d87d129f00c 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-nanopi-r6.dtsi
@@ -267,6 +267,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -284,6 +285,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -303,6 +305,7 @@ vdd_npu_s0: regulator@42 {
reg = <0x42>;
fcs,suspend-voltage-selector = <1>;
regulator-name = "vdd_npu_s0";
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts b/arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts
index a72063c55140..d081adaf7be4 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-odroid-m2.dts
@@ -280,6 +280,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -297,6 +298,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -318,6 +320,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi
index 4fedc50cce8c..afbf69e23cb0 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5.dtsi
@@ -217,6 +217,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -234,6 +235,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -255,6 +257,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
index f894742b1ebe..b4a302c97a50 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
@@ -195,6 +195,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -212,6 +213,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -233,6 +235,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
index dd7317bab613..072dbf877fec 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5c.dts
@@ -294,6 +294,7 @@ vdd_cpu_big0_s0: regulator@42 {
regulator-name = "vdd_cpu_big0_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -311,6 +312,7 @@ vdd_cpu_big1_s0: regulator@43 {
regulator-name = "vdd_cpu_big1_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <1050000>;
regulator-ramp-delay = <2300>;
@@ -339,6 +341,7 @@ vdd_npu_s0: regulator@42 {
regulator-name = "vdd_npu_s0";
regulator-always-on;
regulator-boot-on;
+ regulator-enable-ramp-delay = <500>;
regulator-min-microvolt = <550000>;
regulator-max-microvolt = <950000>;
regulator-ramp-delay = <2300>;
--
2.47.2
Hi Heiko, On 6/4/25 10:24 PM, Heiko Stuebner wrote: > The RK860-2/-3 regulators are used on rk3588 boards to supply components > like the big cpu-clusters and npu individually. > > Most of these things will be, and in fact most regulator nodes right now are, > always-on - probably nobody has tried completely turning of the big clusters > for example. > This is a bit of a confusing wording here. If most things will be (and are) always-on, then the ramp-up typically shouldn't be an issue I assume? I'm not too familiar with the regulator subsystem but I guess for the first initial enable this could be an issue? > This changed with the new NPU driver, which does combined runtime-suspends > with the regulator being tied to the power-domain (it supplies the pd). > > If the NPU runtime-suspends while running a load and then starts again > hangs can be observed with messages like > > rockchip-pm-domain fd8d8000.power-management:power-controller: failed to set domain 'nputop' on, val=0 > > Removing the regulator from the domain and instead setting it to always-on > "fixes" the issue, which suggests that the domain is trying to get current > from the regulator before it is ready when it gets turned back on. > If I'm not mistaken, this is also misleading as nothing currently uses that (NPU support not merged yet and most if not all NPU regulators currently are always-on so typically not impacted by this issue). I assume this will be an issue the moment we add support for suspending the NPU regulator, which would anyway require modification of the various DT. Is that correct? > And in fact the datasheet for the regulator defines an "Internal soft-start > time". For a target output voltage of 1.0V the _typical_ time to reach at > least 92% of the output is given as 260uS. > Indeed. Now looking at the existing Device Trees, it seems some set the ramp-up delay already, but to 2300 and not 500 like suggested here. Maybe it'd be safer to go for 2300 by default then? This could also be the typical "this Device Tree got merged, we use the same node, so we simply copy it" case and not really backed by anything (though I would hope the Toybrick and Rockchip evaluation boards values are based on *something* since Rockchip would (could) have done measurements for those?). > So that value is dependent on the target voltage (up to 1.5V for the type) > and also the rest of the board design. > > So add a regulator-enable-ramp-delay to all rk860-2/-3 nodes we have in Maybe mention that there's currently no rk8601 node upstream, and the only rk8600 (arch/arm64/boot/dts/rockchip/rk3566-radxa-zero-3.dtsi) already has a ramp-up delay configured. Otherwise reading this I'm wondering why the rk860-0 and rk860-1 while being handled by the same datasheet are implicitly excluded from this change. > mainline right now. I've chosen 500uS to be on the safe side, as > 260uS is the "typical" value for 1.0V and sadly no max value is given > in the datasheet. > Reading the rk808 regulator driver... maybe we should also set the typical delay as default in the fan53555.c driver? See rk805_reg which sets the enable_time for some (typically the LDO with 400 and the DCDC at 0). I assume those can be overridden from the DT anyway, but at least we would have some decently safe defaults? If we do not do this, then we should probably force the presence of regulator-ramp-delay property for the rk860x DT binding so we don't forget for future Device Trees? Cheers, Quentin
Am Donnerstag, 5. Juni 2025, 10:57:13 Mitteleuropäische Sommerzeit schrieb Quentin Schulz: > Hi Heiko, > > On 6/4/25 10:24 PM, Heiko Stuebner wrote: > > The RK860-2/-3 regulators are used on rk3588 boards to supply components > > like the big cpu-clusters and npu individually. > > > > Most of these things will be, and in fact most regulator nodes right now are, > > always-on - probably nobody has tried completely turning of the big clusters > > for example. > > > > This is a bit of a confusing wording here. If most things will be (and > are) always-on, then the ramp-up typically shouldn't be an issue I > assume? I'm not too familiar with the regulator subsystem but I guess > for the first initial enable this could be an issue? The regulators normally are all boot-on, so we normally start with all of them running. But I'll try to improve the wording overall :-) . > > This changed with the new NPU driver, which does combined runtime-suspends > > with the regulator being tied to the power-domain (it supplies the pd). > > > > If the NPU runtime-suspends while running a load and then starts again > > hangs can be observed with messages like > > > > rockchip-pm-domain fd8d8000.power-management:power-controller: failed to set domain 'nputop' on, val=0 > > > > Removing the regulator from the domain and instead setting it to always-on > > "fixes" the issue, which suggests that the domain is trying to get current > > from the regulator before it is ready when it gets turned back on. > > > > If I'm not mistaken, this is also misleading as nothing currently uses > that (NPU support not merged yet and most if not all NPU regulators > currently are always-on so typically not impacted by this issue). > > I assume this will be an issue the moment we add support for suspending > the NPU regulator, which would anyway require modification of the > various DT. Is that correct? Only when the regulator is not set to always-on, so gets disabled by runtime-pm. But yes, the npu driver was triggering this quite easily. > > And in fact the datasheet for the regulator defines an "Internal soft-start > > time". For a target output voltage of 1.0V the _typical_ time to reach at > > least 92% of the output is given as 260uS. > > > > Indeed. Now looking at the existing Device Trees, it seems some set the > ramp-up delay already, but to 2300 and not 500 like suggested here. > Maybe it'd be safer to go for 2300 by default then? enable-ramp-delay is a totally different beast than the ramp-delay. ramp-delay is needed when changing the running voltage and uses a unit of "uV/us", so microvolt per microsecond ... where the enable-ramp-delay is the one for enabling the regulator and uses uS. > > So that value is dependent on the target voltage (up to 1.5V for the type) > > and also the rest of the board design. > > > > So add a regulator-enable-ramp-delay to all rk860-2/-3 nodes we have in > > Maybe mention that there's currently no rk8601 node upstream, and the > only rk8600 (arch/arm64/boot/dts/rockchip/rk3566-radxa-zero-3.dtsi) > already has a ramp-up delay configured. Otherwise reading this I'm > wondering why the rk860-0 and rk860-1 while being handled by the same > datasheet are implicitly excluded from this change. in turn with the above paragraph, I should probably check again for the Radxa, because that variant has the same enable-ramp-delay. > > mainline right now. I've chosen 500uS to be on the safe side, as > > 260uS is the "typical" value for 1.0V and sadly no max value is given > > in the datasheet. > > > > Reading the rk808 regulator driver... maybe we should also set the > typical delay as default in the fan53555.c driver? See rk805_reg which > sets the enable_time for some (typically the LDO with 400 and the DCDC > at 0). I assume those can be overridden from the DT anyway, but at least > we would have some decently safe defaults? > > If we do not do this, then we should probably force the presence of > regulator-ramp-delay property for the rk860x DT binding so we don't > forget for future Device Trees? that is scope-creep (rk808 != rk860) ... but I find the idea of trying to set the enable-ramp-delay as required for the rk860-x interesting :-) . Heiko
Hi Heiko, On 6/5/25 11:09 AM, Heiko Stübner wrote: > Am Donnerstag, 5. Juni 2025, 10:57:13 Mitteleuropäische Sommerzeit schrieb Quentin Schulz: >> Hi Heiko, >> >> On 6/4/25 10:24 PM, Heiko Stuebner wrote: [...] >>> And in fact the datasheet for the regulator defines an "Internal soft-start >>> time". For a target output voltage of 1.0V the _typical_ time to reach at >>> least 92% of the output is given as 260uS. >>> >> >> Indeed. Now looking at the existing Device Trees, it seems some set the >> ramp-up delay already, but to 2300 and not 500 like suggested here. >> Maybe it'd be safer to go for 2300 by default then? > > enable-ramp-delay is a totally different beast than the ramp-delay. > ramp-delay is needed when changing the running voltage and uses a unit > of "uV/us", so microvolt per microsecond ... where the enable-ramp-delay > is the one for enabling the regulator and uses uS. Thanks for the explanation. [...] >>> mainline right now. I've chosen 500uS to be on the safe side, as >>> 260uS is the "typical" value for 1.0V and sadly no max value is given >>> in the datasheet. >>> >> >> Reading the rk808 regulator driver... maybe we should also set the >> typical delay as default in the fan53555.c driver? See rk805_reg which >> sets the enable_time for some (typically the LDO with 400 and the DCDC >> at 0). I assume those can be overridden from the DT anyway, but at least >> we would have some decently safe defaults? >> >> If we do not do this, then we should probably force the presence of >> regulator-ramp-delay property for the rk860x DT binding so we don't >> forget for future Device Trees? > > that is scope-creep (rk808 != rk860) ... but I find the idea of trying to I was just hinting at the possibility to set a default enable_time if one's missing from the Device Tree because the rk808 driver seems to be doing something like that. rk860-x is indeed supported by a different driver, which doesn't set this by default, hence my suggestion :) > set the enable-ramp-delay as required for the rk860-x interesting :-) . > But incompatible with the "default in driver" approach :) So one or the other :) Cheers, Quentin
On 6/5/25 10:57 AM, Quentin Schulz wrote: > Hi Heiko, > > On 6/4/25 10:24 PM, Heiko Stuebner wrote: >> The RK860-2/-3 regulators are used on rk3588 boards to supply components >> like the big cpu-clusters and npu individually. >> >> Most of these things will be, and in fact most regulator nodes right >> now are, >> always-on - probably nobody has tried completely turning of the big >> clusters >> for example. >> > > This is a bit of a confusing wording here. If most things will be (and > are) always-on, then the ramp-up typically shouldn't be an issue I > assume? I'm not too familiar with the regulator subsystem but I guess > for the first initial enable this could be an issue? > >> This changed with the new NPU driver, which does combined runtime- >> suspends >> with the regulator being tied to the power-domain (it supplies the pd). >> >> If the NPU runtime-suspends while running a load and then starts again >> hangs can be observed with messages like >> >> rockchip-pm-domain fd8d8000.power-management:power-controller: >> failed to set domain 'nputop' on, val=0 >> >> Removing the regulator from the domain and instead setting it to >> always-on >> "fixes" the issue, which suggests that the domain is trying to get >> current >> from the regulator before it is ready when it gets turned back on. >> > > If I'm not mistaken, this is also misleading as nothing currently uses > that (NPU support not merged yet and most if not all NPU regulators > currently are always-on so typically not impacted by this issue). > > I assume this will be an issue the moment we add support for suspending > the NPU regulator, which would anyway require modification of the > various DT. Is that correct? > >> And in fact the datasheet for the regulator defines an "Internal soft- >> start >> time". For a target output voltage of 1.0V the _typical_ time to reach at >> least 92% of the output is given as 260uS. >> > > Indeed. Now looking at the existing Device Trees, it seems some set the > ramp-up delay already, but to 2300 and not 500 like suggested here. > Maybe it'd be safer to go for 2300 by default then? This could also be > the typical "this Device Tree got merged, we use the same node, so we > simply copy it" case and not really backed by anything (though I would > hope the Toybrick and Rockchip evaluation boards values are based on > *something* since Rockchip would (could) have done measurements for > those?). > I have been told by you in private that I mixed regulator-enable-ramp-delay and regulator-ramp-delay for that, so just acknowledging it publicly :) You can ignore the above paragraph :) >> So that value is dependent on the target voltage (up to 1.5V for the >> type) >> and also the rest of the board design. >> >> So add a regulator-enable-ramp-delay to all rk860-2/-3 nodes we have in > > Maybe mention that there's currently no rk8601 node upstream, and the > only rk8600 (arch/arm64/boot/dts/rockchip/rk3566-radxa-zero-3.dtsi) Based on the above revelation, we should add this enable-ramp-delay to that DT too I believe. > already has a ramp-up delay configured. Otherwise reading this I'm > wondering why the rk860-0 and rk860-1 while being handled by the same > datasheet are implicitly excluded from this change. > >> mainline right now. I've chosen 500uS to be on the safe side, as >> 260uS is the "typical" value for 1.0V and sadly no max value is given >> in the datasheet. >> > > Reading the rk808 regulator driver... maybe we should also set the > typical delay as default in the fan53555.c driver? See rk805_reg which > sets the enable_time for some (typically the LDO with 400 and the DCDC > at 0). I assume those can be overridden from the DT anyway, but at least > we would have some decently safe defaults? > > If we do not do this, then we should probably force the presence of > regulator-ramp-delay property for the rk860x DT binding so we don't > forget for future Device Trees? > Read regulator-enable-ramp-delay here instead but still applicable. Quentin
© 2016 - 2025 Red Hat, Inc.