Commit 7f73ba68 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull thermal control updates from Rafael Wysocki:
 "These add support for the D1/T113s THS controller to the sun8i driver
  and a DT-based mechanism for platforms to indicate a preference to
  reboot (instead of shutting down) on crossing a critical trip point,
  fix issues, make other improvements (in the IPA governor, the Intel
  HFI driver, the exynos driver and the thermal netlink interface among
  other places) and clean up code.

  One long-standing issue addressed here is that trip point crossing
  notifications sent to user space might be unreliable due to the
  incorrect handling of trip point hysteresis in the thermal core:
  multiple notifications might be sent for the same event or there might
  be events without any notification at all.

  Specifics:

   - Add dynamic thresholds for trip point crossing detection to prevent
     trip point crossing notifications from being sent at incorrect
     times or not at all in some cases (Rafael J. Wysocki)

   - Fix synchronization issues related to the resume of thermal zones
     during a system-wide resume and allow thermal zones to be resumed
     concurrently (Rafael J. Wysocki)

   - Modify the thermal zone unregistration to wait for the given zone
     to go away completely before returning to the caller and rework the
     sysfs interface for trip points on top of that (Rafael J. Wysocki)

   - Fix a possible NULL pointer dereference in thermal zone
     registration error path (Rafael J. Wysocki)

   - Clean up the IPA thermal governor and modify it (with the help of a
     new governor callback) to avoid allocating and freeing memory every
     time its throttling callback is invoked (Lukasz Luba)

   - Make the IPA thermal governor handle thermal instance weight
     changes via sysfs correctly (Lukasz Luba)

   - Update the thermal netlink code to avoid sending messages if there
     are no recipients (Stanislaw Gruszka)

   - Convert Mediatek Thermal to the json-schema (Rafał Miłecki)

   - Fix thermal DT bindings issue on Loongson (Binbin Zhou)

   - Fix returning NULL instead of -ENODEV during thermal probe on
     Loogsoon (Binbin Zhou)

   - Add thermal DT binding for tsens on the SM8650 platform (Neil
     Armstrong)

   - Add reboot on the critical trip point crossing option feature
     (Fabio Estevam)

   - Use DEFINE_SIMPLE_DEV_PM_OPS do define PM functions for thermal
     suspend/resume on AmLogic (Uwe Kleine-König)

   - Add D1/T113s THS controller support to the Sun8i thermal control
     driver (Maxim Kiselev)

   - Fix example in the thermal DT binding for QCom SPMI (Johan Hovold)

   - Fix compilation warning in the tmon utility (Florian Eckert)

   - Add support for interrupt-based thermal configuration on Exynos
     along with a set of related cleanups (Mateusz Majewski)

   - Make the Intel HFI thermal driver enable an HFI instance (eg.
     processor package) from its first online CPU and disable it when
     the last CPU in it goes offline (Ricardo Neri)

   - Fix a kernel-doc warning and a spello in the cpuidle_cooling
     thermal driver (Randy Dunlap)

   - Move the .get_temp() thermal zone callback presence check to the
     thermal zone registration code (Daniel Lezcano)

   - Use the for_each_trip() macro for trip points table walks in a few
     places in the thermal core (Rafael J. Wysocki)

   - Make all trip point updates (via sysfs as well as from the platform
     firmware) trigger trip change notifications (Rafael J. Wysocki)

   - Drop redundant code from the thermal core and make one function in
     it take a const pointer argument (Rafael J. Wysocki)"

* tag 'thermal-6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (64 commits)
  thermal: trip: Constify thermal zone argument of thermal_zone_trip_id()
  thermal: intel: hfi: Disable an HFI instance when all its CPUs go offline
  thermal: intel: hfi: Enable an HFI instance from its first online CPU
  thermal: intel: hfi: Refactor enabling code into helper functions
  thermal/drivers/exynos: Use set_trips ops
  thermal/drivers/exynos: Use BIT wherever possible
  thermal/drivers/exynos: Split initialization of TMU and the thermal zone
  thermal/drivers/exynos: Stop using the threshold mechanism on Exynos 4210
  thermal/drivers/exynos: Simplify regulator (de)initialization
  thermal/drivers/exynos: Handle devm_regulator_get_optional return value correctly
  thermal/drivers/exynos: Wwitch from workqueue-driven interrupt handling to threaded interrupts
  thermal/drivers/exynos: Drop id field
  thermal/drivers/exynos: Remove an unnecessary field description
  tools/thermal/tmon: Fix compilation warning for wrong format
  dt-bindings: thermal: qcom-spmi-adc-tm5/hc: Clean up examples
  dt-bindings: thermal: qcom-spmi-adc-tm5/hc: Fix example node names
  thermal/drivers/sun8i: Add D1/T113s THS controller support
  dt-bindings: thermal: sun8i: Add binding for D1/T113s THS controller
  thermal: amlogic: Use DEFINE_SIMPLE_DEV_PM_OPS for PM functions
  thermal: amlogic: Make amlogic_thermal_disable() return void
  ...
