162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright 2020 Linaro Ltd.
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/thermal/thermal-idle.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Thermal idle cooling device
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Daniel Lezcano <daniel.lezcano@linaro.org>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  The thermal idle cooling device allows the system to passively
1562306a36Sopenharmony_ci  mitigate the temperature on the device by injecting idle cycles,
1662306a36Sopenharmony_ci  forcing it to cool down.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci  This binding describes the thermal idle node.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciproperties:
2162306a36Sopenharmony_ci  $nodename:
2262306a36Sopenharmony_ci    const: thermal-idle
2362306a36Sopenharmony_ci    description: |
2462306a36Sopenharmony_ci      A thermal-idle node describes the idle cooling device properties to
2562306a36Sopenharmony_ci      cool down efficiently the attached thermal zone.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci  '#cooling-cells':
2862306a36Sopenharmony_ci    const: 2
2962306a36Sopenharmony_ci    description: |
3062306a36Sopenharmony_ci      Must be 2, in order to specify minimum and maximum cooling state used in
3162306a36Sopenharmony_ci      the cooling-maps reference. The first cell is the minimum cooling state
3262306a36Sopenharmony_ci      and the second cell is the maximum cooling state requested.
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  duration-us:
3562306a36Sopenharmony_ci    description: |
3662306a36Sopenharmony_ci      The idle duration in microsecond the device should cool down.
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci  exit-latency-us:
3962306a36Sopenharmony_ci    description: |
4062306a36Sopenharmony_ci      The exit latency constraint in microsecond for the injected idle state
4162306a36Sopenharmony_ci      for the device. It is the latency constraint to apply when selecting an
4262306a36Sopenharmony_ci      idle state from among all the present ones.
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cirequired:
4562306a36Sopenharmony_ci  - '#cooling-cells'
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciadditionalProperties: false
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciexamples:
5062306a36Sopenharmony_ci  - |
5162306a36Sopenharmony_ci    /{
5262306a36Sopenharmony_ci        #include <dt-bindings/thermal/thermal.h>
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci        compatible = "foo";
5562306a36Sopenharmony_ci        model = "foo";
5662306a36Sopenharmony_ci        #address-cells = <1>;
5762306a36Sopenharmony_ci        #size-cells = <1>;
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci        // Example: Combining idle cooling device on big CPUs with cpufreq cooling device
6062306a36Sopenharmony_ci        cpus {
6162306a36Sopenharmony_ci            #address-cells = <2>;
6262306a36Sopenharmony_ci            #size-cells = <0>;
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci            /* ... */
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci            cpu_b0: cpu@100 {
6762306a36Sopenharmony_ci                device_type = "cpu";
6862306a36Sopenharmony_ci                compatible = "arm,cortex-a72";
6962306a36Sopenharmony_ci                reg = <0x0 0x100>;
7062306a36Sopenharmony_ci                enable-method = "psci";
7162306a36Sopenharmony_ci                capacity-dmips-mhz = <1024>;
7262306a36Sopenharmony_ci                dynamic-power-coefficient = <436>;
7362306a36Sopenharmony_ci                #cooling-cells = <2>; /* min followed by max */
7462306a36Sopenharmony_ci                cpu-idle-states = <&CPU_SLEEP>, <&CLUSTER_SLEEP>;
7562306a36Sopenharmony_ci                cpu_b0_therm: thermal-idle {
7662306a36Sopenharmony_ci                    #cooling-cells = <2>;
7762306a36Sopenharmony_ci                    duration-us = <10000>;
7862306a36Sopenharmony_ci                    exit-latency-us = <500>;
7962306a36Sopenharmony_ci                };
8062306a36Sopenharmony_ci            };
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci            cpu_b1: cpu@101 {
8362306a36Sopenharmony_ci                device_type = "cpu";
8462306a36Sopenharmony_ci                compatible = "arm,cortex-a72";
8562306a36Sopenharmony_ci                reg = <0x0 0x101>;
8662306a36Sopenharmony_ci                enable-method = "psci";
8762306a36Sopenharmony_ci                capacity-dmips-mhz = <1024>;
8862306a36Sopenharmony_ci                dynamic-power-coefficient = <436>;
8962306a36Sopenharmony_ci                #cooling-cells = <2>; /* min followed by max */
9062306a36Sopenharmony_ci                cpu-idle-states = <&CPU_SLEEP>, <&CLUSTER_SLEEP>;
9162306a36Sopenharmony_ci                cpu_b1_therm: thermal-idle {
9262306a36Sopenharmony_ci                    #cooling-cells = <2>;
9362306a36Sopenharmony_ci                    duration-us = <10000>;
9462306a36Sopenharmony_ci                    exit-latency-us = <500>;
9562306a36Sopenharmony_ci                };
9662306a36Sopenharmony_ci            };
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci            /* ... */
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci        };
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci        /* ... */
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci        thermal_zones {
10562306a36Sopenharmony_ci            cpu_thermal: cpu {
10662306a36Sopenharmony_ci                polling-delay-passive = <100>;
10762306a36Sopenharmony_ci                polling-delay = <1000>;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci                /* ... */
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci                trips {
11262306a36Sopenharmony_ci                    cpu_alert0: cpu_alert0 {
11362306a36Sopenharmony_ci                        temperature = <65000>;
11462306a36Sopenharmony_ci                        hysteresis = <2000>;
11562306a36Sopenharmony_ci                        type = "passive";
11662306a36Sopenharmony_ci                    };
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci                    cpu_alert1: cpu_alert1 {
11962306a36Sopenharmony_ci                        temperature = <70000>;
12062306a36Sopenharmony_ci                        hysteresis = <2000>;
12162306a36Sopenharmony_ci                        type = "passive";
12262306a36Sopenharmony_ci                    };
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci                    cpu_alert2: cpu_alert2 {
12562306a36Sopenharmony_ci                        temperature = <75000>;
12662306a36Sopenharmony_ci                        hysteresis = <2000>;
12762306a36Sopenharmony_ci                        type = "passive";
12862306a36Sopenharmony_ci                    };
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci                    cpu_crit: cpu_crit {
13162306a36Sopenharmony_ci                        temperature = <95000>;
13262306a36Sopenharmony_ci                        hysteresis = <2000>;
13362306a36Sopenharmony_ci                        type = "critical";
13462306a36Sopenharmony_ci                    };
13562306a36Sopenharmony_ci                };
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci                cooling-maps {
13862306a36Sopenharmony_ci                    map0 {
13962306a36Sopenharmony_ci                        trip = <&cpu_alert1>;
14062306a36Sopenharmony_ci                        cooling-device = <&cpu_b0_therm 0 15 >,
14162306a36Sopenharmony_ci                                         <&cpu_b1_therm 0 15>;
14262306a36Sopenharmony_ci                    };
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci                    map1 {
14562306a36Sopenharmony_ci                        trip = <&cpu_alert2>;
14662306a36Sopenharmony_ci                        cooling-device = <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
14762306a36Sopenharmony_ci                                         <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
14862306a36Sopenharmony_ci                    };
14962306a36Sopenharmony_ci                };
15062306a36Sopenharmony_ci            };
15162306a36Sopenharmony_ci        };
15262306a36Sopenharmony_ci    };
153