]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ARM: tegra: Add SOCTHERM support on Tegra114
authorSvyatoslav Ryhel <clamor95@gmail.com>
Thu, 28 Aug 2025 05:51:04 +0000 (08:51 +0300)
committerThierry Reding <treding@nvidia.com>
Fri, 27 Mar 2026 14:37:06 +0000 (15:37 +0100)
Add SOCTHERM and thermal zones nodes into common Tegra 4 device tree.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
arch/arm/boot/dts/nvidia/tegra114.dtsi

index a98667641be202209732d39e85f7c2a6ab905602..16b71eb8facf62d5cf07ccd343ed52c657c46e1a 100644 (file)
@@ -6,6 +6,7 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/reset/nvidia,tegra114-car.h>
 #include <dt-bindings/soc/tegra-pmc.h>
+#include <dt-bindings/thermal/tegra114-soctherm.h>
 
 / {
        compatible = "nvidia,tegra114";
                };
        };
 
+       soctherm: thermal-sensor@700e2000 {
+               compatible = "nvidia,tegra114-soctherm";
+               reg = <0x700e2000 0x600>, /* SOC_THERM reg_base */
+                     <0x60006000 0x400>; /* CAR reg_base */
+               reg-names = "soctherm-reg", "car-reg";
+               interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "thermal", "edp";
+               clocks = <&tegra_car TEGRA114_CLK_TSENSOR>,
+                        <&tegra_car TEGRA114_CLK_SOC_THERM>;
+               clock-names = "tsensor", "soctherm";
+               resets = <&tegra_car 78>;
+               reset-names = "soctherm";
+
+               assigned-clocks = <&tegra_car TEGRA114_CLK_TSENSOR>,
+                                 <&tegra_car TEGRA114_CLK_SOC_THERM>;
+               assigned-clock-rates = <500000>, <51000000>;
+
+               assigned-clock-parents = <&tegra_car TEGRA114_CLK_CLK_M>,
+                                        <&tegra_car TEGRA114_CLK_PLL_P>;
+
+               #thermal-sensor-cells = <1>;
+
+               throttle-cfgs {
+                       throttle_heavy: heavy {
+                               nvidia,priority = <100>;
+                               nvidia,cpu-throt-percent = <80>;
+                               nvidia,gpu-throt-level = <TEGRA114_SOCTHERM_THROT_LEVEL_HIGH>;
+                               #cooling-cells = <2>;
+                       };
+
+                       throttle_light: light {
+                               nvidia,priority = <80>;
+                               nvidia,cpu-throt-percent = <50>;
+                               nvidia,gpu-throt-level = <TEGRA114_SOCTHERM_THROT_LEVEL_MED>;
+                               #cooling-cells = <2>;
+                       };
+               };
+       };
+
        mipi: mipi@700e3000 {
                compatible = "nvidia,tegra114-mipi";
                reg = <0x700e3000 0x100>;
                        clock-names = "cpu_g", "cpu_lp", "pll_x", "pll_p", "dfll";
                        /* FIXME: what's the actual transition time? */
                        clock-latency = <300000>;
+                       #cooling-cells = <2>;
                };
 
                cpu1: cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a15";
                        reg = <1>;
+                       #cooling-cells = <2>;
                };
 
                cpu2: cpu@2 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a15";
                        reg = <2>;
+                       #cooling-cells = <2>;
                };
 
                cpu3: cpu@3 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a15";
                        reg = <3>;
+                       #cooling-cells = <2>;
                };
        };
 
                interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
        };
 
+       thermal-zones {
+               cpu-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors =
+                               <&soctherm TEGRA114_SOCTHERM_SENSOR_CPU>;
+
+                       trips {
+                               cpu-shutdown-trip {
+                                       temperature = <102000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+
+                               cpu_throttle_trip: cpu-throttle-trip {
+                                       temperature = <100000>;
+                                       hysteresis = <1000>;
+                                       type = "hot";
+                               };
+
+                               cpu_balanced_trip: cpu-balanced-trip {
+                                       temperature = <90000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu_throttle_trip>;
+                                       cooling-device = <&throttle_heavy 1 1>;
+                               };
+
+                               map1 {
+                                       trip = <&cpu_balanced_trip>;
+                                       cooling-device = <&throttle_light 1 1>;
+                               };
+                       };
+               };
+
+               mem-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors =
+                               <&soctherm TEGRA114_SOCTHERM_SENSOR_MEM>;
+
+                       trips {
+                               mem-shutdown-trip {
+                                       temperature = <102000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+
+                               mem_throttle_trip: mem-throttle-trip {
+                                       temperature = <100000>;
+                                       hysteresis = <1000>;
+                                       type = "hot";
+                               };
+
+                               mem_balanced_trip: mem-balanced-trip {
+                                       temperature = <90000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                       };
+
+                       cooling-maps {
+                               /*
+                                * There are currently no cooling maps,
+                                * because there are no cooling devices.
+                                */
+                       };
+               };
+
+               gpu-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors =
+                               <&soctherm TEGRA114_SOCTHERM_SENSOR_GPU>;
+
+                       trips {
+                               gpu-shutdown-trip {
+                                       temperature = <102000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+
+                               gpu_throttle_trip: gpu-throttle-trip {
+                                       temperature = <100000>;
+                                       hysteresis = <1000>;
+                                       type = "hot";
+                               };
+
+                               gpu_balanced_trip: gpu-balanced-trip {
+                                       temperature = <90000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&gpu_throttle_trip>;
+                                       cooling-device = <&throttle_heavy 1 1>;
+                               };
+
+                               map1 {
+                                       trip = <&gpu_balanced_trip>;
+                                       cooling-device = <&throttle_light 1 1>;
+                               };
+                       };
+               };
+
+               pllx-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors =
+                               <&soctherm TEGRA114_SOCTHERM_SENSOR_PLLX>;
+
+                       trips {
+                               pllx-shutdown-trip {
+                                       temperature = <102000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+
+                               pllx_throttle_trip: pllx-throttle-trip {
+                                       temperature = <100000>;
+                                       hysteresis = <1000>;
+                                       type = "hot";
+                               };
+
+                               pllx_balanced_trip: pllx-balanced-trip {
+                                       temperature = <90000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                       };
+
+                       cooling-maps {
+                               /*
+                                * There are currently no cooling maps,
+                                * because there are no cooling devices.
+                                */
+                       };
+               };
+       };
+
        timer {
                compatible = "arm,armv7-timer";
                interrupts =