# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright 2020 Linaro Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/thermal-idle.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Thermal idle cooling device binding

maintainers:
  - Daniel Lezcano <daniel.lezcano@linaro.org>

description: |
  The thermal idle cooling device allows the system to passively
  mitigate the temperature on the device by injecting idle cycles,
  forcing it to cool down.

  This binding describes the thermal idle node.

properties:
   $nodename:
     const: thermal-idle
     description: |
        A thermal-idle node describes the idle cooling device properties to
        cool down efficiently the attached thermal zone.

   '#cooling-cells':
      const: 2
      description: |
         Must be 2, in order to specify minimum and maximum cooling state used in
         the cooling-maps reference. The first cell is the minimum cooling state
         and the second cell is the maximum cooling state requested.

   duration-us:
      description: |
         The idle duration in microsecond the device should cool down.

   exit-latency-us:
      description: |
         The exit latency constraint in microsecond for the injected
         idle state for the device. It is the latency constraint to
         apply when selecting an idle state from among all the present
         ones.

required:
  - '#cooling-cells'

examples:
  - |
    #include <dt-bindings/thermal/thermal.h>

    // Example: Combining idle cooling device on big CPUs with cpufreq cooling device
    cpus {
            #address-cells = <2>;
            #size-cells = <0>;

            /* ... */

                 cpu_b0: cpu@100 {
                         device_type = "cpu";
                         compatible = "arm,cortex-a72";
                         reg = <0x0 0x100>;
                         enable-method = "psci";
                         capacity-dmips-mhz = <1024>;
                         dynamic-power-coefficient = <436>;
                         #cooling-cells = <2>; /* min followed by max */
                         cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
                         thermal-idle {
                                 #cooling-cells = <2>;
                                 duration-us = <10000>;
                                 exit-latency-us = <500>;
                         };
                };

                cpu_b1: cpu@101 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0x0 0x101>;
                        enable-method = "psci";
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <436>;
                        #cooling-cells = <2>; /* min followed by max */
                        cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>;
                        thermal-idle {
                                #cooling-cells = <2>;
                                duration-us = <10000>;
                                exit-latency-us = <500>;
                        };
                 };

          /* ... */

    };

    /* ... */

    thermal_zones {
         cpu_thermal: cpu {
                polling-delay-passive = <100>;
                polling-delay = <1000>;

                /* ... */

                trips {
                        cpu_alert0: cpu_alert0 {
                                    temperature = <65000>;
                                    hysteresis = <2000>;
                                    type = "passive";
                        };

                        cpu_alert1: cpu_alert1 {
                                    temperature = <70000>;
                                    hysteresis = <2000>;
                                    type = "passive";
                        };

                        cpu_alert2: cpu_alert2 {
                                    temperature = <75000>;
                                    hysteresis = <2000>;
                                    type = "passive";
                        };

                        cpu_crit: cpu_crit {
                                    temperature = <95000>;
                                    hysteresis = <2000>;
                                    type = "critical";
                        };
                };

                cooling-maps {
                        map0 {
                             trip = <&cpu_alert1>;
                             cooling-device = <&{/cpus/cpu@100/thermal-idle} 0 15 >,
                                              <&{/cpus/cpu@101/thermal-idle} 0 15>;
                        };

                        map1 {
                             trip = <&cpu_alert2>;
                             cooling-device =
                                        <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
                                        <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                       };
                };
          };
    };
