759 lines
24 KiB
Diff
759 lines
24 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Charkov <alchark@gmail.com>
|
|
Date: Mon, 6 May 2024 13:36:32 +0400
|
|
Subject: arm64: dts: rockchip: add thermal zones information on RK3588
|
|
|
|
This includes the necessary device tree data to allow thermal
|
|
monitoring on RK3588(s) using the on-chip TSADC device, along with
|
|
trip points for automatic thermal management.
|
|
|
|
Each of the CPU clusters (one for the little cores and two for
|
|
the big cores) get a passive cooling trip point at 85C, which
|
|
will trigger DVFS throttling of the respective cluster upon
|
|
reaching a high temperature condition.
|
|
|
|
All zones also have a critical trip point at 115C, which will
|
|
trigger a reset.
|
|
|
|
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
|
---
|
|
arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 147 ++++++++++
|
|
1 file changed, 147 insertions(+)
|
|
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
@@ -10,6 +10,7 @@
|
|
#include <dt-bindings/reset/rockchip,rk3588-cru.h>
|
|
#include <dt-bindings/phy/phy.h>
|
|
#include <dt-bindings/ata/ahci.h>
|
|
+#include <dt-bindings/thermal/thermal.h>
|
|
|
|
/ {
|
|
compatible = "rockchip,rk3588";
|
|
@@ -2368,6 +2369,152 @@ pwm15: pwm@febf0030 {
|
|
status = "disabled";
|
|
};
|
|
|
|
+ thermal_zones: thermal-zones {
|
|
+ /* sensor near the center of the SoC */
|
|
+ package_thermal: package-thermal {
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 0>;
|
|
+
|
|
+ trips {
|
|
+ package_crit: package-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ /* sensor between A76 cores 0 and 1 */
|
|
+ bigcore0_thermal: bigcore0-thermal {
|
|
+ polling-delay-passive = <100>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 1>;
|
|
+
|
|
+ trips {
|
|
+ bigcore0_alert: bigcore0-alert {
|
|
+ temperature = <85000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "passive";
|
|
+ };
|
|
+ bigcore0_crit: bigcore0-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ cooling-maps {
|
|
+ map0 {
|
|
+ trip = <&bigcore0_alert>;
|
|
+ cooling-device =
|
|
+ <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ /* sensor between A76 cores 2 and 3 */
|
|
+ bigcore2_thermal: bigcore2-thermal {
|
|
+ polling-delay-passive = <100>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 2>;
|
|
+
|
|
+ trips {
|
|
+ bigcore2_alert: bigcore2-alert {
|
|
+ temperature = <85000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "passive";
|
|
+ };
|
|
+ bigcore2_crit: bigcore2-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ cooling-maps {
|
|
+ map0 {
|
|
+ trip = <&bigcore2_alert>;
|
|
+ cooling-device =
|
|
+ <&cpu_b2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu_b3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ /* sensor between the four A55 cores */
|
|
+ little_core_thermal: littlecore-thermal {
|
|
+ polling-delay-passive = <100>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 3>;
|
|
+
|
|
+ trips {
|
|
+ littlecore_alert: littlecore-alert {
|
|
+ temperature = <85000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "passive";
|
|
+ };
|
|
+ littlecore_crit: littlecore-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ cooling-maps {
|
|
+ map0 {
|
|
+ trip = <&littlecore_alert>;
|
|
+ cooling-device =
|
|
+ <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ /* sensor near the PD_CENTER power domain */
|
|
+ center_thermal: center-thermal {
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 4>;
|
|
+
|
|
+ trips {
|
|
+ center_crit: center-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ gpu_thermal: gpu-thermal {
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 5>;
|
|
+
|
|
+ trips {
|
|
+ gpu_crit: gpu-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ npu_thermal: npu-thermal {
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&tsadc 6>;
|
|
+
|
|
+ trips {
|
|
+ npu_crit: npu-crit {
|
|
+ temperature = <115000>;
|
|
+ hysteresis = <0>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
tsadc: tsadc@fec00000 {
|
|
compatible = "rockchip,rk3588-tsadc";
|
|
reg = <0x0 0xfec00000 0x0 0x400>;
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Charkov <alchark@gmail.com>
|
|
Date: Mon, 6 May 2024 13:36:33 +0400
|
|
Subject: arm64: dts: rockchip: enable thermal management on all RK3588 boards
|
|
|
|
This enables the on-chip thermal monitoring sensor (TSADC) on all
|
|
RK3588(s) boards that don't have it enabled yet. It provides temperature
|
|
monitoring for the SoC and emergency thermal shutdowns, and is thus
|
|
important to have in place before CPU DVFS is enabled, as high CPU
|
|
operating performance points can overheat the chip quickly in the
|
|
absence of thermal management.
|
|
|
|
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
|
---
|
|
arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-ok3588-c.dts | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi | 4 ++++
|
|
arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts | 4 ++++
|
|
8 files changed, 32 insertions(+)
|
|
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts b/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
|
|
@@ -673,6 +673,10 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&u2phy0 {
|
|
status = "okay";
|
|
};
|
|
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 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-edgeble-neu6a-common.dtsi
|
|
@@ -466,3 +466,7 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
};
|
|
+
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts b/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
@@ -1131,6 +1131,10 @@ &sata0 {
|
|
status = "okay";
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&u2phy0 {
|
|
status = "okay";
|
|
};
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-ok3588-c.dts b/arch/arm64/boot/dts/rockchip/rk3588-ok3588-c.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-ok3588-c.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-ok3588-c.dts
|
|
@@ -376,6 +376,10 @@ &sdmmc {
|
|
status = "okay";
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&u2phy2 {
|
|
status = "okay";
|
|
};
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
|
|
@@ -743,6 +743,10 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&uart2 {
|
|
pinctrl-0 = <&uart2m0_xfer>;
|
|
status = "okay";
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts b/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
|
|
@@ -648,6 +648,10 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&u2phy2 {
|
|
status = "okay";
|
|
};
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
|
|
@@ -601,6 +601,10 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&uart2 {
|
|
pinctrl-0 = <&uart2m0_xfer>;
|
|
status = "okay";
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
|
|
@@ -699,6 +699,10 @@ regulator-state-mem {
|
|
};
|
|
};
|
|
|
|
+&tsadc {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&u2phy0 {
|
|
status = "okay";
|
|
};
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Charkov <alchark@gmail.com>
|
|
Date: Mon, 6 May 2024 13:36:34 +0400
|
|
Subject: arm64: dts: rockchip: add passive GPU cooling on RK3588
|
|
|
|
As the GPU support on RK3588 has been merged upstream, along with OPP
|
|
values, add a corresponding cooling map for passive cooling using the GPU.
|
|
|
|
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
|
---
|
|
arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 14 +++++++++-
|
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
@@ -2487,17 +2487,29 @@ center_crit: center-crit {
|
|
};
|
|
|
|
gpu_thermal: gpu-thermal {
|
|
- polling-delay-passive = <0>;
|
|
+ polling-delay-passive = <100>;
|
|
polling-delay = <0>;
|
|
thermal-sensors = <&tsadc 5>;
|
|
|
|
trips {
|
|
+ gpu_alert: gpu-alert {
|
|
+ temperature = <85000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "passive";
|
|
+ };
|
|
gpu_crit: gpu-crit {
|
|
temperature = <115000>;
|
|
hysteresis = <0>;
|
|
type = "critical";
|
|
};
|
|
};
|
|
+ cooling-maps {
|
|
+ map0 {
|
|
+ trip = <&gpu_alert>;
|
|
+ cooling-device =
|
|
+ <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ };
|
|
};
|
|
|
|
npu_thermal: npu-thermal {
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Charkov <alchark@gmail.com>
|
|
Date: Mon, 6 May 2024 13:36:36 +0400
|
|
Subject: arm64: dts: rockchip: Add CPU/memory regulator coupling for RK3588
|
|
|
|
RK3588 chips allow for their CPU cores to be powered by a different
|
|
supply vs. their corresponding memory interfaces, and two of the
|
|
boards currently upstream do that (EVB1 and QuartzPro64).
|
|
|
|
The voltage of the memory interface though has to match that of the
|
|
CPU cores that use it, which downstream kernels achieve by the means
|
|
of a custom cpufreq driver which adjusts both at the same time.
|
|
|
|
It seems that regulator coupling is a more appropriate generic
|
|
interface for it, so this patch introduces coupling to affected
|
|
device trees to ensure that memory interface voltage is also updated
|
|
whenever cpufreq switches between CPU OPPs.
|
|
|
|
Note that other boards, such as Radxa Rock 5B, define both the CPU
|
|
and memory interface regulators as aliases to the same DT node, so
|
|
this doesn't apply there.
|
|
|
|
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
|
---
|
|
arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts | 12 ++++++++++
|
|
arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts | 12 ++++++++++
|
|
2 files changed, 24 insertions(+)
|
|
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts b/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts
|
|
@@ -878,6 +878,8 @@ regulators {
|
|
vdd_cpu_big1_s0: dcdc-reg1 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big1_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -890,6 +892,8 @@ regulator-state-mem {
|
|
vdd_cpu_big0_s0: dcdc-reg2 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big0_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -902,6 +906,8 @@ regulator-state-mem {
|
|
vdd_cpu_lit_s0: dcdc-reg3 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_lit_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <950000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -926,6 +932,8 @@ regulator-state-mem {
|
|
vdd_cpu_big1_mem_s0: dcdc-reg5 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big1_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -939,6 +947,8 @@ regulator-state-mem {
|
|
vdd_cpu_big0_mem_s0: dcdc-reg6 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big0_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -963,6 +973,8 @@ regulator-state-mem {
|
|
vdd_cpu_lit_mem_s0: dcdc-reg8 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_lit_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <950000>;
|
|
regulator-ramp-delay = <12500>;
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts b/arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts
|
|
@@ -833,6 +833,8 @@ vdd_cpu_big1_s0: dcdc-reg1 {
|
|
regulator-name = "vdd_cpu_big1_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big1_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -846,6 +848,8 @@ vdd_cpu_big0_s0: dcdc-reg2 {
|
|
regulator-name = "vdd_cpu_big0_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big0_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -859,6 +863,8 @@ vdd_cpu_lit_s0: dcdc-reg3 {
|
|
regulator-name = "vdd_cpu_lit_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_lit_mem_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <550000>;
|
|
regulator-max-microvolt = <950000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -885,6 +891,8 @@ vdd_cpu_big1_mem_s0: dcdc-reg5 {
|
|
regulator-name = "vdd_cpu_big1_mem_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big1_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -899,6 +907,8 @@ vdd_cpu_big0_mem_s0: dcdc-reg6 {
|
|
regulator-name = "vdd_cpu_big0_mem_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_big0_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <1050000>;
|
|
regulator-ramp-delay = <12500>;
|
|
@@ -925,6 +935,8 @@ vdd_cpu_lit_mem_s0: dcdc-reg8 {
|
|
regulator-name = "vdd_cpu_lit_mem_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
+ regulator-coupled-with = <&vdd_cpu_lit_s0>;
|
|
+ regulator-coupled-max-spread = <10000>;
|
|
regulator-min-microvolt = <675000>;
|
|
regulator-max-microvolt = <950000>;
|
|
regulator-ramp-delay = <12500>;
|
|
--
|
|
Armbian
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Alexey Charkov <alchark@gmail.com>
|
|
Date: Mon, 6 May 2024 13:36:37 +0400
|
|
Subject: arm64: dts: rockchip: Add OPP data for CPU cores on RK3588
|
|
|
|
By default the CPUs on RK3588 start up in a conservative performance
|
|
mode. Add frequency and voltage mappings to the device tree to enable
|
|
dynamic scaling via cpufreq.
|
|
|
|
OPP values are adapted from Radxa's downstream kernel for Rock 5B [1],
|
|
stripping them down to the minimum frequency and voltage combinations
|
|
as expected by the generic upstream cpufreq-dt driver, and also dropping
|
|
those OPPs that don't differ in voltage but only in frequency (keeping
|
|
the top frequency OPP in each case).
|
|
|
|
Note that this patch ignores voltage scaling for the CPU memory
|
|
interface which the downstream kernel does through a custom cpufreq
|
|
driver, and which is why the downstream version has two sets of voltage
|
|
values for each OPP (the second one being meant for the memory
|
|
interface supply regulator). This is done instead via regulator
|
|
coupling between CPU and memory interface supplies on affected boards.
|
|
|
|
This has been tested on Rock 5B with u-boot 2023.11 compiled from
|
|
Collabora's integration tree [2] with binary bl31 and appears to be
|
|
stable both under active cooling and passive cooling (with throttling)
|
|
|
|
[1] https://github.com/radxa/kernel/blob/stable-5.10-rock5/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
[2] https://gitlab.collabora.com/hardware-enablement/rockchip-3588/u-boot
|
|
|
|
Signed-off-by: Alexey Charkov <alchark@gmail.com>
|
|
---
|
|
arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 122 ++++++++++
|
|
1 file changed, 122 insertions(+)
|
|
|
|
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
index 111111111111..222222222222 100644
|
|
--- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
+++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
|
|
@@ -97,6 +97,7 @@ cpu_l0: cpu@0 {
|
|
clocks = <&scmi_clk SCMI_CLK_CPUL>;
|
|
assigned-clocks = <&scmi_clk SCMI_CLK_CPUL>;
|
|
assigned-clock-rates = <816000000>;
|
|
+ operating-points-v2 = <&cluster0_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <32768>;
|
|
i-cache-line-size = <64>;
|
|
@@ -116,6 +117,7 @@ cpu_l1: cpu@100 {
|
|
enable-method = "psci";
|
|
capacity-dmips-mhz = <530>;
|
|
clocks = <&scmi_clk SCMI_CLK_CPUL>;
|
|
+ operating-points-v2 = <&cluster0_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <32768>;
|
|
i-cache-line-size = <64>;
|
|
@@ -135,6 +137,7 @@ cpu_l2: cpu@200 {
|
|
enable-method = "psci";
|
|
capacity-dmips-mhz = <530>;
|
|
clocks = <&scmi_clk SCMI_CLK_CPUL>;
|
|
+ operating-points-v2 = <&cluster0_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <32768>;
|
|
i-cache-line-size = <64>;
|
|
@@ -154,6 +157,7 @@ cpu_l3: cpu@300 {
|
|
enable-method = "psci";
|
|
capacity-dmips-mhz = <530>;
|
|
clocks = <&scmi_clk SCMI_CLK_CPUL>;
|
|
+ operating-points-v2 = <&cluster0_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <32768>;
|
|
i-cache-line-size = <64>;
|
|
@@ -175,6 +179,7 @@ cpu_b0: cpu@400 {
|
|
clocks = <&scmi_clk SCMI_CLK_CPUB01>;
|
|
assigned-clocks = <&scmi_clk SCMI_CLK_CPUB01>;
|
|
assigned-clock-rates = <816000000>;
|
|
+ operating-points-v2 = <&cluster1_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <65536>;
|
|
i-cache-line-size = <64>;
|
|
@@ -194,6 +199,7 @@ cpu_b1: cpu@500 {
|
|
enable-method = "psci";
|
|
capacity-dmips-mhz = <1024>;
|
|
clocks = <&scmi_clk SCMI_CLK_CPUB01>;
|
|
+ operating-points-v2 = <&cluster1_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <65536>;
|
|
i-cache-line-size = <64>;
|
|
@@ -215,6 +221,7 @@ cpu_b2: cpu@600 {
|
|
clocks = <&scmi_clk SCMI_CLK_CPUB23>;
|
|
assigned-clocks = <&scmi_clk SCMI_CLK_CPUB23>;
|
|
assigned-clock-rates = <816000000>;
|
|
+ operating-points-v2 = <&cluster2_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <65536>;
|
|
i-cache-line-size = <64>;
|
|
@@ -234,6 +241,7 @@ cpu_b3: cpu@700 {
|
|
enable-method = "psci";
|
|
capacity-dmips-mhz = <1024>;
|
|
clocks = <&scmi_clk SCMI_CLK_CPUB23>;
|
|
+ operating-points-v2 = <&cluster2_opp_table>;
|
|
cpu-idle-states = <&CPU_SLEEP>;
|
|
i-cache-size = <65536>;
|
|
i-cache-line-size = <64>;
|
|
@@ -348,6 +356,120 @@ l3_cache: l3-cache {
|
|
};
|
|
};
|
|
|
|
+ cluster0_opp_table: opp-table-cluster0 {
|
|
+ compatible = "operating-points-v2";
|
|
+ opp-shared;
|
|
+
|
|
+ opp-1008000000 {
|
|
+ opp-hz = /bits/ 64 <1008000000>;
|
|
+ opp-microvolt = <675000 675000 950000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1200000000 {
|
|
+ opp-hz = /bits/ 64 <1200000000>;
|
|
+ opp-microvolt = <712500 712500 950000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1416000000 {
|
|
+ opp-hz = /bits/ 64 <1416000000>;
|
|
+ opp-microvolt = <762500 762500 950000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ opp-suspend;
|
|
+ };
|
|
+ opp-1608000000 {
|
|
+ opp-hz = /bits/ 64 <1608000000>;
|
|
+ opp-microvolt = <850000 850000 950000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1800000000 {
|
|
+ opp-hz = /bits/ 64 <1800000000>;
|
|
+ opp-microvolt = <950000 950000 950000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ cluster1_opp_table: opp-table-cluster1 {
|
|
+ compatible = "operating-points-v2";
|
|
+ opp-shared;
|
|
+
|
|
+ opp-1200000000 {
|
|
+ opp-hz = /bits/ 64 <1200000000>;
|
|
+ opp-microvolt = <675000 675000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1416000000 {
|
|
+ opp-hz = /bits/ 64 <1416000000>;
|
|
+ opp-microvolt = <725000 725000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1608000000 {
|
|
+ opp-hz = /bits/ 64 <1608000000>;
|
|
+ opp-microvolt = <762500 762500 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1800000000 {
|
|
+ opp-hz = /bits/ 64 <1800000000>;
|
|
+ opp-microvolt = <850000 850000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2016000000 {
|
|
+ opp-hz = /bits/ 64 <2016000000>;
|
|
+ opp-microvolt = <925000 925000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2208000000 {
|
|
+ opp-hz = /bits/ 64 <2208000000>;
|
|
+ opp-microvolt = <987500 987500 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2400000000 {
|
|
+ opp-hz = /bits/ 64 <2400000000>;
|
|
+ opp-microvolt = <1000000 1000000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ cluster2_opp_table: opp-table-cluster2 {
|
|
+ compatible = "operating-points-v2";
|
|
+ opp-shared;
|
|
+
|
|
+ opp-1200000000 {
|
|
+ opp-hz = /bits/ 64 <1200000000>;
|
|
+ opp-microvolt = <675000 675000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1416000000 {
|
|
+ opp-hz = /bits/ 64 <1416000000>;
|
|
+ opp-microvolt = <725000 725000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1608000000 {
|
|
+ opp-hz = /bits/ 64 <1608000000>;
|
|
+ opp-microvolt = <762500 762500 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-1800000000 {
|
|
+ opp-hz = /bits/ 64 <1800000000>;
|
|
+ opp-microvolt = <850000 850000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2016000000 {
|
|
+ opp-hz = /bits/ 64 <2016000000>;
|
|
+ opp-microvolt = <925000 925000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2208000000 {
|
|
+ opp-hz = /bits/ 64 <2208000000>;
|
|
+ opp-microvolt = <987500 987500 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ opp-2400000000 {
|
|
+ opp-hz = /bits/ 64 <2400000000>;
|
|
+ opp-microvolt = <1000000 1000000 1000000>;
|
|
+ clock-latency-ns = <40000>;
|
|
+ };
|
|
+ };
|
|
+
|
|
display_subsystem: display-subsystem {
|
|
compatible = "rockchip,display-subsystem";
|
|
ports = <&vop_out>;
|
|
--
|
|
Armbian
|
|
|