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