Commit fb3da48a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull thermal management updates from Zhang Rui:

 - Fix a deadlock regression in thermal core framework, which was
   introduced in 5.3 (Wei Wang)

 - Initialize thermal control framework earlier to enable thermal
   mitigation during boot (Amit Kucheria)

 - Convert the Intelligent Power Allocator (IPA) thermal governor to
   follow the generic PM_EM instead of its own Energy Model (Quentin
   Perret)

 - Introduce a new Amlogic soc thermal driver (Guillaume La Roque)

 - Add interrupt support for tsens thermal driver (Amit Kucheria)

 - Add support for MSM8956/8976 in tsens thermal driver
   (AngeloGioacchino Del Regno)

 - Add support for r8a774b1 in rcar thermal driver (Biju Das)

 - Add support for Thermal Monitor Unit v2 in qoriq thermal driver
   (Yuantian Tang)

 - Some other fixes/cleanups on thermal core framework and soc thermal
   drivers (Colin Ian King, Daniel Lezcano, Hsin-Yi Wang, Tian Tao)

* 'thermal/next' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux: (32 commits)
  thermal: Fix deadlock in thermal thermal_zone_device_check
  thermal: cpu_cooling: Migrate to using the EM framework
  thermal: cpu_cooling: Make the power-related code depend on IPA
  PM / EM: Declare EM data types unconditionally
  arm64: defconfig: Enable CONFIG_ENERGY_MODEL
  drivers: thermal: tsens: fix potential integer overflow on multiply
  thermal: cpu_cooling: Reorder the header file
  thermal: cpu_cooling: Remove pointless dependency on CONFIG_OF
  thermal: no need to set .owner when using module_platform_driver
  thermal: qcom: tsens-v1: Fix kfree of a non-pointer value
  cpufreq: qcom-hw: Move driver initialization earlier
  clk: qcom: Initialize clock drivers earlier
  cpufreq: Initialize cpufreq-dt driver earlier
  cpufreq: Initialize the governors in core_initcall
  thermal: Initialize thermal subsystem earlier
  thermal: Remove netlink support
  dt: thermal: tsens: Document compatible for MSM8976/56
  thermal: qcom: tsens-v1: Add support for MSM8956 and MSM8976
  MAINTAINERS: add entry for Amlogic Thermal driver
  thermal: amlogic: Add thermal driver to support G12 SoCs
  ...
parents 5ecc9d15 163b00cd
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/amlogic,thermal.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Amlogic Thermal

maintainers:
  - Guillaume La Roque <glaroque@baylibre.com>

description: Binding for Amlogic Thermal

properties:
  compatible:
      items:
        - enum:
            - amlogic,g12a-cpu-thermal
            - amlogic,g12a-ddr-thermal
        - const: amlogic,g12a-thermal

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  amlogic,ao-secure:
    description: phandle to the ao-secure syscon
    $ref: '/schemas/types.yaml#/definitions/phandle'


required:
  - compatible
  - reg
  - interrupts
  - clocks
  - amlogic,ao-secure

examples:
  - |
        cpu_temp: temperature-sensor@ff634800 {
                compatible = "amlogic,g12a-cpu-thermal",
                             "amlogic,g12a-thermal";
                reg = <0xff634800 0x50>;
                interrupts = <0x0 0x24 0x0>;
                clocks = <&clk 164>;
                #thermal-sensor-cells = <0>;
                amlogic,ao-secure = <&sec_AO>;
        };
...
+0 −55
Original line number Diff line number Diff line
* QCOM SoC Temperature Sensor (TSENS)

Required properties:
- compatible:
  Must be one of the following:
    - "qcom,msm8916-tsens" (MSM8916)
    - "qcom,msm8974-tsens" (MSM8974)
    - "qcom,msm8996-tsens" (MSM8996)
    - "qcom,qcs404-tsens", "qcom,tsens-v1" (QCS404)
    - "qcom,msm8998-tsens", "qcom,tsens-v2" (MSM8998)
    - "qcom,sdm845-tsens", "qcom,tsens-v2" (SDM845)
  The generic "qcom,tsens-v2" property must be used as a fallback for any SoC
  with version 2 of the TSENS IP. MSM8996 is the only exception because the
  generic property did not exist when support was added.
  Similarly, the generic "qcom,tsens-v1" property must be used as a fallback for
  any SoC with version 1 of the TSENS IP.

