173c46acfSAmit Kucheria# SPDX-License-Identifier: (GPL-2.0)
273c46acfSAmit Kucheria# Copyright 2020 Linaro Ltd.
373c46acfSAmit Kucheria%YAML 1.2
473c46acfSAmit Kucheria---
573c46acfSAmit Kucheria$id: http://devicetree.org/schemas/thermal/thermal-cooling-devices.yaml#
673c46acfSAmit Kucheria$schema: http://devicetree.org/meta-schemas/core.yaml#
773c46acfSAmit Kucheria
8*84e85359SKrzysztof Kozlowskititle: Thermal cooling device
973c46acfSAmit Kucheria
1073c46acfSAmit Kucheriamaintainers:
1173c46acfSAmit Kucheria  - Amit Kucheria <amitk@kernel.org>
1273c46acfSAmit Kucheria
1373c46acfSAmit Kucheriadescription: |
1473c46acfSAmit Kucheria  Thermal management is achieved in devicetree by describing the sensor hardware
1573c46acfSAmit Kucheria  and the software abstraction of cooling devices and thermal zones required to
1673c46acfSAmit Kucheria  take appropriate action to mitigate thermal overload.
1773c46acfSAmit Kucheria
1873c46acfSAmit Kucheria  The following node types are used to completely describe a thermal management
1973c46acfSAmit Kucheria  system in devicetree:
2073c46acfSAmit Kucheria   - thermal-sensor: device that measures temperature, has SoC-specific bindings
2173c46acfSAmit Kucheria   - cooling-device: device used to dissipate heat either passively or actively
2273c46acfSAmit Kucheria   - thermal-zones: a container of the following node types used to describe all
2373c46acfSAmit Kucheria     thermal data for the platform
2473c46acfSAmit Kucheria
2573c46acfSAmit Kucheria  This binding describes the cooling devices.
2673c46acfSAmit Kucheria
2773c46acfSAmit Kucheria  There are essentially two ways to provide control on power dissipation:
2873c46acfSAmit Kucheria    - Passive cooling: by means of regulating device performance. A typical
2973c46acfSAmit Kucheria      passive cooling mechanism is a CPU that has dynamic voltage and frequency
3073c46acfSAmit Kucheria      scaling (DVFS), and uses lower frequencies as cooling states.
3173c46acfSAmit Kucheria    - Active cooling: by means of activating devices in order to remove the
3273c46acfSAmit Kucheria      dissipated heat, e.g. regulating fan speeds.
3373c46acfSAmit Kucheria
3473c46acfSAmit Kucheria  Any cooling device has a range of cooling states (i.e. different levels of
3573c46acfSAmit Kucheria  heat dissipation). They also have a way to determine the state of cooling in
3673c46acfSAmit Kucheria  which the device is. For example, a fan's cooling states correspond to the
3773c46acfSAmit Kucheria  different fan speeds possible. Cooling states are referred to by single
3873c46acfSAmit Kucheria  unsigned integers, where larger numbers mean greater heat dissipation. The
3973c46acfSAmit Kucheria  precise set of cooling states associated with a device should be defined in
4073c46acfSAmit Kucheria  a particular device's binding.
4173c46acfSAmit Kucheria
4273c46acfSAmit Kucheriaselect: true
4373c46acfSAmit Kucheria
4473c46acfSAmit Kucheriaproperties:
4573c46acfSAmit Kucheria  "#cooling-cells":
4673c46acfSAmit Kucheria    description:
4773c46acfSAmit Kucheria      Must be 2, in order to specify minimum and maximum cooling state used in
4873c46acfSAmit Kucheria      the cooling-maps reference. The first cell is the minimum cooling state
4973c46acfSAmit Kucheria      and the second cell is the maximum cooling state requested.
5073c46acfSAmit Kucheria    const: 2
5173c46acfSAmit Kucheria
526a0e321eSRob HerringadditionalProperties: true
536a0e321eSRob Herring
5473c46acfSAmit Kucheriaexamples:
5573c46acfSAmit Kucheria  - |
5673c46acfSAmit Kucheria    #include <dt-bindings/interrupt-controller/arm-gic.h>
5773c46acfSAmit Kucheria    #include <dt-bindings/thermal/thermal.h>
5873c46acfSAmit Kucheria
5973c46acfSAmit Kucheria    // Example 1: Cpufreq cooling device on CPU0
6073c46acfSAmit Kucheria    cpus {
6173c46acfSAmit Kucheria            #address-cells = <2>;
6273c46acfSAmit Kucheria            #size-cells = <0>;
6373c46acfSAmit Kucheria
6473c46acfSAmit Kucheria            CPU0: cpu@0 {
6573c46acfSAmit Kucheria                    device_type = "cpu";
6673c46acfSAmit Kucheria                    compatible = "qcom,kryo385";
6773c46acfSAmit Kucheria                    reg = <0x0 0x0>;
6873c46acfSAmit Kucheria                    enable-method = "psci";
6939bd2b6aSRob Herring                    cpu-idle-states = <&LITTLE_CPU_SLEEP_0>,
7039bd2b6aSRob Herring                                      <&LITTLE_CPU_SLEEP_1>,
7139bd2b6aSRob Herring                                      <&CLUSTER_SLEEP_0>;
7273c46acfSAmit Kucheria                    capacity-dmips-mhz = <607>;
7373c46acfSAmit Kucheria                    dynamic-power-coefficient = <100>;
7473c46acfSAmit Kucheria                    qcom,freq-domain = <&cpufreq_hw 0>;
7573c46acfSAmit Kucheria                    #cooling-cells = <2>;
7673c46acfSAmit Kucheria                    next-level-cache = <&L2_0>;
7773c46acfSAmit Kucheria                    L2_0: l2-cache {
7873c46acfSAmit Kucheria                            compatible = "cache";
798119aabaSRob Herring                            cache-unified;
808119aabaSRob Herring                            cache-level = <2>;
8173c46acfSAmit Kucheria                            next-level-cache = <&L3_0>;
8273c46acfSAmit Kucheria                            L3_0: l3-cache {
8373c46acfSAmit Kucheria                                    compatible = "cache";
848119aabaSRob Herring                                    cache-unified;
858119aabaSRob Herring                                    cache-level = <3>;
8673c46acfSAmit Kucheria                            };
8773c46acfSAmit Kucheria                    };
8873c46acfSAmit Kucheria          };
8973c46acfSAmit Kucheria
9073c46acfSAmit Kucheria          /* ... */
9173c46acfSAmit Kucheria
9273c46acfSAmit Kucheria    };
9373c46acfSAmit Kucheria
9473c46acfSAmit Kucheria    /* ... */
9573c46acfSAmit Kucheria
9673c46acfSAmit Kucheria    thermal-zones {
9773c46acfSAmit Kucheria            cpu0-thermal {
9873c46acfSAmit Kucheria                    polling-delay-passive = <250>;
9973c46acfSAmit Kucheria                    polling-delay = <1000>;
10073c46acfSAmit Kucheria
10173c46acfSAmit Kucheria                    thermal-sensors = <&tsens0 1>;
10273c46acfSAmit Kucheria
10373c46acfSAmit Kucheria                    trips {
10473c46acfSAmit Kucheria                            cpu0_alert0: trip-point0 {
10573c46acfSAmit Kucheria                                    temperature = <90000>;
10673c46acfSAmit Kucheria                                    hysteresis = <2000>;
10773c46acfSAmit Kucheria                                    type = "passive";
10873c46acfSAmit Kucheria                            };
10973c46acfSAmit Kucheria                    };
11073c46acfSAmit Kucheria
11173c46acfSAmit Kucheria                    cooling-maps {
11273c46acfSAmit Kucheria                            map0 {
11373c46acfSAmit Kucheria                                    trip = <&cpu0_alert0>;
11473c46acfSAmit Kucheria                                    /* Corresponds to 1000MHz in OPP table */
11573c46acfSAmit Kucheria                                    cooling-device = <&CPU0 5 5>;
11673c46acfSAmit Kucheria                            };
11773c46acfSAmit Kucheria                    };
11873c46acfSAmit Kucheria            };
11973c46acfSAmit Kucheria
12073c46acfSAmit Kucheria            /* ... */
12173c46acfSAmit Kucheria    };
12273c46acfSAmit Kucheria...
123