parents bd012f3a 17e8b764
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ properties:
      - allwinner,sun8i-a83t-ths
      - allwinner,sun8i-h3-ths
      - allwinner,sun8i-r40-ths
      - allwinner,sun20i-d1-ths
      - allwinner,sun50i-a64-ths
      - allwinner,sun50i-a100-ths
      - allwinner,sun50i-h5-ths
@@ -61,6 +62,7 @@ allOf:
        compatible:
          contains:
            enum:
              - allwinner,sun20i-d1-ths
              - allwinner,sun50i-a100-ths
              - allwinner,sun50i-h6-ths

@@ -84,7 +86,9 @@ allOf:
      properties:
        compatible:
          contains:
            const: allwinner,sun8i-h3-ths
            enum:
              - allwinner,sun8i-h3-ths
              - allwinner,sun20i-d1-ths

    then:
      properties:
@@ -103,6 +107,7 @@ allOf:
            enum:
              - allwinner,sun8i-h3-ths
              - allwinner,sun8i-r40-ths
              - allwinner,sun20i-d1-ths
              - allwinner,sun50i-a64-ths
              - allwinner,sun50i-a100-ths
              - allwinner,sun50i-h5-ths
+9 −1
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@ maintainers:
  - zhanghongchen <zhanghongchen@loongson.cn>
  - Yinbo Zhu <zhuyinbo@loongson.cn>

allOf:
  - $ref: /schemas/thermal/thermal-sensor.yaml#

properties:
  compatible:
    oneOf:
@@ -26,12 +29,16 @@ properties:
  interrupts:
    maxItems: 1

  '#thermal-sensor-cells':
    const: 1

required:
  - compatible
  - reg
  - interrupts
  - '#thermal-sensor-cells'

additionalProperties: false
unevaluatedProperties: false

examples:
  - |
@@ -41,4 +48,5 @@ examples:
        reg = <0x1fe01500 0x30>;
        interrupt-parent = <&liointc0>;
        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
        #thermal-sensor-cells = <1>;
    };
+99 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/mediatek,thermal.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Mediatek thermal controller for on-SoC temperatures

maintainers:
  - Sascha Hauer <s.hauer@pengutronix.de>

description:
  This device does not have its own ADC, instead it directly controls the AUXADC
  via AHB bus accesses. For this reason it needs phandles to the AUXADC. Also it
  controls a mux in the apmixedsys register space via AHB bus accesses, so a
  phandle to the APMIXEDSYS is also needed.

allOf:
  - $ref: thermal-sensor.yaml#

properties:
  compatible:
    enum:
      - mediatek,mt2701-thermal
      - mediatek,mt2712-thermal
      - mediatek,mt7622-thermal
      - mediatek,mt7981-thermal
      - mediatek,mt7986-thermal
      - mediatek,mt8173-thermal
      - mediatek,mt8183-thermal
      - mediatek,mt8365-thermal
      - mediatek,mt8516-thermal

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    items:
      - description: Main clock needed for register access
      - description: The AUXADC clock

  clock-names:
    items:
      - const: therm
      - const: auxadc

  mediatek,auxadc:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: A phandle to the AUXADC which the thermal controller uses

  mediatek,apmixedsys:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: A phandle to the APMIXEDSYS controller

  resets:
    description: Reset controller controlling the thermal controller

  nvmem-cells:
    items:
      - description:
          NVMEM cell with EEPROMA phandle to the calibration data provided by an
          NVMEM device. If unspecified default values shall be used.

  nvmem-cell-names:
    items:
      - const: calibration-data

