# 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>;
                       };
                };
          };
    };
