18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 28c2ecf20Sopenharmony_ci# Copyright 2020 Linaro Ltd. 38c2ecf20Sopenharmony_ci%YAML 1.2 48c2ecf20Sopenharmony_ci--- 58c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/thermal/thermal-idle.yaml# 68c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cititle: Thermal idle cooling device binding 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_cimaintainers: 118c2ecf20Sopenharmony_ci - Daniel Lezcano <daniel.lezcano@linaro.org> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cidescription: | 148c2ecf20Sopenharmony_ci The thermal idle cooling device allows the system to passively 158c2ecf20Sopenharmony_ci mitigate the temperature on the device by injecting idle cycles, 168c2ecf20Sopenharmony_ci forcing it to cool down. 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci This binding describes the thermal idle node. 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ciproperties: 218c2ecf20Sopenharmony_ci $nodename: 228c2ecf20Sopenharmony_ci const: thermal-idle 238c2ecf20Sopenharmony_ci description: | 248c2ecf20Sopenharmony_ci A thermal-idle node describes the idle cooling device properties to 258c2ecf20Sopenharmony_ci cool down efficiently the attached thermal zone. 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci '#cooling-cells': 288c2ecf20Sopenharmony_ci const: 2 298c2ecf20Sopenharmony_ci description: | 308c2ecf20Sopenharmony_ci Must be 2, in order to specify minimum and maximum cooling state used in 318c2ecf20Sopenharmony_ci the cooling-maps reference. The first cell is the minimum cooling state 328c2ecf20Sopenharmony_ci and the second cell is the maximum cooling state requested. 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci duration-us: 358c2ecf20Sopenharmony_ci description: | 368c2ecf20Sopenharmony_ci The idle duration in microsecond the device should cool down. 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci exit-latency-us: 398c2ecf20Sopenharmony_ci description: | 408c2ecf20Sopenharmony_ci The exit latency constraint in microsecond for the injected idle state 418c2ecf20Sopenharmony_ci for the device. It is the latency constraint to apply when selecting an 428c2ecf20Sopenharmony_ci idle state from among all the present ones. 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cirequired: 458c2ecf20Sopenharmony_ci - '#cooling-cells' 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ciadditionalProperties: false 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciexamples: 508c2ecf20Sopenharmony_ci - | 518c2ecf20Sopenharmony_ci #include <dt-bindings/thermal/thermal.h> 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci // Example: Combining idle cooling device on big CPUs with cpufreq cooling device 548c2ecf20Sopenharmony_ci cpus { 558c2ecf20Sopenharmony_ci #address-cells = <2>; 568c2ecf20Sopenharmony_ci #size-cells = <0>; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci /* ... */ 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci cpu_b0: cpu@100 { 618c2ecf20Sopenharmony_ci device_type = "cpu"; 628c2ecf20Sopenharmony_ci compatible = "arm,cortex-a72"; 638c2ecf20Sopenharmony_ci reg = <0x0 0x100>; 648c2ecf20Sopenharmony_ci enable-method = "psci"; 658c2ecf20Sopenharmony_ci capacity-dmips-mhz = <1024>; 668c2ecf20Sopenharmony_ci dynamic-power-coefficient = <436>; 678c2ecf20Sopenharmony_ci #cooling-cells = <2>; /* min followed by max */ 688c2ecf20Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; 698c2ecf20Sopenharmony_ci thermal-idle { 708c2ecf20Sopenharmony_ci #cooling-cells = <2>; 718c2ecf20Sopenharmony_ci duration-us = <10000>; 728c2ecf20Sopenharmony_ci exit-latency-us = <500>; 738c2ecf20Sopenharmony_ci }; 748c2ecf20Sopenharmony_ci }; 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci cpu_b1: cpu@101 { 778c2ecf20Sopenharmony_ci device_type = "cpu"; 788c2ecf20Sopenharmony_ci compatible = "arm,cortex-a72"; 798c2ecf20Sopenharmony_ci reg = <0x0 0x101>; 808c2ecf20Sopenharmony_ci enable-method = "psci"; 818c2ecf20Sopenharmony_ci capacity-dmips-mhz = <1024>; 828c2ecf20Sopenharmony_ci dynamic-power-coefficient = <436>; 838c2ecf20Sopenharmony_ci #cooling-cells = <2>; /* min followed by max */ 848c2ecf20Sopenharmony_ci cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; 858c2ecf20Sopenharmony_ci thermal-idle { 868c2ecf20Sopenharmony_ci #cooling-cells = <2>; 878c2ecf20Sopenharmony_ci duration-us = <10000>; 888c2ecf20Sopenharmony_ci exit-latency-us = <500>; 898c2ecf20Sopenharmony_ci }; 908c2ecf20Sopenharmony_ci }; 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci /* ... */ 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci }; 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci /* ... */ 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci thermal_zones { 998c2ecf20Sopenharmony_ci cpu_thermal: cpu { 1008c2ecf20Sopenharmony_ci polling-delay-passive = <100>; 1018c2ecf20Sopenharmony_ci polling-delay = <1000>; 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci /* ... */ 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci trips { 1068c2ecf20Sopenharmony_ci cpu_alert0: cpu_alert0 { 1078c2ecf20Sopenharmony_ci temperature = <65000>; 1088c2ecf20Sopenharmony_ci hysteresis = <2000>; 1098c2ecf20Sopenharmony_ci type = "passive"; 1108c2ecf20Sopenharmony_ci }; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci cpu_alert1: cpu_alert1 { 1138c2ecf20Sopenharmony_ci temperature = <70000>; 1148c2ecf20Sopenharmony_ci hysteresis = <2000>; 1158c2ecf20Sopenharmony_ci type = "passive"; 1168c2ecf20Sopenharmony_ci }; 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci cpu_alert2: cpu_alert2 { 1198c2ecf20Sopenharmony_ci temperature = <75000>; 1208c2ecf20Sopenharmony_ci hysteresis = <2000>; 1218c2ecf20Sopenharmony_ci type = "passive"; 1228c2ecf20Sopenharmony_ci }; 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci cpu_crit: cpu_crit { 1258c2ecf20Sopenharmony_ci temperature = <95000>; 1268c2ecf20Sopenharmony_ci hysteresis = <2000>; 1278c2ecf20Sopenharmony_ci type = "critical"; 1288c2ecf20Sopenharmony_ci }; 1298c2ecf20Sopenharmony_ci }; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci cooling-maps { 1328c2ecf20Sopenharmony_ci map0 { 1338c2ecf20Sopenharmony_ci trip = <&cpu_alert1>; 1348c2ecf20Sopenharmony_ci cooling-device = <&{/cpus/cpu@100/thermal-idle} 0 15 >, 1358c2ecf20Sopenharmony_ci <&{/cpus/cpu@101/thermal-idle} 0 15>; 1368c2ecf20Sopenharmony_ci }; 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci map1 { 1398c2ecf20Sopenharmony_ci trip = <&cpu_alert2>; 1408c2ecf20Sopenharmony_ci cooling-device = 1418c2ecf20Sopenharmony_ci <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 1428c2ecf20Sopenharmony_ci <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 1438c2ecf20Sopenharmony_ci }; 1448c2ecf20Sopenharmony_ci }; 1458c2ecf20Sopenharmony_ci }; 1468c2ecf20Sopenharmony_ci }; 147