Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp2131912ybv; Sun, 23 Feb 2020 23:27:31 -0800 (PST) X-Google-Smtp-Source: APXvYqw7Fw44mMMGTjMZdLV0MqUA/twXdFergwlgPHCDpHASpzP17kqn9QNenp4vIP9UHwDQs7C8 X-Received: by 2002:a9d:6c9a:: with SMTP id c26mr37336452otr.279.1582529251698; Sun, 23 Feb 2020 23:27:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582529251; cv=none; d=google.com; s=arc-20160816; b=JEPftOP8oKeLPVB+VNrm8vfSYig1/XLzSliFnm9YpyMs57r9GB5pRbGOU1avdVfphQ V2wGVPKGzqmDy2Uai0bBQB+SeUjyszQAPcxsl3Av5t3WmZ9Rdtl2bclNNVcyRL+sW3Vi P72kG61L+WPy5Tei4P7fOmnTCKgloF/0H1IoMQjydch5ne3VRM9peOHaZcRPueY8Gml2 Cu04G5LB9uunSQ4lLgXKI+gmZjMcSM4zcn8GgKzSRtHU1SGZadDs29ywbNcOFnsVbwto UV8KDY7Ng1ovUUmj9np0rWPYjnXL1Rf09AoL+AgxYXSPftuVU5IbQOxgeOGYaJ52lHn+ 5meA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=J1gAzTYfSIPQWBo5afUVA7fbeA6fOiqj7Y8eCbgr5WQ=; b=o9dYLzvcD5QHhPCdYWunZZCHWi6eLtKOrPUZw6P3c/n7Gvo9s2m/X8L4VUq6Xxf+Sq IAebZFPVdOxFaId/3Kb5QCFmZu7nCas0XMmGrZ5OeBoAu78C5ft2CLRmuVCloY8MlJfO qZc0gLxsmyisqTPlONbpJ1hhycpDhURDyohaIbR6gTRkzTOTCl8kP/NAzyO57xirufHE 1XptkerYKZw1HuZz+wWNu3FOdLlgsGCnl+FdcCfhSQdZTuS4tY/ymLePqW0hkoOP5ix0 k5Lc2azJZWpKTo0oGfHHAoFOBp0xxMXFC6eeXMPM/wyY7cpRxxBzq4FPIDz91S+tGNR0 XNTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Qn6AqQ1H; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q25si6050238otg.128.2020.02.23.23.27.19; Sun, 23 Feb 2020 23:27:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Qn6AqQ1H; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727348AbgBXHZ5 (ORCPT + 99 others); Mon, 24 Feb 2020 02:25:57 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:44098 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727334AbgBXHZ4 (ORCPT ); Mon, 24 Feb 2020 02:25:56 -0500 Received: by mail-pl1-f195.google.com with SMTP id d9so3672381plo.11 for ; Sun, 23 Feb 2020 23:25:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J1gAzTYfSIPQWBo5afUVA7fbeA6fOiqj7Y8eCbgr5WQ=; b=Qn6AqQ1HolgmgiER4czPVmMw1y7AzSpzYl5JzzWyI16mnEjGkzrEx3Vnk+MNDX4BbT M4S6EzHkI1MLZpcS5W/Hq9vOghtcgsKmP67bEj9rZDh8EXFbKSyYRYJ4aMlN1GwI2g60 pl1nl45YntLmjrRcujhaoi0reGDb/Y9vnhuA+OCAK4l/0BXDLjFOgrqXAIilITF4gKkn BtIf/5adaEWovn2prsDh63wA2U0DNXlnA2UdieB+n/am8fSxqLEYjdNHEQ/u2YUYtIoz UCaQH/m8v2kIfggdYzSOXvYz2GRZ4RJ/uc2Vlg+caN5eIKBSIy7PBU1wMlncDsoEPlEi bwdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J1gAzTYfSIPQWBo5afUVA7fbeA6fOiqj7Y8eCbgr5WQ=; b=juI5jo9i2fPkORV6AopWhta2Tqbh/R6azAr2NcTTfN+jmcenAfo+XpGj8FCIEZzKTB kn8O6HVBGY1pcohHjkjCCAPBxMTPLSvJHEfJpuB/2n1NtMtJ48ArFPLiHAxD6oT4bKvE hHHIgs10Su0mxqtBgXFbp8agu8Swrkvz7zWagfc5g2jTvF55pSmash2TCAU8La85Ioqk 9q3iG4quYwuKgBiaf/zQLFUjZ3ASvHl0A8klSofmTE+KVMKsF3MTfm9Qzh5LoA3Fi8T6 krao4QBt8I8AhPlf4MYbRpMt+K0lZZF77YDYnZUAwxjCo4hAhF0NJxDNNEFVeD5Me9Av 2/yw== X-Gm-Message-State: APjAAAWXKqZGC/4t//PLymnxIozmi90NmzGzsWZ4VXcpM00oV5Xrap0g 9YvvtigqIcjdQI7g5EnpPXTozJ2K1vc= X-Received: by 2002:a17:90a:3a86:: with SMTP id b6mr18448172pjc.96.1582529154491; Sun, 23 Feb 2020 23:25:54 -0800 (PST) Received: from localhost ([45.127.44.57]) by smtp.gmail.com with ESMTPSA id q6sm11408012pfh.127.2020.02.23.23.25.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2020 23:25:53 -0800 (PST) From: Amit Kucheria To: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, swboyd@chromium.org, mka@chromium.org, daniel.lezcano@linaro.org, Amit Kucheria , Zhang Rui Cc: linux-pm@vger.kernel.org, devicetree@vger.kernel.org Subject: [RFC PATCH v1 3/3] dt-bindings: thermal: Add yaml bindings for thermal zones Date: Mon, 24 Feb 2020 12:55:37 +0530 Message-Id: <59d24f8ec98e29d119c5cbdb2abe6d4644cc51cf.1582528977.git.amit.kucheria@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As part of moving the thermal bindings to YAML, split it up into 3 bindings: thermal sensors, cooling devices and thermal zones. The thermal-zone binding is a software abstraction to capture the properties of each zone - how often they should be checked, the temperature thresholds (trips) at which mitigation actions need to be taken and the level of mitigation needed at those thresholds. Signed-off-by: Amit Kucheria --- .../bindings/thermal/thermal-zones.yaml | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 Documentation/devicetree/bindings/thermal/thermal-zones.yaml diff --git a/Documentation/devicetree/bindings/thermal/thermal-zones.yaml b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml new file mode 100644 index 000000000000..bc1ce8e41324 --- /dev/null +++ b/Documentation/devicetree/bindings/thermal/thermal-zones.yaml @@ -0,0 +1,302 @@ +# SPDX-License-Identifier: (GPL-2.0 OR MIT) +# Copyright 2020 Linaro Ltd. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/thermal/thermal-zones.yaml# +$schema: http://devicetree.org/meta-schemas/base.yaml# + +title: Thermal zone binding + +maintainers: + - Amit Kucheria + +description: | + Thermal management is achieved in devicetree by describing the sensor hardware + and the software abstraction of cooling devices and thermal zones required to + take appropriate action to mitigate thermal overloads. + + The following node types are used to completely describe a thermal management + system in devicetree: + - thermal-sensor: device that measures temperature, has SoC-specific bindings + - cooling-device: device used to dissipate heat either passively or artively + - thermal-zones: a container of the following node types used to describe all + thermal data for the platform + + This binding describes the thermal-zones. + + The polling-delay properties of a thermal-zone are bound to the maximum dT/dt + (temperature derivative over time) in two situations for a thermal zone: + 1. when passive cooling is activated (polling-delay-passive) + 2. when the zone just needs to be monitored (polling-delay) or when + active cooling is activated. + + The maximum dT/dt is highly bound to hardware power consumption and + dissipation capability. The delays should be chosen to account for said + max dT/dt, such that a device does not cross several trip boundaries + unexpectedly between polls. Choosing the right polling delays shall avoid + having the device in temperature ranges that may damage the silicon structures + and reduce silicon lifetime. + +properties: + thermal-zones: + type: object + description: + A /thermal-zones node is required in order to use the thermal framework to + manage input from the various thermal zones in the system in order to + mitigate thermal overload conditions. It does not represent a real device + in the system, but acts as a container to link thermal sensor devices, + platform-data regarding temperature thresholds and the mitigation actions + to take when the temperature crosses those thresholds. + + properties: + $nodename: + pattern: "^[a-zA-Z][a-zA-Z0-9,\\-]{1,12}-thermal$" + type: object + description: + Each thermal zone node contains information about how frequently it + must be checked, the sensor responsible for reporting temperature for + this zone, one sub-node containing the various trip points for this + zone and one sub-node containing all the zone cooling-maps. + + properties: + polling-delay: + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + description: + The maximum number of milliseconds to wait between polls when + checking this thermal zone. Setting this to 0 disables the polling + timers setup by the thermal framework and assumes that the thermal + sensors in this zone support interrupts. + + polling-delay-passive: + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + description: + The maximum number of milliseconds to wait between polls when + checking this thermal zone while doing passive cooling. Setting + this to 0 disables the polling timers setup by the thermal + framework and assumes that the thermal sensors in this zone + support interrupts. + + thermal-sensors: + $ref: /schemas/types.yaml#/definitions/phandle-array + description: + A list of thermal sensor phandles and sensor specifiers used to + monitor this thermal zone. + + trips: + type: object + description: + This node describes a set of points in the temperature domain at + which the thermal framework needs to takes action. The actions to + be taken are defined in another node called cooling-maps. + + patternProperties: + "^[a-zA-Z][a-zA-Z0-9,+\\._]{0,63}$": + type: object + + properties: + temperature: + $ref: /schemas/types.yaml#/definitions/int32 + description: + An integer expressing the trip temperature in millicelsius. + + hysteresis: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + An unsigned integer expressing the hysteresis delta with + respect to the trip temperature property above, also in + millicelsius. + + type: + oneOf: + - items: + - enum: + - active + - passive + - hot + - critical + description: | + There are four valid trip types, + - active - enable active cooling e.g. fans + - passive - enable passive cooling e.g. throttling cpu + - hot - send notification to driver if .notify + callback registered + - critical - send notification to driver if .notify + callback registered and trigger a shutdown + + required: + - temperature + - hysteresis + - type + + cooling-maps: + type: object + description: + This node describes the action to be taken when a thermal zone + crosses one of the temperature thresholds described in the trips + node. The action takes the form of a mapping relation between a + trip and the target cooling device state. + + patternProperties: + "^map[0-9][-a-zA-Z0-9]*$": + type: object + + properties: + trip: + $ref: /schemas/types.yaml#/definitions/phandle + description: + A phandle of a trip point node within this thermal zone. + + cooling-device: + $ref: /schemas/types.yaml#/definitions/phandle-array + description: + A list of cooling device phandles along with the minimum + and maximum cooling state specifiers for each cooling + device. Using the THERMAL_NO_LIMIT (-1UL) constant in the + cooling-device phandle limit specifier lets the framework + use the minimum and maximum cooling state for that cooling + device automatically. + + contribution: + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 100 + description: + The contribution of the cooling devices at the trip + temperature, both referenced in this map, to this thermal + zone as a percentage. + + required: + - trip + - cooling-device + +examples: + - | + #include + #include + + // Example 1: SDM845 TSENS + soc: soc@0 { + #address-cells = <2>; + #size-cells = <2>; + + /* ... */ + + tsens0: thermal-sensor@c263000 { + compatible = "qcom,sdm845-tsens", "qcom,tsens-v2"; + reg = <0 0x0c263000 0 0x1ff>, /* TM */ + <0 0x0c222000 0 0x1ff>; /* SROT */ + #qcom,sensors = <13>; + interrupts = ; + interrupt-names = "uplow"; + #thermal-sensor-cells = <1>; + }; + + tsens1: thermal-sensor@c265000 { + compatible = "qcom,sdm845-tsens", "qcom,tsens-v2"; + reg = <0 0x0c265000 0 0x1ff>, /* TM */ + <0 0x0c223000 0 0x1ff>; /* SROT */ + #qcom,sensors = <8>; + interrupts = ; + interrupt-names = "uplow"; + #thermal-sensor-cells = <1>; + }; + }; + + /* ... */ + + thermal-zones { + cpu0-thermal { + polling-delay-passive = <250>; + polling-delay = <1000>; + + thermal-sensors = <&tsens0 1>; + + trips { + cpu0_alert0: trip-point0 { + temperature = <90000>; + hysteresis = <2000>; + type = "passive"; + }; + + cpu0_alert1: trip-point1 { + temperature = <95000>; + hysteresis = <2000>; + type = "passive"; + }; + + cpu0_crit: cpu_crit { + temperature = <110000>; + hysteresis = <1000>; + type = "critical"; + }; + }; + + cooling-maps { + map0 { + trip = <&cpu0_alert0>; + cooling-device = <&CPU0 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU1 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU2 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU3 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>; + }; + + map1 { + trip = <&cpu0_alert1>; + cooling-device = <&CPU0 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU1 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU2 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>, + <&CPU3 THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>; + }; + }; + }; + + /* ... */ + + cluster0-thermal { + polling-delay-passive = <250>; + polling-delay = <1000>; + + thermal-sensors = <&tsens0 5>; + + trips { + cluster0_alert0: trip-point0 { + temperature = <90000>; + hysteresis = <2000>; + type = "hot"; + }; + cluster0_crit: cluster0_crit { + temperature = <110000>; + hysteresis = <2000>; + type = "critical"; + }; + }; + }; + + /* ... */ + + gpu-thermal-top { + polling-delay-passive = <250>; + polling-delay = <1000>; + + thermal-sensors = <&tsens0 11>; + + trips { + gpu1_alert0: trip-point0 { + temperature = <90000>; + hysteresis = <2000>; + type = "hot"; + }; + }; + }; + }; +... -- 2.20.1