- reg: Address range of the thermal registers.
  New platforms containing v2.x.y of the TSENS IP must specify the SROT and TM
  register spaces separately, with order being TM before SROT.
  See Example 2, below.

- #thermal-sensor-cells : Should be 1. See ./thermal.txt for a description.
- #qcom,sensors: Number of sensors in tsens block
- Refer to Documentation/devicetree/bindings/nvmem/nvmem.txt to know how to specify
nvmem cells

Example 1 (legacy support before a fallback tsens-v2 property was introduced):
tsens: thermal-sensor@900000 {
		compatible = "qcom,msm8916-tsens";
		reg = <0x4a8000 0x2000>;
		nvmem-cells = <&tsens_caldata>, <&tsens_calsel>;
		nvmem-cell-names = "caldata", "calsel";
		#thermal-sensor-cells = <1>;
	};

Example 2 (for any platform containing v2 of the TSENS IP):
tsens0: thermal-sensor@c263000 {
		compatible = "qcom,sdm845-tsens", "qcom,tsens-v2";
		reg = <0xc263000 0x1ff>, /* TM */
			<0xc222000 0x1ff>; /* SROT */
		#qcom,sensors = <13>;
		#thermal-sensor-cells = <1>;
	};

Example 3 (for any platform containing v1 of the TSENS IP):
tsens: thermal-sensor@4a9000 {
		compatible = "qcom,qcs404-tsens", "qcom,tsens-v1";
		reg = <0x004a9000 0x1000>, /* TM */
		      <0x004a8000 0x1000>; /* SROT */
		nvmem-cells = <&tsens_caldata>;
		nvmem-cell-names = "calib";
		#qcom,sensors = <10>;
		#thermal-sensor-cells = <1>;
	};
+170 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR MIT)
# Copyright 2019 Linaro Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/qcom-tsens.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: QCOM SoC Temperature Sensor (TSENS)

maintainers:
  - Amit Kucheria <amit.kucheria@linaro.org>

description: |
  QCOM SoCs have TSENS IP to allow temperature measurement. There are currently
  three distinct major versions of the IP that is supported by a single driver.
  The IP versions are named v0.1, v1 and v2 in the driver, where v0.1 captures
  everything before v1 when there was no versioning information.

properties:
  compatible:
    oneOf:
      - description: v0.1 of TSENS
        items:
          - enum:
              - qcom,msm8916-tsens
              - qcom,msm8974-tsens
          - const: qcom,tsens-v0_1

      - description: v1 of TSENS
        items:
          - enum:
              - qcom,msm8976-tsens
              - qcom,qcs404-tsens
          - const: qcom,tsens-v1

      - description: v2 of TSENS
        items:
          - enum:
              - qcom,msm8996-tsens
              - qcom,msm8998-tsens
              - qcom,sdm845-tsens
          - const: qcom,tsens-v2

  reg:
    maxItems: 2
    items:
      - description: TM registers
      - description: SROT registers

  nvmem-cells:
    minItems: 1
    maxItems: 2
    description:
      Reference to an nvmem node for the calibration data

  nvmem-cells-names:
    minItems: 1
    maxItems: 2
    items:
      - enum:
        - caldata
        - calsel

  "#qcom,sensors":
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - minimum: 1
      - maximum: 16
    description:
      Number of sensors enabled on this platform

  "#thermal-sensor-cells":
    const: 1
    description:
      Number of cells required to uniquely identify the thermal sensors. Since
      we have multiple sensors this is set to 1

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8916-tsens
              - qcom,msm8974-tsens
              - qcom,msm8976-tsens
              - qcom,qcs404-tsens
              - qcom,tsens-v0_1
              - qcom,tsens-v1
    then:
      properties:
        interrupts:
          items:
            - description: Combined interrupt if upper or lower threshold crossed
        interrupt-names:
          items:
            - const: uplow

    else:
      properties:
        interrupts:
          items:
            - description: Combined interrupt if upper or lower threshold crossed
            - description: Interrupt if critical threshold crossed
        interrupt-names:
          items:
            - const: uplow
            - const: critical