required:
  - reg
  - interrupts
  - clocks
  - clock-names
  - mediatek,auxadc
  - mediatek,apmixedsys

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/clock/mt8173-clk.h>
    #include <dt-bindings/reset/mt8173-resets.h>

    thermal@1100b000 {
        compatible = "mediatek,mt8173-thermal";
        reg = <0x1100b000 0x1000>;
        interrupts = <0 70 IRQ_TYPE_LEVEL_LOW>;
        clocks = <&pericfg CLK_PERI_THERM>, <&pericfg CLK_PERI_AUXADC>;
        clock-names = "therm", "auxadc";
        resets = <&pericfg MT8173_PERI_THERM_SW_RST>;
        mediatek,auxadc = <&auxadc>;
        mediatek,apmixedsys = <&apmixedsys>;
        nvmem-cells = <&thermal_calibration_data>;
        nvmem-cell-names = "calibration-data";
        #thermal-sensor-cells = <1>;
    };
+0 −52
Original line number Diff line number Diff line
* Mediatek Thermal

This describes the device tree binding for the Mediatek thermal controller
which measures the on-SoC temperatures. This device does not have its own ADC,
instead it directly controls the AUXADC via AHB bus accesses. For this reason
this device needs phandles to the AUXADC. Also it controls a mux in the
apmixedsys register space via AHB bus accesses, so a phandle to the APMIXEDSYS
is also needed.

Required properties:
- compatible:
  - "mediatek,mt8173-thermal" : For MT8173 family of SoCs
  - "mediatek,mt2701-thermal" : For MT2701 family of SoCs
  - "mediatek,mt2712-thermal" : For MT2712 family of SoCs
  - "mediatek,mt7622-thermal" : For MT7622 SoC
  - "mediatek,mt7981-thermal", "mediatek,mt7986-thermal" : For MT7981 SoC
  - "mediatek,mt7986-thermal" : For MT7986 SoC
  - "mediatek,mt8183-thermal" : For MT8183 family of SoCs
  - "mediatek,mt8365-thermal" : For MT8365 family of SoCs
  - "mediatek,mt8516-thermal", "mediatek,mt2701-thermal : For MT8516 family of SoCs
- reg: Address range of the thermal controller
- interrupts: IRQ for the thermal controller
- clocks, clock-names: Clocks needed for the thermal controller. required
                       clocks are:
		       "therm":	 Main clock needed for register access
		       "auxadc": The AUXADC clock
- mediatek,auxadc: A phandle to the AUXADC which the thermal controller uses
- mediatek,apmixedsys: A phandle to the APMIXEDSYS controller.
- #thermal-sensor-cells : Should be 0. See Documentation/devicetree/bindings/thermal/thermal-sensor.yaml for a description.

Optional properties:
- resets: Reference to the reset controller controlling the thermal controller.
- nvmem-cells: A phandle to the calibration data provided by a nvmem device. If
               unspecified default values shall be used.
- nvmem-cell-names: Should be "calibration-data"

Example:

	thermal: thermal@1100b000 {
		#thermal-sensor-cells = <1>;
		compatible = "mediatek,mt8173-thermal";
		reg = <0 0x1100b000 0 0x1000>;
		interrupts = <0 70 IRQ_TYPE_LEVEL_LOW>;
		clocks = <&pericfg CLK_PERI_THERM>, <&pericfg CLK_PERI_AUXADC>;
		clock-names = "therm", "auxadc";
		resets = <&pericfg MT8173_PERI_THERM_SW_RST>;
		reset-names = "therm";
		mediatek,auxadc = <&auxadc>;
		mediatek,apmixedsys = <&apmixedsys>;
		nvmem-cells = <&thermal_calibration_data>;
		nvmem-cell-names = "calibration-data";
	};
+5 −3
Original line number Diff line number Diff line
@@ -114,12 +114,14 @@ examples:
  - |
    #include <dt-bindings/iio/qcom,spmi-vadc.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    spmi_bus {

    pmic {
        #address-cells = <1>;
        #size-cells = <0>;

        pm8998_adc: adc@3100 {
            reg = <0x3100>;
            compatible = "qcom,spmi-adc-rev2";
            reg = <0x3100>;
            #address-cells = <1>;
            #size-cells = <0>;
            #io-channel-cells = <1>;
@@ -130,7 +132,7 @@ examples:
            };
        };

        pm8998_adc_tm: adc-tm@3400 {
        adc-tm@3400 {
            compatible = "qcom,spmi-adc-tm-hc";
            reg = <0x3400>;
            interrupts = <0x2 0x34 0x0 IRQ_TYPE_EDGE_RISING>;
Loading