[PATCH 4/5] arm64: dts: qcom: nord: Add GPU cooling

From: Akhil P Oommen

Date: Thu Oct 08 2026 - 17:13:35 EST


From: Aastha Pandey <aastha.pandey@xxxxxxxxxxxxxxxx>

Unlike the CPU, the GPU does not throttle its speed automatically when
it reaches high temperatures.

Set up GPU cooling on Nord by throttling the Adreno 753 GPU when it
reaches 105°C. Label the GPU thermal zones and their passive trip
points, map them to the GPU as a cooling device, and add a passive
polling delay so the thermal framework can monitor the zones while
throttling.

Signed-off-by: Aastha Pandey <aastha.pandey@xxxxxxxxxxxxxxxx>
Signed-off-by: Akhil P Oommen <akhilpo@xxxxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/nord-embedded.dtsi | 177 ++++++++++++++++++++++++++++
arch/arm64/boot/dts/qcom/nord.dtsi | 80 ++++++-------
2 files changed, 217 insertions(+), 40 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
index 4379092b7bf8..23370007c974 100644
--- a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
+++ b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
@@ -17,6 +17,7 @@
#include <dt-bindings/interconnect/qcom,nord-rpmh.h>
#include <dt-bindings/power/qcom,rpmhpd.h>
#include <dt-bindings/soc/qcom,rpmh-rsc.h>
+#include <dt-bindings/thermal/thermal.h>

#include "nord.dtsi"

@@ -2042,3 +2043,179 @@ opp-403000000 {
};
};
};
+
+&gpu_0_0_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpu_0_0_0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpu_0_0_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpu_0_0_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpu_0_1_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpu_0_1_0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpu_0_1_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpu_0_1_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_0_1_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_0_1_0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_0_1_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_0_1_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_0_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_0_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_1_0_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_1_0_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_1_1_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_1_1_0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_1_1_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_1_1_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_2_0_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_2_0_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_2_1_0_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_2_1_0_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_2_1_1_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss_2_1_1_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+&gpuss_2_thermal {
+ polling-delay-passive = <10>;
+
+ cooling-maps {
+ map0 {
+ trip = <&gpuss2_alert0>;
+ cooling-device = <&gpu_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/nord.dtsi b/arch/arm64/boot/dts/qcom/nord.dtsi
index 147d8e595a3a..b032d1d2ad9b 100644
--- a/arch/arm64/boot/dts/qcom/nord.dtsi
+++ b/arch/arm64/boot/dts/qcom/nord.dtsi
@@ -4101,13 +4101,13 @@ trip-point1 {
};
};

- gpuss-0-thermal {
+ gpuss_0_thermal: gpuss-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 1>;

trips {
- trip-point0 {
+ gpuss0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4121,13 +4121,13 @@ trip-point1 {
};
};

- gpuss-1-thermal {
+ gpuss_1_thermal: gpuss-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 2>;

trips {
- trip-point0 {
+ gpuss1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4141,13 +4141,13 @@ trip-point1 {
};
};

- gpuss-2-thermal {
+ gpuss_2_thermal: gpuss-2-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 3>;

trips {
- trip-point0 {
+ gpuss2_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4161,13 +4161,13 @@ trip-point1 {
};
};

- gpu-0-0-0-thermal {
+ gpu_0_0_0_thermal: gpu-0-0-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 4>;

trips {
- trip-point0 {
+ gpu_0_0_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4181,13 +4181,13 @@ trip-point1 {
};
};

- gpuss-1-0-thermal {
+ gpuss_1_0_thermal: gpuss-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 5>;

trips {
- trip-point0 {
+ gpuss_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4201,13 +4201,13 @@ trip-point1 {
};
};

- gpuss-1-1-thermal {
+ gpuss_1_1_thermal: gpuss-1-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 6>;

trips {
- trip-point0 {
+ gpuss_1_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4321,13 +4321,13 @@ trip-point1 {
};
};

- gpuss-0-1-1-thermal {
+ gpuss_0_1_1_thermal: gpuss-0-1-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 12>;

trips {
- trip-point0 {
+ gpuss_0_1_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4341,13 +4341,13 @@ trip-point1 {
};
};

- gpuss-1-1-1-thermal {
+ gpuss_1_1_1_thermal: gpuss-1-1-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 13>;

trips {
- trip-point0 {
+ gpuss_1_1_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4361,13 +4361,13 @@ trip-point1 {
};
};

- gpuss-2-1-1-thermal {
+ gpuss_2_1_1_thermal: gpuss-2-1-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 14>;

trips {
- trip-point0 {
+ gpuss_2_1_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4381,13 +4381,13 @@ trip-point1 {
};
};

- gpu-0-1-1-thermal {
+ gpu_0_1_1_thermal: gpu-0-1-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens6 15>;

trips {
- trip-point0 {
+ gpu_0_1_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4421,13 +4421,13 @@ trip-point1 {
};
};

- gpuss-0-1-0-thermal {
+ gpuss_0_1_0_thermal: gpuss-0-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 1>;

trips {
- trip-point0 {
+ gpuss_0_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4441,13 +4441,13 @@ trip-point1 {
};
};

- gpuss-1-1-0-thermal {
+ gpuss_1_1_0_thermal: gpuss-1-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 2>;

trips {
- trip-point0 {
+ gpuss_1_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4461,13 +4461,13 @@ trip-point1 {
};
};

- gpuss-2-1-0-thermal {
+ gpuss_2_1_0_thermal: gpuss-2-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 3>;

trips {
- trip-point0 {
+ gpuss_2_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4481,13 +4481,13 @@ trip-point1 {
};
};

- gpu-0-1-0-thermal {
+ gpu_0_1_0_thermal: gpu-0-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 4>;

trips {
- trip-point0 {
+ gpu_0_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4501,13 +4501,13 @@ trip-point1 {
};
};

- gpuss-1-2-thermal {
+ gpuss_1_2_thermal: gpuss-1-2-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 5>;

trips {
- trip-point0 {
+ gpuss_1_2_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4521,13 +4521,13 @@ trip-point1 {
};
};

- gpu-1-0-thermal {
+ gpu_1_0_thermal: gpu-1-0-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 6>;

trips {
- trip-point0 {
+ gpu_1_0_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4641,13 +4641,13 @@ trip-point1 {
};
};

- gpuss-0-1-thermal {
+ gpuss_0_1_thermal: gpuss-0-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 12>;

trips {
- trip-point0 {
+ gpuss_0_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4661,13 +4661,13 @@ trip-point1 {
};
};

- gpuss-1-0-1-thermal {
+ gpuss_1_0_1_thermal: gpuss-1-0-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 13>;

trips {
- trip-point0 {
+ gpuss_1_0_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4681,13 +4681,13 @@ trip-point1 {
};
};

- gpuss-2-0-1-thermal {
+ gpuss_2_0_1_thermal: gpuss-2-0-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 14>;

trips {
- trip-point0 {
+ gpuss_2_0_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";
@@ -4701,13 +4701,13 @@ trip-point1 {
};
};

- gpu-0-0-1-thermal {
+ gpu_0_0_1_thermal: gpu-0-0-1-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tsens7 15>;

trips {
- trip-point0 {
+ gpu_0_0_1_alert0: trip-point0 {
temperature = <105000>;
hysteresis = <10000>;
type = "passive";

--
2.55.0