required:
  - compatible
  - reg
  - "#qcom,sensors"
  - interrupts
  - interrupt-names
  - "#thermal-sensor-cells"

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    // Example 1 (legacy: for pre v1 IP):
    tsens1: thermal-sensor@900000 {
           compatible = "qcom,msm8916-tsens", "qcom,tsens-v0_1";
           reg = <0x4a9000 0x1000>, /* TM */
                 <0x4a8000 0x1000>; /* SROT */

           nvmem-cells = <&tsens_caldata>, <&tsens_calsel>;
           nvmem-cell-names = "caldata", "calsel";

           interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
           interrupt-names = "uplow";

           #qcom,sensors = <5>;
           #thermal-sensor-cells = <1>;
    };

  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    // Example 2 (for any platform containing v1 of the TSENS IP):
    tsens2: thermal-sensor@4a9000 {
          compatible = "qcom,qcs404-tsens", "qcom,tsens-v1";
          reg = <0x004a9000 0x1000>, /* TM */
                <0x004a8000 0x1000>; /* SROT */

          nvmem-cells = <&tsens_caldata>;
          nvmem-cell-names = "calib";

          interrupts = <GIC_SPI 506 IRQ_TYPE_LEVEL_HIGH>;
          interrupt-names = "uplow";

          #qcom,sensors = <10>;
          #thermal-sensor-cells = <1>;
    };

  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    // Example 3 (for any platform containing v2 of the TSENS IP):
    tsens3: thermal-sensor@c263000 {
           compatible = "qcom,sdm845-tsens", "qcom,tsens-v2";
           reg = <0xc263000 0x1ff>,
                 <0xc222000 0x1ff>;

           interrupts = <GIC_SPI 506 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 508 IRQ_TYPE_LEVEL_HIGH>;
           interrupt-names = "uplow", "critical";

           #qcom,sensors = <13>;
           #thermal-sensor-cells = <1>;
    };
...
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ Required properties:
- compatible		: "renesas,<soctype>-thermal",
			  Examples with soctypes are:
			    - "renesas,r8a774a1-thermal" (RZ/G2M)
			    - "renesas,r8a774b1-thermal" (RZ/G2N)
			    - "renesas,r8a7795-thermal" (R-Car H3)
			    - "renesas,r8a7796-thermal" (R-Car M3-W)
			    - "renesas,r8a77965-thermal" (R-Car M3-N)
+6 −20
Original line number Diff line number Diff line
@@ -725,24 +725,10 @@ method, the sys I/F structure will be built like this::
    |---temp1_input:		37000
    |---temp1_crit:		100000

4. Event Notification
4. Export Symbol APIs
=====================

The framework includes a simple notification mechanism, in the form of a
netlink event. Netlink socket initialization is done during the _init_
of the framework. Drivers which intend to use the notification mechanism
just need to call thermal_generate_netlink_event() with two arguments viz
(originator, event). The originator is a pointer to struct thermal_zone_device
from where the event has been originated. An integer which represents the
thermal zone device will be used in the message to identify the zone. The
event will be one of:{THERMAL_AUX0, THERMAL_AUX1, THERMAL_CRITICAL,
THERMAL_DEV_FAULT}. Notification can be sent when the current temperature
crosses any of the configured thresholds.

5. Export Symbol APIs
=====================

5.1. get_tz_trend
4.1. get_tz_trend
-----------------

This function returns the trend of a thermal zone, i.e the rate of change
@@ -751,14 +737,14 @@ are supposed to implement the callback. If they don't, the thermal
framework calculated the trend by comparing the previous and the current
temperature values.

5.2. get_thermal_instance
4.2. get_thermal_instance
-------------------------

This function returns the thermal_instance corresponding to a given
{thermal_zone, cooling_device, trip_point} combination. Returns NULL
if such an instance does not exist.

5.3. thermal_notify_framework
4.3. thermal_notify_framework
-----------------------------

This function handles the trip events from sensor drivers. It starts
@@ -768,14 +754,14 @@ and does actual throttling for other trip points i.e ACTIVE and PASSIVE.
The throttling policy is based on the configured platform data; if no
platform data is provided, this uses the step_wise throttling policy.

5.4. thermal_cdev_update
4.4. thermal_cdev_update
------------------------

This function serves as an arbitrator to set the state of a cooling
device. It sets the cooling device to the deepest cooling state if
possible.

6. thermal_emergency_poweroff
5. thermal_emergency_poweroff
=============================

On an event of critical trip temperature crossing. Thermal framework
Loading