linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
@ 2025-06-10 12:32 Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode Nicolas Frattaroli
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli, Ye Zhang

This series adds support for the RK3576's thermal sensor.

The sensor has six channels, providing measurements for the package
temperature, the temperature of the big cores, the temperature of the
little cores, and the GPU, NPU and DDR controller.

In addition to adding support for the sensor itself, the series also
adds support for reading thermal trim values out of the device tree.
Most of this functionality is not specific to this SoC, but needed to be
implemented to make the sensors a little more accurate in order to
investigate whether the TRM swapped GPU and DDR or downstream swapped
GPU and DDR in terms of channel IDs, as downstream disagrees with what's
in the TRM, and the difference is so small and hard to pin down with
testing that the constant offset between the two sensors was a little
annoying for me to deal with.

I ended up going with the channel assignment the TRM lists, as I see the
DDR sensor get a larger deviation from baseline temperatures during memory
stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
claims is the GPU sensor but downstream claims is the DDR sensor. Input
from Rockchip engineers on whether the TRM is right or wrong welcome.

The trim functionality is only used by RK3576 at the moment. Code to
handle other SoCs can rely on the shared otp reading and perhaps even
the IP revision specific function, but may need its own IP revision
specific functions added as well. Absent trim functionality in other
SoCs should not interfere with the modified common code paths.

Patch 1 is a cleanup patch for the rockchip thermal driver, where a
function was confusingly named.

Patch 2 adds the RK3576 compatible to the bindings.

Patch 3 adds support for this SoC's thermal chip to the driver. It is a
port of the downstream commit adding support for this.

Patch 4 adds some documentation for imminent additional functionality to
the binding, namely the trim value stuff.

Patch 5 adds support for reading these OTP values in the
rockchip_thermal driver, and makes use of them. The code is mostly new
upstream code written by me, using downstream code as reference.

Patch 6 adds the basic thermal nodes required to get temperature
readings and device throttling to the rk3576.dtsi device tree.

Patch 7 adds the requisite OTP cells and tsadc nodes to the SoC's device
tree, conforming with the bindings modified in Patch 4.

For the record, here's a listing of SoCs that implement the OTP trim
functionality in some variation, with a legend that is as follows:
- A = chip-wide trim value
- B = trim_base value
- C = trim_base_frac value
- D = per-channel trim value
- E = compatible is either in mainline or in this series

The list is as follows:
- RK3502 (A____)
- RK3528 (A____)
- RK3562 (ABC__)
- RK3566 (_BCDE)
- RK3568 (_BCDE)
- RK3576 (___DE) <- the only one we're adding OTP trim for here atm
- RV1126 (AB___)

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
Changes in v6:
- dts: change polling-delay-passive to 100 for thermal zones with a
  passive cooling device, to fix the behaviour Alexey Charkov noticed,
  wherein the device would never get unthrottled otherwise
- Link to v5: https://lore.kernel.org/r/20250425-rk3576-tsadc-upstream-v5-0-0c840b99c30e@collabora.com

Changes in v5:
- Reorder dts patches to both be at the end of the series, as per
  Heiko's wishes
- Link to v4: https://lore.kernel.org/r/20250317-rk3576-tsadc-upstream-v4-0-c5029ce55d74@collabora.com

Changes in v4:
- driver: added a patch to rename tsadcv3_tshut_mode to
  tsadcv4_tshut_mode, as per Jonas' suggestion, and drop the duplicated
  function from the RK3576 support patch.
- Link to v3: https://lore.kernel.org/r/20250228-rk3576-tsadc-upstream-v3-0-4bfbb3b699b9@collabora.com

Changes in v3:
- Changed bindings back to using patternProperties, as per Rob's
  suggestions
- Adjusted dts changes to comply with the new schema
- Link to v2: https://lore.kernel.org/r/20250225-rk3576-tsadc-upstream-v2-0-6eb7b00de89c@collabora.com

Changes in v2:
- As per Rob's request, the bindings now only feature the new properties
  depending on the compatible. Since the combination is slightly
  different for each SoC anyway, this makes future work easier too.
- The different channels are now explicitly named, instead of giving
  them patternProperties names. This is once again per-compatible.
- As per Sebastian's suggestion, unified trim_l and trim_h into just one
  nvmem cell in the bindings, device tree and driver. I did this after
  verifying that downstream has no SoC where trim_l and trim_h are ever
  non-contiguous, including for SoCs upstream does not (yet) support.
- Rebased on top of next-20250225 and dropped Heiko's OTP patchset as a
  dependency as it was merged.
- Added a handy overview of which SoCs use which part of the OTP trim
  functionality in the cover letter
- Reintroduced an accidentally removed dev_dbg in the function 
  rockchip_thermal_set_trips
- Link to v1: https://lore.kernel.org/r/20250216-rk3576-tsadc-upstream-v1-0-6ec969322a14@collabora.com

---
Nicolas Frattaroli (6):
      thermal: rockchip: rename rk_tsadcv3_tshut_mode
      dt-bindings: rockchip-thermal: Add RK3576 compatible
      dt-bindings: thermal: rockchip: document otp thermal trim
      thermal: rockchip: support reading trim values from OTP
      arm64: dts: rockchip: Add thermal nodes to RK3576
      arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes

Ye Zhang (1):
      thermal: rockchip: Support RK3576 SoC in the thermal driver

 .../bindings/thermal/rockchip-thermal.yaml         |  62 +++++
 arch/arm64/boot/dts/rockchip/rk3576.dtsi           | 221 +++++++++++++++++-
 drivers/thermal/rockchip_thermal.c                 | 251 +++++++++++++++++++--
 3 files changed, 511 insertions(+), 23 deletions(-)
---
base-commit: d9946fe286439c2aeaa7953b8c316efe5b83d515
change-id: 20250215-rk3576-tsadc-upstream-7e0c193f768a

Best regards,
-- 
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-07-10 11:16   ` Heiko Stuebner
  2025-06-10 12:32 ` [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible Nicolas Frattaroli
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

The "v" version specifier here refers to the hardware IP revision.
Mainline deviated from downstream here by calling the v4 revision v3 as
it didn't support the v3 hardware revision at all.

This creates needless confusion, so rename it to rk_tsadcv4_tshut_mode
to be consistent with what the hardware wants to be called.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 drivers/thermal/rockchip_thermal.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
index a8ad85feb68fbb7ec8d79602b16c47838ecb3c00..40c7d234c3ef99f69dd8db4d8c47f9d493c0583d 100644
--- a/drivers/thermal/rockchip_thermal.c
+++ b/drivers/thermal/rockchip_thermal.c
@@ -1045,7 +1045,7 @@ static void rk_tsadcv2_tshut_mode(int chn, void __iomem *regs,
 	writel_relaxed(val, regs + TSADCV2_INT_EN);
 }
 
-static void rk_tsadcv3_tshut_mode(int chn, void __iomem *regs,
+static void rk_tsadcv4_tshut_mode(int chn, void __iomem *regs,
 				  enum tshut_mode mode)
 {
 	u32 val_gpio, val_cru;
@@ -1297,7 +1297,7 @@ static const struct rockchip_tsadc_chip rk3588_tsadc_data = {
 	.get_temp = rk_tsadcv4_get_temp,
 	.set_alarm_temp = rk_tsadcv3_alarm_temp,
 	.set_tshut_temp = rk_tsadcv3_tshut_temp,
-	.set_tshut_mode = rk_tsadcv3_tshut_mode,
+	.set_tshut_mode = rk_tsadcv4_tshut_mode,
 	.table = {
 		.id = rk3588_code_table,
 		.length = ARRAY_SIZE(rk3588_code_table),

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-07-10 11:17   ` Heiko Stuebner
  2025-06-10 12:32 ` [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver Nicolas Frattaroli
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Add a new compatible for the thermal sensor device on the RK3576 SoC.

Acked-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
index b717ea8261ca24ebaf709f410ec6372de1366b8a..49ceed68c92ce5a32ed8d4f39bd88fd052de0e80 100644
--- a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
@@ -21,6 +21,7 @@ properties:
       - rockchip,rk3368-tsadc
       - rockchip,rk3399-tsadc
       - rockchip,rk3568-tsadc
+      - rockchip,rk3576-tsadc
       - rockchip,rk3588-tsadc
       - rockchip,rv1108-tsadc
 

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-07-10 11:18   ` Heiko Stuebner
  2025-06-10 12:32 ` [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim Nicolas Frattaroli
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli, Ye Zhang

From: Ye Zhang <ye.zhang@rock-chips.com>

The RK3576 SoC has six TS-ADC channels: TOP, BIG_CORE, LITTLE_CORE,
DDR, NPU and GPU.

Signed-off-by: Ye Zhang <ye.zhang@rock-chips.com>
[ported to mainline, reworded commit message]
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 drivers/thermal/rockchip_thermal.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
index 40c7d234c3ef99f69dd8db4d8c47f9d493c0583d..89e3180667e2a8f0ef5542b0db4d9e19a21a24d3 100644
--- a/drivers/thermal/rockchip_thermal.c
+++ b/drivers/thermal/rockchip_thermal.c
@@ -1284,6 +1284,28 @@ static const struct rockchip_tsadc_chip rk3568_tsadc_data = {
 	},
 };
 
+static const struct rockchip_tsadc_chip rk3576_tsadc_data = {
+	/* top, big_core, little_core, ddr, npu, gpu */
+	.chn_offset = 0,
+	.chn_num = 6, /* six channels for tsadc */
+	.tshut_mode = TSHUT_MODE_GPIO, /* default TSHUT via GPIO give PMIC */
+	.tshut_polarity = TSHUT_LOW_ACTIVE, /* default TSHUT LOW ACTIVE */
+	.tshut_temp = 95000,
+	.initialize = rk_tsadcv8_initialize,
+	.irq_ack = rk_tsadcv4_irq_ack,
+	.control = rk_tsadcv4_control,
+	.get_temp = rk_tsadcv4_get_temp,
+	.set_alarm_temp = rk_tsadcv3_alarm_temp,
+	.set_tshut_temp = rk_tsadcv3_tshut_temp,
+	.set_tshut_mode = rk_tsadcv4_tshut_mode,
+	.table = {
+		.id = rk3588_code_table,
+		.length = ARRAY_SIZE(rk3588_code_table),
+		.data_mask = TSADCV4_DATA_MASK,
+		.mode = ADC_INCREMENT,
+	},
+};
+
 static const struct rockchip_tsadc_chip rk3588_tsadc_data = {
 	/* top, big_core0, big_core1, little_core, center, gpu, npu */
 	.chn_offset = 0,
@@ -1342,6 +1364,10 @@ static const struct of_device_id of_rockchip_thermal_match[] = {
 		.compatible = "rockchip,rk3568-tsadc",
 		.data = (void *)&rk3568_tsadc_data,
 	},
+	{
+		.compatible = "rockchip,rk3576-tsadc",
+		.data = (void *)&rk3576_tsadc_data,
+	},
 	{
 		.compatible = "rockchip,rk3588-tsadc",
 		.data = (void *)&rk3588_tsadc_data,

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (2 preceding siblings ...)
  2025-06-10 12:32 ` [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-07-10 11:21   ` Heiko Stuebner
  2025-06-10 12:32 ` [PATCH v6 5/7] thermal: rockchip: support reading trim values from OTP Nicolas Frattaroli
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Several Rockchip SoCs, such as the RK3576, can store calibration trim
data for thermal sensors in OTP cells. This capability should be
documented.

Such a rockchip thermal sensor may reference cell handles that store
both a chip-wide trim for all the sensors, as well as cell handles
for each individual sensor channel pointing to that specific sensor's
trim value.

Additionally, the thermal sensor may optionally reference cells which
store the base in terms of degrees celsius and decicelsius that the trim
is relative to.

Each SoC that implements this appears to have a slightly different
combination of chip-wide trim, base, base fractional part and
per-channel trim, so which ones do which is documented in the bindings.

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 .../bindings/thermal/rockchip-thermal.yaml         | 61 ++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
index 49ceed68c92ce5a32ed8d4f39bd88fd052de0e80..573f447cc26ed7100638277598b0e745d436fd01 100644
--- a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
@@ -40,6 +40,17 @@ properties:
       - const: tsadc
       - const: apb_pclk
 
+  nvmem-cells:
+    items:
+      - description: cell handle to where the trim's base temperature is stored
+      - description:
+          cell handle to where the trim's tenths of Celsius base value is stored
+
+  nvmem-cell-names:
+    items:
+      - const: trim_base
+      - const: trim_base_frac
+
   resets:
     minItems: 1
     maxItems: 3
@@ -51,6 +62,12 @@ properties:
       - const: tsadc
       - const: tsadc-phy
 
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
   "#thermal-sensor-cells":
     const: 1
 
@@ -72,6 +89,27 @@ properties:
     $ref: /schemas/types.yaml#/definitions/uint32
     enum: [0, 1]
 
+patternProperties:
+  "@[0-9a-f]+$":
+    type: object
+    properties:
+      reg:
+        maxItems: 1
+        description: sensor ID, a.k.a. channel number
+
+      nvmem-cells:
+        items:
+          - description: handle of cell containing calibration data
+
+      nvmem-cell-names:
+        items:
+          - const: trim
+
+    required:
+      - reg
+
+    unevaluatedProperties: false
+
 required:
   - compatible
   - reg
@@ -80,6 +118,29 @@ required:
   - clock-names
   - resets
 
+allOf:
+  - if:
+      not:
+        properties:
+          compatible:
+            contains:
+              const: rockchip,rk3568-tsadc
+    then:
+      properties:
+        nvmem-cells: false
+        nvmem-cell-names: false
+  - if:
+      not:
+        properties:
+          compatible:
+            contains:
+              enum:
+                - rockchip,rk3568-tsadc
+                - rockchip,rk3576-tsadc
+    then:
+      patternProperties:
+        "@[0-9a-f]+$": false
+
 unevaluatedProperties: false
 
 examples:

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 5/7] thermal: rockchip: support reading trim values from OTP
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (3 preceding siblings ...)
  2025-06-10 12:32 ` [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 6/7] arm64: dts: rockchip: Add thermal nodes to RK3576 Nicolas Frattaroli
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Many of the Rockchip SoCs support storing trim values for the sensors in
factory programmable memory. These values specify a fixed offset from
the sensor's returned temperature to get a more accurate picture of what
temperature the silicon is actually at.

The way this is implemented is with various OTP cells, which may be
absent. There may both be whole-TSADC trim values, as well as per-sensor
trim values.

In the downstream driver, whole-chip trim values override the per-sensor
trim values. This rewrite of the functionality changes the semantics to
something I see as slightly more useful: allow the whole-chip trim
values to serve as a fallback for lacking per-sensor trim values,
instead of overriding already present sensor trim values.

Additionally, the chip may specify an offset (trim_base, trim_base_frac)
in degrees celsius and degrees decicelsius respectively which defines
what the basis is from which the trim, if any, should be calculated
from. By default, this is 30 degrees Celsius, but the chip can once
again specify a different value through OTP cells.

The implementation of these trim calculations have been tested
extensively on an RK3576, where it was confirmed to get rid of pesky 1.8
degree Celsius offsets between certain sensors.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 drivers/thermal/rockchip_thermal.c | 221 +++++++++++++++++++++++++++++++++----
 1 file changed, 202 insertions(+), 19 deletions(-)

diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
index 89e3180667e2a8f0ef5542b0db4d9e19a21a24d3..3beff9b6fac3abe8948b56132b618ff1bed57217 100644
--- a/drivers/thermal/rockchip_thermal.c
+++ b/drivers/thermal/rockchip_thermal.c
@@ -9,6 +9,7 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/module.h>
+#include <linux/nvmem-consumer.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
@@ -69,16 +70,18 @@ struct chip_tsadc_table {
  * struct rockchip_tsadc_chip - hold the private data of tsadc chip
  * @chn_offset: the channel offset of the first channel
  * @chn_num: the channel number of tsadc chip
- * @tshut_temp: the hardware-controlled shutdown temperature value
+ * @trim_slope: used to convert the trim code to a temperature in millicelsius
+ * @tshut_temp: the hardware-controlled shutdown temperature value, with no trim
  * @tshut_mode: the hardware-controlled shutdown mode (0:CRU 1:GPIO)
  * @tshut_polarity: the hardware-controlled active polarity (0:LOW 1:HIGH)
  * @initialize: SoC special initialize tsadc controller method
  * @irq_ack: clear the interrupt
  * @control: enable/disable method for the tsadc controller
- * @get_temp: get the temperature
+ * @get_temp: get the raw temperature, unadjusted by trim
  * @set_alarm_temp: set the high temperature interrupt
  * @set_tshut_temp: set the hardware-controlled shutdown temperature
  * @set_tshut_mode: set the hardware-controlled shutdown mode
+ * @get_trim_code: convert a hardware temperature code to one adjusted for by trim
  * @table: the chip-specific conversion table
  */
 struct rockchip_tsadc_chip {
@@ -86,6 +89,9 @@ struct rockchip_tsadc_chip {
 	int chn_offset;
 	int chn_num;
 
+	/* Used to convert trim code to trim temp */
+	int trim_slope;
+
 	/* The hardware-controlled tshut property */
 	int tshut_temp;
 	enum tshut_mode tshut_mode;
@@ -105,6 +111,8 @@ struct rockchip_tsadc_chip {
 	int (*set_tshut_temp)(const struct chip_tsadc_table *table,
 			      int chn, void __iomem *reg, int temp);
 	void (*set_tshut_mode)(int chn, void __iomem *reg, enum tshut_mode m);
+	int (*get_trim_code)(const struct chip_tsadc_table *table,
+			     int code, int trim_base, int trim_base_frac);
 
 	/* Per-table methods */
 	struct chip_tsadc_table table;
@@ -114,12 +122,16 @@ struct rockchip_tsadc_chip {
  * struct rockchip_thermal_sensor - hold the information of thermal sensor
  * @thermal:  pointer to the platform/configuration data
  * @tzd: pointer to a thermal zone
+ * @of_node: pointer to the device_node representing this sensor, if any
  * @id: identifier of the thermal sensor
+ * @trim_temp: per-sensor trim temperature value
  */
 struct rockchip_thermal_sensor {
 	struct rockchip_thermal_data *thermal;
 	struct thermal_zone_device *tzd;
+	struct device_node *of_node;
 	int id;
+	int trim_temp;
 };
 
 /**
@@ -132,7 +144,11 @@ struct rockchip_thermal_sensor {
  * @pclk: the advanced peripherals bus clock
  * @grf: the general register file will be used to do static set by software
  * @regs: the base address of tsadc controller
- * @tshut_temp: the hardware-controlled shutdown temperature value
+ * @trim_base: major component of sensor trim value, in Celsius
+ * @trim_base_frac: minor component of sensor trim value, in Decicelsius
+ * @trim: fallback thermal trim value for each channel
+ * @tshut_temp: the hardware-controlled shutdown temperature value, with no trim
+ * @trim_temp: the fallback trim temperature for the whole sensor
  * @tshut_mode: the hardware-controlled shutdown mode (0:CRU 1:GPIO)
  * @tshut_polarity: the hardware-controlled active polarity (0:LOW 1:HIGH)
  */
@@ -149,7 +165,12 @@ struct rockchip_thermal_data {
 	struct regmap *grf;
 	void __iomem *regs;
 
+	int trim_base;
+	int trim_base_frac;
+	int trim;
+
 	int tshut_temp;
+	int trim_temp;
 	enum tshut_mode tshut_mode;
 	enum tshut_polarity tshut_polarity;
 };
@@ -249,6 +270,9 @@ struct rockchip_thermal_data {
 
 #define GRF_CON_TSADC_CH_INV			(0x10001 << 1)
 
+
+#define RK_MAX_TEMP				(180000)
+
 /**
  * struct tsadc_table - code to temperature conversion table
  * @code: the value of adc channel
@@ -1061,6 +1085,15 @@ static void rk_tsadcv4_tshut_mode(int chn, void __iomem *regs,
 	writel_relaxed(val_cru, regs + TSADCV3_HSHUT_CRU_INT_EN);
 }
 
+static int rk_tsadcv2_get_trim_code(const struct chip_tsadc_table *table,
+				    int code, int trim_base, int trim_base_frac)
+{
+	int temp = trim_base * 1000 + trim_base_frac * 100;
+	u32 base_code = rk_tsadcv2_temp_to_code(table, temp);
+
+	return code - base_code;
+}
+
 static const struct rockchip_tsadc_chip px30_tsadc_data = {
 	/* cpu, gpu */
 	.chn_offset = 0,
@@ -1298,6 +1331,8 @@ static const struct rockchip_tsadc_chip rk3576_tsadc_data = {
 	.set_alarm_temp = rk_tsadcv3_alarm_temp,
 	.set_tshut_temp = rk_tsadcv3_tshut_temp,
 	.set_tshut_mode = rk_tsadcv4_tshut_mode,
+	.get_trim_code = rk_tsadcv2_get_trim_code,
+	.trim_slope = 923,
 	.table = {
 		.id = rk3588_code_table,
 		.length = ARRAY_SIZE(rk3588_code_table),
@@ -1413,7 +1448,7 @@ static int rockchip_thermal_set_trips(struct thermal_zone_device *tz, int low, i
 		__func__, sensor->id, low, high);
 
 	return tsadc->set_alarm_temp(&tsadc->table,
-				     sensor->id, thermal->regs, high);
+				     sensor->id, thermal->regs, high + sensor->trim_temp);
 }
 
 static int rockchip_thermal_get_temp(struct thermal_zone_device *tz, int *out_temp)
@@ -1425,6 +1460,8 @@ static int rockchip_thermal_get_temp(struct thermal_zone_device *tz, int *out_te
 
 	retval = tsadc->get_temp(&tsadc->table,
 				 sensor->id, thermal->regs, out_temp);
+	*out_temp -= sensor->trim_temp;
+
 	return retval;
 }
 
@@ -1433,6 +1470,104 @@ static const struct thermal_zone_device_ops rockchip_of_thermal_ops = {
 	.set_trips = rockchip_thermal_set_trips,
 };
 
+/**
+ * rockchip_get_efuse_value - read an OTP cell from a device node
+ * @np: pointer to the device node with the nvmem-cells property
+ * @cell_name: name of cell that should be read
+ * @value: pointer to where the read value will be placed
+ *
+ * Return: Negative errno on failure, during which *value will not be touched,
+ * or 0 on success.
+ */
+static int rockchip_get_efuse_value(struct device_node *np, const char *cell_name,
+				    int *value)
+{
+	struct nvmem_cell *cell;
+	int ret = 0;
+	size_t len;
+	u8 *buf;
+	int i;
+
+	cell = of_nvmem_cell_get(np, cell_name);
+	if (IS_ERR(cell))
+		return PTR_ERR(cell);
+
+	buf = nvmem_cell_read(cell, &len);
+
+	nvmem_cell_put(cell);
+
+	if (IS_ERR(buf))
+		return PTR_ERR(buf);
+
+	if (len > sizeof(*value)) {
+		ret = -ERANGE;
+		goto exit;
+	}
+
+	/* Copy with implicit endian conversion */
+	*value = 0;
+	for (i = 0; i < len; i++)
+		*value |= (int) buf[i] << (8 * i);
+
+exit:
+	kfree(buf);
+	return ret;
+}
+
+static int rockchip_get_trim_configuration(struct device *dev, struct device_node *np,
+					   struct rockchip_thermal_data *thermal)
+{
+	const struct rockchip_tsadc_chip *tsadc = thermal->chip;
+	int trim_base = 0, trim_base_frac = 0, trim = 0;
+	int trim_code;
+	int ret;
+
+	thermal->trim_base = 0;
+	thermal->trim_base_frac = 0;
+	thermal->trim = 0;
+
+	if (!tsadc->get_trim_code)
+		return 0;
+
+	ret = rockchip_get_efuse_value(np, "trim_base", &trim_base);
+	if (ret < 0) {
+		if (ret == -ENOENT) {
+			trim_base = 30;
+			dev_dbg(dev, "trim_base is absent, defaulting to 30\n");
+		} else {
+			dev_err(dev, "failed reading nvmem value of trim_base: %pe\n",
+				ERR_PTR(ret));
+			return ret;
+		}
+	}
+	ret = rockchip_get_efuse_value(np, "trim_base_frac", &trim_base_frac);
+	if (ret < 0) {
+		if (ret == -ENOENT) {
+			dev_dbg(dev, "trim_base_frac is absent, defaulting to 0\n");
+		} else {
+			dev_err(dev, "failed reading nvmem value of trim_base_frac: %pe\n",
+				ERR_PTR(ret));
+			return ret;
+		}
+	}
+	thermal->trim_base = trim_base;
+	thermal->trim_base_frac = trim_base_frac;
+
+	/*
+	 * If the tsadc node contains the trim property, then it is used in the
+	 * absence of per-channel trim values
+	 */
+	if (!rockchip_get_efuse_value(np, "trim", &trim))
+		thermal->trim = trim;
+	if (trim) {
+		trim_code = tsadc->get_trim_code(&tsadc->table, trim,
+						 trim_base, trim_base_frac);
+		thermal->trim_temp = thermal->chip->trim_slope * trim_code;
+	}
+
+	return 0;
+}
+
 static int rockchip_configure_from_dt(struct device *dev,
 				      struct device_node *np,
 				      struct rockchip_thermal_data *thermal)
@@ -1493,6 +1628,8 @@ static int rockchip_configure_from_dt(struct device *dev,
 	if (IS_ERR(thermal->grf))
 		dev_warn(dev, "Missing rockchip,grf property\n");
 
+	rockchip_get_trim_configuration(dev, np, thermal);
+
 	return 0;
 }
 
@@ -1503,23 +1640,50 @@ rockchip_thermal_register_sensor(struct platform_device *pdev,
 				 int id)
 {
 	const struct rockchip_tsadc_chip *tsadc = thermal->chip;
+	struct device *dev = &pdev->dev;
+	int trim = thermal->trim;
+	int trim_code, tshut_temp;
+	int trim_temp = 0;
 	int error;
 
+	if (thermal->trim_temp)
+		trim_temp = thermal->trim_temp;
+
+	if (tsadc->get_trim_code && sensor->of_node) {
+		error = rockchip_get_efuse_value(sensor->of_node, "trim", &trim);
+		if (error < 0 && error != -ENOENT) {
+			dev_err(dev, "failed reading trim of sensor %d: %pe\n",
+				id, ERR_PTR(error));
+			return error;
+		}
+		if (trim) {
+			trim_code = tsadc->get_trim_code(&tsadc->table, trim,
+							 thermal->trim_base,
+							 thermal->trim_base_frac);
+			trim_temp = thermal->chip->trim_slope * trim_code;
+		}
+	}
+
+	sensor->trim_temp = trim_temp;
+
+	dev_dbg(dev, "trim of sensor %d is %d\n", id, sensor->trim_temp);
+
+	tshut_temp = min(thermal->tshut_temp + sensor->trim_temp, RK_MAX_TEMP);
+
 	tsadc->set_tshut_mode(id, thermal->regs, thermal->tshut_mode);
 
-	error = tsadc->set_tshut_temp(&tsadc->table, id, thermal->regs,
-			      thermal->tshut_temp);
+	error = tsadc->set_tshut_temp(&tsadc->table, id, thermal->regs, tshut_temp);
 	if (error)
-		dev_err(&pdev->dev, "%s: invalid tshut=%d, error=%d\n",
-			__func__, thermal->tshut_temp, error);
+		dev_err(dev, "%s: invalid tshut=%d, error=%d\n",
+			__func__, tshut_temp, error);
 
 	sensor->thermal = thermal;
 	sensor->id = id;
-	sensor->tzd = devm_thermal_of_zone_register(&pdev->dev, id, sensor,
+	sensor->tzd = devm_thermal_of_zone_register(dev, id, sensor,
 						    &rockchip_of_thermal_ops);
 	if (IS_ERR(sensor->tzd)) {
 		error = PTR_ERR(sensor->tzd);
-		dev_err(&pdev->dev, "failed to register sensor %d: %d\n",
+		dev_err(dev, "failed to register sensor %d: %d\n",
 			id, error);
 		return error;
 	}
@@ -1542,9 +1706,11 @@ static int rockchip_thermal_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
 	struct rockchip_thermal_data *thermal;
+	struct device_node *child;
 	int irq;
 	int i;
 	int error;
+	u32 chn;
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0)
@@ -1595,6 +1761,18 @@ static int rockchip_thermal_probe(struct platform_device *pdev)
 	thermal->chip->initialize(thermal->grf, thermal->regs,
 				  thermal->tshut_polarity);
 
+	for_each_available_child_of_node(np, child) {
+		if (!of_property_read_u32(child, "reg", &chn)) {
+			if (chn < thermal->chip->chn_num)
+				thermal->sensors[chn].of_node = child;
+			else
+				dev_warn(&pdev->dev,
+					 "sensor address (%d) too large, ignoring its trim\n",
+					 chn);
+		}
+
+	}
+
 	for (i = 0; i < thermal->chip->chn_num; i++) {
 		error = rockchip_thermal_register_sensor(pdev, thermal,
 						&thermal->sensors[i],
@@ -1664,8 +1842,11 @@ static int __maybe_unused rockchip_thermal_suspend(struct device *dev)
 static int __maybe_unused rockchip_thermal_resume(struct device *dev)
 {
 	struct rockchip_thermal_data *thermal = dev_get_drvdata(dev);
-	int i;
+	const struct rockchip_tsadc_chip *tsadc = thermal->chip;
+	struct rockchip_thermal_sensor *sensor;
+	int tshut_temp;
 	int error;
+	int i;
 
 	error = clk_enable(thermal->clk);
 	if (error)
@@ -1679,21 +1860,23 @@ static int __maybe_unused rockchip_thermal_resume(struct device *dev)
 
 	rockchip_thermal_reset_controller(thermal->reset);
 
-	thermal->chip->initialize(thermal->grf, thermal->regs,
-				  thermal->tshut_polarity);
+	tsadc->initialize(thermal->grf, thermal->regs, thermal->tshut_polarity);
 
 	for (i = 0; i < thermal->chip->chn_num; i++) {
-		int id = thermal->sensors[i].id;
+		sensor = &thermal->sensors[i];
+
+		tshut_temp = min(thermal->tshut_temp + sensor->trim_temp,
+				 RK_MAX_TEMP);
 
-		thermal->chip->set_tshut_mode(id, thermal->regs,
+		tsadc->set_tshut_mode(sensor->id, thermal->regs,
 					      thermal->tshut_mode);
 
-		error = thermal->chip->set_tshut_temp(&thermal->chip->table,
-					      id, thermal->regs,
-					      thermal->tshut_temp);
+		error = tsadc->set_tshut_temp(&thermal->chip->table,
+					      sensor->id, thermal->regs,
+					      tshut_temp);
 		if (error)
 			dev_err(dev, "%s: invalid tshut=%d, error=%d\n",
-				__func__, thermal->tshut_temp, error);
+				__func__, tshut_temp, error);
 	}
 
 	thermal->chip->control(thermal->regs, true);

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 6/7] arm64: dts: rockchip: Add thermal nodes to RK3576
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (4 preceding siblings ...)
  2025-06-10 12:32 ` [PATCH v6 5/7] thermal: rockchip: support reading trim values from OTP Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-06-10 12:32 ` [PATCH v6 7/7] arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes Nicolas Frattaroli
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Add the TSADC node to the RK3576. Additionally, add everything the TSADC
needs to function, i.e. thermal zones, their trip points and maps, as
well as adjust the CPU cooling-cells property.

The polling-delay properties are set to 0 as we do have interrupts for
this TSADC on this particular SoC, though the polling-delay-passive
properties are set to 100 for the thermal zones that have a passive
cooling device, as otherwise the thermal throttling behaviour never
unthrottles.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 arch/arm64/boot/dts/rockchip/rk3576.dtsi | 164 ++++++++++++++++++++++++++++++-
 1 file changed, 162 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
index 1086482f04792325dc4c22fb8ceeb27eef59afe4..dbc527ec60cfac0bbdb881a27d3ff765366be99e 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
@@ -11,6 +11,7 @@
 #include <dt-bindings/power/rockchip,rk3576-power.h>
 #include <dt-bindings/reset/rockchip,rk3576-cru.h>
 #include <dt-bindings/soc/rockchip,boot-mode.h>
+#include <dt-bindings/thermal/thermal.h>
 
 / {
 	compatible = "rockchip,rk3576";
@@ -113,9 +114,9 @@ cpu_l0: cpu@0 {
 			capacity-dmips-mhz = <485>;
 			clocks = <&scmi_clk SCMI_ARMCLK_L>;
 			operating-points-v2 = <&cluster0_opp_table>;
-			#cooling-cells = <2>;
 			dynamic-power-coefficient = <120>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_l1: cpu@1 {
@@ -127,6 +128,7 @@ cpu_l1: cpu@1 {
 			clocks = <&scmi_clk SCMI_ARMCLK_L>;
 			operating-points-v2 = <&cluster0_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_l2: cpu@2 {
@@ -138,6 +140,7 @@ cpu_l2: cpu@2 {
 			clocks = <&scmi_clk SCMI_ARMCLK_L>;
 			operating-points-v2 = <&cluster0_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_l3: cpu@3 {
@@ -149,6 +152,7 @@ cpu_l3: cpu@3 {
 			clocks = <&scmi_clk SCMI_ARMCLK_L>;
 			operating-points-v2 = <&cluster0_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_b0: cpu@100 {
@@ -159,9 +163,9 @@ cpu_b0: cpu@100 {
 			capacity-dmips-mhz = <1024>;
 			clocks = <&scmi_clk SCMI_ARMCLK_B>;
 			operating-points-v2 = <&cluster1_opp_table>;
-			#cooling-cells = <2>;
 			dynamic-power-coefficient = <320>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_b1: cpu@101 {
@@ -173,6 +177,7 @@ cpu_b1: cpu@101 {
 			clocks = <&scmi_clk SCMI_ARMCLK_B>;
 			operating-points-v2 = <&cluster1_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_b2: cpu@102 {
@@ -184,6 +189,7 @@ cpu_b2: cpu@102 {
 			clocks = <&scmi_clk SCMI_ARMCLK_B>;
 			operating-points-v2 = <&cluster1_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		cpu_b3: cpu@103 {
@@ -195,6 +201,7 @@ cpu_b3: cpu@103 {
 			clocks = <&scmi_clk SCMI_ARMCLK_B>;
 			operating-points-v2 = <&cluster1_opp_table>;
 			cpu-idle-states = <&CPU_SLEEP>;
+			#cooling-cells = <2>;
 		};
 
 		idle-states {
@@ -520,6 +527,143 @@ psci {
 		method = "smc";
 	};
 
+	thermal_zones: thermal-zones {
+		/* sensor near the center of the SoC */
+		package_thermal: package-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 0>;
+
+			trips {
+				package_crit: package-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+		};
+
+		/* sensor for cluster1 (big Cortex-A72 cores) */
+		bigcore_thermal: bigcore-thermal {
+			polling-delay-passive = <100>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 1>;
+
+			trips {
+				bigcore_alert: bigcore-alert {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				bigcore_crit: bigcore-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+
+			cooling-maps {
+				map0 {
+					trip = <&bigcore_alert>;
+					cooling-device =
+						<&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_b2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_b3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+			};
+		};
+
+		/* sensor for cluster0 (little Cortex-A53 cores) */
+		littlecore_thermal: littlecore-thermal {
+			polling-delay-passive = <100>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 2>;
+
+			trips {
+				littlecore_alert: littlecore-alert {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				littlecore_crit: littlecore-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+
+			cooling-maps {
+				map0 {
+					trip = <&littlecore_alert>;
+					cooling-device =
+						<&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+						<&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+			};
+		};
+
+		gpu_thermal: gpu-thermal {
+			polling-delay-passive = <100>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 3>;
+
+			trips {
+				gpu_alert: gpu-alert {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				gpu_crit: gpu-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+
+			cooling-maps {
+				map0 {
+					trip = <&gpu_alert>;
+					cooling-device =
+						<&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+			};
+		};
+
+		npu_thermal: npu-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 4>;
+
+			trips {
+				npu_crit: npu-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+		};
+
+		ddr_thermal: ddr-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsadc 5>;
+
+			trips {
+				ddr_crit: ddr-crit {
+					temperature = <115000>;
+					hysteresis = <0>;
+					type = "critical";
+				};
+			};
+		};
+	};
+
 	timer {
 		compatible = "arm,armv8-timer";
 		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
@@ -2285,6 +2429,22 @@ saradc: adc@2ae00000 {
 			status = "disabled";
 		};
 
+		tsadc: tsadc@2ae70000 {
+			compatible = "rockchip,rk3576-tsadc";
+			reg = <0x0 0x2ae70000 0x0 0x400>;
+			interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cru CLK_TSADC>, <&cru PCLK_TSADC>;
+			clock-names = "tsadc", "apb_pclk";
+			assigned-clocks = <&cru CLK_TSADC>;
+			assigned-clock-rates = <2000000>;
+			resets = <&cru SRST_P_TSADC>, <&cru SRST_TSADC>;
+			reset-names = "tsadc-apb", "tsadc";
+			#thermal-sensor-cells = <1>;
+			rockchip,hw-tshut-temp = <120000>;
+			rockchip,hw-tshut-mode = <0>; /* tshut mode 0:CRU 1:GPIO */
+			rockchip,hw-tshut-polarity = <0>; /* tshut polarity 0:LOW 1:HIGH */
+		};
+
 		i2c9: i2c@2ae80000 {
 			compatible = "rockchip,rk3576-i2c", "rockchip,rk3399-i2c";
 			reg = <0x0 0x2ae80000 0x0 0x1000>;

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v6 7/7] arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (5 preceding siblings ...)
  2025-06-10 12:32 ` [PATCH v6 6/7] arm64: dts: rockchip: Add thermal nodes to RK3576 Nicolas Frattaroli
@ 2025-06-10 12:32 ` Nicolas Frattaroli
  2025-07-16 20:12 ` [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Daniel Lezcano
  2025-08-11  7:52 ` (subset) " Heiko Stuebner
  8 siblings, 0 replies; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-06-10 12:32 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, Jonas Karlman
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Thanks to Heiko's work getting OTP working on the RK3576, we can specify
the thermal sensor trim values which are stored there now, and with my
driver addition to rockchip_thermal, we can make use of these.

Add them to the devicetree for the SoC.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 arch/arm64/boot/dts/rockchip/rk3576.dtsi | 57 ++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
index dbc527ec60cfac0bbdb881a27d3ff765366be99e..c388fbb510ade0f06e64c1025dcfa59b8187bc97 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
@@ -1919,6 +1919,30 @@ gpu_leakage: gpu-leakage@21 {
 			log_leakage: log-leakage@22 {
 				reg = <0x22 0x1>;
 			};
+			bigcore_tsadc_trim: bigcore-tsadc-trim@24 {
+				reg = <0x24 0x2>;
+				bits = <0 10>;
+			};
+			litcore_tsadc_trim: litcore-tsadc-trim@26 {
+				reg = <0x26 0x2>;
+				bits = <0 10>;
+			};
+			ddr_tsadc_trim: ddr-tsadc-trim@28 {
+				reg = <0x28 0x2>;
+				bits = <0 10>;
+			};
+			npu_tsadc_trim: npu-tsadc-trim@2a {
+				reg = <0x2a 0x2>;
+				bits = <0 10>;
+			};
+			gpu_tsadc_trim: gpu-tsadc-trim@2c {
+				reg = <0x2c 0x2>;
+				bits = <0 10>;
+			};
+			soc_tsadc_trim: soc-tsadc-trim@64 {
+				reg = <0x64 0x2>;
+				bits = <0 10>;
+			};
 		};
 
 		sai0: sai@2a600000 {
@@ -2443,6 +2467,39 @@ tsadc: tsadc@2ae70000 {
 			rockchip,hw-tshut-temp = <120000>;
 			rockchip,hw-tshut-mode = <0>; /* tshut mode 0:CRU 1:GPIO */
 			rockchip,hw-tshut-polarity = <0>; /* tshut polarity 0:LOW 1:HIGH */
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			sensor@0 {
+				reg = <0>;
+				nvmem-cells = <&soc_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
+			sensor@1 {
+				reg = <1>;
+				nvmem-cells = <&bigcore_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
+			sensor@2 {
+				reg = <2>;
+				nvmem-cells = <&litcore_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
+			sensor@3 {
+				reg = <3>;
+				nvmem-cells = <&ddr_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
+			sensor@4 {
+				reg = <4>;
+				nvmem-cells = <&npu_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
+			sensor@5 {
+				reg = <5>;
+				nvmem-cells = <&gpu_tsadc_trim>;
+				nvmem-cell-names = "trim";
+			};
 		};
 
 		i2c9: i2c@2ae80000 {

-- 
2.49.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode
  2025-06-10 12:32 ` [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode Nicolas Frattaroli
@ 2025-07-10 11:16   ` Heiko Stuebner
  0 siblings, 0 replies; 21+ messages in thread
From: Heiko Stuebner @ 2025-07-10 11:16 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Nicolas Frattaroli
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Am Dienstag, 10. Juni 2025, 14:32:37 Mitteleuropäische Sommerzeit schrieb Nicolas Frattaroli:
> The "v" version specifier here refers to the hardware IP revision.
> Mainline deviated from downstream here by calling the v4 revision v3 as
> it didn't support the v3 hardware revision at all.
> 
> This creates needless confusion, so rename it to rk_tsadcv4_tshut_mode
> to be consistent with what the hardware wants to be called.
> 
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>

I checked the vendor-kernel, and your're right the
rv1126 gets identified as v3 it seems, while all of rk35xx except rk3568
(= rk3506, rk3528, rk3562, rk3576, rk3588) call themself v4


> ---
>  drivers/thermal/rockchip_thermal.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
> index a8ad85feb68fbb7ec8d79602b16c47838ecb3c00..40c7d234c3ef99f69dd8db4d8c47f9d493c0583d 100644
> --- a/drivers/thermal/rockchip_thermal.c
> +++ b/drivers/thermal/rockchip_thermal.c
> @@ -1045,7 +1045,7 @@ static void rk_tsadcv2_tshut_mode(int chn, void __iomem *regs,
>  	writel_relaxed(val, regs + TSADCV2_INT_EN);
>  }
>  
> -static void rk_tsadcv3_tshut_mode(int chn, void __iomem *regs,
> +static void rk_tsadcv4_tshut_mode(int chn, void __iomem *regs,
>  				  enum tshut_mode mode)
>  {
>  	u32 val_gpio, val_cru;
> @@ -1297,7 +1297,7 @@ static const struct rockchip_tsadc_chip rk3588_tsadc_data = {
>  	.get_temp = rk_tsadcv4_get_temp,
>  	.set_alarm_temp = rk_tsadcv3_alarm_temp,
>  	.set_tshut_temp = rk_tsadcv3_tshut_temp,
> -	.set_tshut_mode = rk_tsadcv3_tshut_mode,
> +	.set_tshut_mode = rk_tsadcv4_tshut_mode,
>  	.table = {
>  		.id = rk3588_code_table,
>  		.length = ARRAY_SIZE(rk3588_code_table),
> 
> 





^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible
  2025-06-10 12:32 ` [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible Nicolas Frattaroli
@ 2025-07-10 11:17   ` Heiko Stuebner
  0 siblings, 0 replies; 21+ messages in thread
From: Heiko Stuebner @ 2025-07-10 11:17 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Nicolas Frattaroli
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Am Dienstag, 10. Juni 2025, 14:32:38 Mitteleuropäische Sommerzeit schrieb Nicolas Frattaroli:
> Add a new compatible for the thermal sensor device on the RK3576 SoC.
> 
> Acked-by: Rob Herring (Arm) <robh@kernel.org>
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Acked-by: Heiko Stuebner <heiko@sntech.de>



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver
  2025-06-10 12:32 ` [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver Nicolas Frattaroli
@ 2025-07-10 11:18   ` Heiko Stuebner
  0 siblings, 0 replies; 21+ messages in thread
From: Heiko Stuebner @ 2025-07-10 11:18 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Nicolas Frattaroli
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli, Ye Zhang

Am Dienstag, 10. Juni 2025, 14:32:39 Mitteleuropäische Sommerzeit schrieb Nicolas Frattaroli:
> From: Ye Zhang <ye.zhang@rock-chips.com>
> 
> The RK3576 SoC has six TS-ADC channels: TOP, BIG_CORE, LITTLE_CORE,
> DDR, NPU and GPU.
> 
> Signed-off-by: Ye Zhang <ye.zhang@rock-chips.com>
> [ported to mainline, reworded commit message]
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Reviewed-by: Heiko Stuebner <heiko@sntech.de>

Nice that it does not need introduce another temperature table.

> ---
>  drivers/thermal/rockchip_thermal.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
> index 40c7d234c3ef99f69dd8db4d8c47f9d493c0583d..89e3180667e2a8f0ef5542b0db4d9e19a21a24d3 100644
> --- a/drivers/thermal/rockchip_thermal.c
> +++ b/drivers/thermal/rockchip_thermal.c
> @@ -1284,6 +1284,28 @@ static const struct rockchip_tsadc_chip rk3568_tsadc_data = {
>  	},
>  };
>  
> +static const struct rockchip_tsadc_chip rk3576_tsadc_data = {
> +	/* top, big_core, little_core, ddr, npu, gpu */
> +	.chn_offset = 0,
> +	.chn_num = 6, /* six channels for tsadc */
> +	.tshut_mode = TSHUT_MODE_GPIO, /* default TSHUT via GPIO give PMIC */
> +	.tshut_polarity = TSHUT_LOW_ACTIVE, /* default TSHUT LOW ACTIVE */
> +	.tshut_temp = 95000,
> +	.initialize = rk_tsadcv8_initialize,
> +	.irq_ack = rk_tsadcv4_irq_ack,
> +	.control = rk_tsadcv4_control,
> +	.get_temp = rk_tsadcv4_get_temp,
> +	.set_alarm_temp = rk_tsadcv3_alarm_temp,
> +	.set_tshut_temp = rk_tsadcv3_tshut_temp,
> +	.set_tshut_mode = rk_tsadcv4_tshut_mode,
> +	.table = {
> +		.id = rk3588_code_table,
> +		.length = ARRAY_SIZE(rk3588_code_table),
> +		.data_mask = TSADCV4_DATA_MASK,
> +		.mode = ADC_INCREMENT,
> +	},
> +};
> +
>  static const struct rockchip_tsadc_chip rk3588_tsadc_data = {
>  	/* top, big_core0, big_core1, little_core, center, gpu, npu */
>  	.chn_offset = 0,
> @@ -1342,6 +1364,10 @@ static const struct of_device_id of_rockchip_thermal_match[] = {
>  		.compatible = "rockchip,rk3568-tsadc",
>  		.data = (void *)&rk3568_tsadc_data,
>  	},
> +	{
> +		.compatible = "rockchip,rk3576-tsadc",
> +		.data = (void *)&rk3576_tsadc_data,
> +	},
>  	{
>  		.compatible = "rockchip,rk3588-tsadc",
>  		.data = (void *)&rk3588_tsadc_data,
> 
> 





^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim
  2025-06-10 12:32 ` [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim Nicolas Frattaroli
@ 2025-07-10 11:21   ` Heiko Stuebner
  2025-07-10 19:30     ` Nicolas Frattaroli
  0 siblings, 1 reply; 21+ messages in thread
From: Heiko Stuebner @ 2025-07-10 11:21 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Nicolas Frattaroli
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Nicolas Frattaroli

Am Dienstag, 10. Juni 2025, 14:32:40 Mitteleuropäische Sommerzeit schrieb Nicolas Frattaroli:
> Several Rockchip SoCs, such as the RK3576, can store calibration trim
> data for thermal sensors in OTP cells. This capability should be
> documented.
> 
> Such a rockchip thermal sensor may reference cell handles that store
> both a chip-wide trim for all the sensors, as well as cell handles
> for each individual sensor channel pointing to that specific sensor's
> trim value.
> 
> Additionally, the thermal sensor may optionally reference cells which
> store the base in terms of degrees celsius and decicelsius that the trim
> is relative to.
> 
> Each SoC that implements this appears to have a slightly different
> combination of chip-wide trim, base, base fractional part and
> per-channel trim, so which ones do which is documented in the bindings.
> 
> Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Acked-by: Heiko Stuebner <heiko@sntech.de>

with one question below

> ---
>  .../bindings/thermal/rockchip-thermal.yaml         | 61 ++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> index 49ceed68c92ce5a32ed8d4f39bd88fd052de0e80..573f447cc26ed7100638277598b0e745d436fd01 100644
> --- a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> +++ b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> @@ -40,6 +40,17 @@ properties:
>        - const: tsadc
>        - const: apb_pclk
>  
> +  nvmem-cells:
> +    items:
> +      - description: cell handle to where the trim's base temperature is stored
> +      - description:
> +          cell handle to where the trim's tenths of Celsius base value is stored
> +
> +  nvmem-cell-names:
> +    items:
> +      - const: trim_base
> +      - const: trim_base_frac
> +

are we sure, we want underscores here?
trim-base, trim-base-frac looks somewhat nicer.

Heiko



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim
  2025-07-10 11:21   ` Heiko Stuebner
@ 2025-07-10 19:30     ` Nicolas Frattaroli
  0 siblings, 0 replies; 21+ messages in thread
From: Nicolas Frattaroli @ 2025-07-10 19:30 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Heiko Stuebner
  Cc: Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel

On Thursday, 10 July 2025 13:21:19 Central European Summer Time Heiko Stuebner wrote:
> Am Dienstag, 10. Juni 2025, 14:32:40 Mitteleuropäische Sommerzeit schrieb Nicolas Frattaroli:
> > Several Rockchip SoCs, such as the RK3576, can store calibration trim
> > data for thermal sensors in OTP cells. This capability should be
> > documented.
> > 
> > Such a rockchip thermal sensor may reference cell handles that store
> > both a chip-wide trim for all the sensors, as well as cell handles
> > for each individual sensor channel pointing to that specific sensor's
> > trim value.
> > 
> > Additionally, the thermal sensor may optionally reference cells which
> > store the base in terms of degrees celsius and decicelsius that the trim
> > is relative to.
> > 
> > Each SoC that implements this appears to have a slightly different
> > combination of chip-wide trim, base, base fractional part and
> > per-channel trim, so which ones do which is documented in the bindings.
> > 
> > Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
> > Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
> 
> Acked-by: Heiko Stuebner <heiko@sntech.de>
> 
> with one question below
> 
> > ---
> >  .../bindings/thermal/rockchip-thermal.yaml         | 61 ++++++++++++++++++++++
> >  1 file changed, 61 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> > index 49ceed68c92ce5a32ed8d4f39bd88fd052de0e80..573f447cc26ed7100638277598b0e745d436fd01 100644
> > --- a/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> > +++ b/Documentation/devicetree/bindings/thermal/rockchip-thermal.yaml
> > @@ -40,6 +40,17 @@ properties:
> >        - const: tsadc
> >        - const: apb_pclk
> >  
> > +  nvmem-cells:
> > +    items:
> > +      - description: cell handle to where the trim's base temperature is stored
> > +      - description:
> > +          cell handle to where the trim's tenths of Celsius base value is stored
> > +
> > +  nvmem-cell-names:
> > +    items:
> > +      - const: trim_base
> > +      - const: trim_base_frac
> > +
> 
> are we sure, we want underscores here?
> trim-base, trim-base-frac looks somewhat nicer.

a quick grep of all the bindings shows me that _ vs. - is about even.
I'm not sure deviating from what downstream calls it, what I already
sent, and what the already sent driver expects is really worth anyone's
time and mailbox space for what boils down to a matter of personal
preference.

> 
> Heiko
> 

Kind regards,
Nicolas Frattaroli





^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (6 preceding siblings ...)
  2025-06-10 12:32 ` [PATCH v6 7/7] arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes Nicolas Frattaroli
@ 2025-07-16 20:12 ` Daniel Lezcano
  2025-07-17  7:21   ` Heiko Stübner
  2025-08-11  7:52 ` (subset) " Heiko Stuebner
  8 siblings, 1 reply; 21+ messages in thread
From: Daniel Lezcano @ 2025-07-16 20:12 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Alexey Charkov, Rafael J. Wysocki, Zhang Rui, Lukasz Luba,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
	Jonas Karlman, Sebastian Reichel, kernel, linux-pm, devicetree,
	linux-arm-kernel, linux-rockchip, linux-kernel, Ye Zhang

On Tue, Jun 10, 2025 at 02:32:36PM +0200, Nicolas Frattaroli wrote:
> This series adds support for the RK3576's thermal sensor.
> 
> The sensor has six channels, providing measurements for the package
> temperature, the temperature of the big cores, the temperature of the
> little cores, and the GPU, NPU and DDR controller.
> 
> In addition to adding support for the sensor itself, the series also
> adds support for reading thermal trim values out of the device tree.
> Most of this functionality is not specific to this SoC, but needed to be
> implemented to make the sensors a little more accurate in order to
> investigate whether the TRM swapped GPU and DDR or downstream swapped
> GPU and DDR in terms of channel IDs, as downstream disagrees with what's
> in the TRM, and the difference is so small and hard to pin down with
> testing that the constant offset between the two sensors was a little
> annoying for me to deal with.
> 
> I ended up going with the channel assignment the TRM lists, as I see the
> DDR sensor get a larger deviation from baseline temperatures during memory
> stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
> claims is the GPU sensor but downstream claims is the DDR sensor. Input
> from Rockchip engineers on whether the TRM is right or wrong welcome.
> 
> The trim functionality is only used by RK3576 at the moment. Code to
> handle other SoCs can rely on the shared otp reading and perhaps even
> the IP revision specific function, but may need its own IP revision
> specific functions added as well. Absent trim functionality in other
> SoCs should not interfere with the modified common code paths.
> 
> Patch 1 is a cleanup patch for the rockchip thermal driver, where a
> function was confusingly named.
> 
> Patch 2 adds the RK3576 compatible to the bindings.
> 
> Patch 3 adds support for this SoC's thermal chip to the driver. It is a
> port of the downstream commit adding support for this.
> 
> Patch 4 adds some documentation for imminent additional functionality to
> the binding, namely the trim value stuff.
> 
> Patch 5 adds support for reading these OTP values in the
> rockchip_thermal driver, and makes use of them. The code is mostly new
> upstream code written by me, using downstream code as reference.

Replaced previously applied version V5 with this V6 patches 1-5

Thanks

  -- Daniel

-- 

 <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-16 20:12 ` [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Daniel Lezcano
@ 2025-07-17  7:21   ` Heiko Stübner
  2025-07-17  8:20     ` Daniel Lezcano
  0 siblings, 1 reply; 21+ messages in thread
From: Heiko Stübner @ 2025-07-17  7:21 UTC (permalink / raw)
  To: Nicolas Frattaroli, Daniel Lezcano
  Cc: Alexey Charkov, Rafael J. Wysocki, Zhang Rui, Lukasz Luba,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonas Karlman,
	Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Ye Zhang

Hi Daniel,

Am Mittwoch, 16. Juli 2025, 22:12:53 Mitteleuropäische Sommerzeit schrieb Daniel Lezcano:
> On Tue, Jun 10, 2025 at 02:32:36PM +0200, Nicolas Frattaroli wrote:
> > This series adds support for the RK3576's thermal sensor.
> > 
> > The sensor has six channels, providing measurements for the package
> > temperature, the temperature of the big cores, the temperature of the
> > little cores, and the GPU, NPU and DDR controller.
> > 
> > In addition to adding support for the sensor itself, the series also
> > adds support for reading thermal trim values out of the device tree.
> > Most of this functionality is not specific to this SoC, but needed to be
> > implemented to make the sensors a little more accurate in order to
> > investigate whether the TRM swapped GPU and DDR or downstream swapped
> > GPU and DDR in terms of channel IDs, as downstream disagrees with what's
> > in the TRM, and the difference is so small and hard to pin down with
> > testing that the constant offset between the two sensors was a little
> > annoying for me to deal with.
> > 
> > I ended up going with the channel assignment the TRM lists, as I see the
> > DDR sensor get a larger deviation from baseline temperatures during memory
> > stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
> > claims is the GPU sensor but downstream claims is the DDR sensor. Input
> > from Rockchip engineers on whether the TRM is right or wrong welcome.
> > 
> > The trim functionality is only used by RK3576 at the moment. Code to
> > handle other SoCs can rely on the shared otp reading and perhaps even
> > the IP revision specific function, but may need its own IP revision
> > specific functions added as well. Absent trim functionality in other
> > SoCs should not interfere with the modified common code paths.
> > 
> > Patch 1 is a cleanup patch for the rockchip thermal driver, where a
> > function was confusingly named.
> > 
> > Patch 2 adds the RK3576 compatible to the bindings.
> > 
> > Patch 3 adds support for this SoC's thermal chip to the driver. It is a
> > port of the downstream commit adding support for this.
> > 
> > Patch 4 adds some documentation for imminent additional functionality to
> > the binding, namely the trim value stuff.
> > 
> > Patch 5 adds support for reading these OTP values in the
> > rockchip_thermal driver, and makes use of them. The code is mostly new
> > upstream code written by me, using downstream code as reference.
> 
> Replaced previously applied version V5 with this V6 patches 1-5

are these commits available somewhere?

Because git.kernel.org reports that
  https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git
has not seen activity in a while?

Thanks
Heiko



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-17  7:21   ` Heiko Stübner
@ 2025-07-17  8:20     ` Daniel Lezcano
  2025-07-31  7:33       ` Alexey Charkov
  0 siblings, 1 reply; 21+ messages in thread
From: Daniel Lezcano @ 2025-07-17  8:20 UTC (permalink / raw)
  To: Heiko Stübner, Nicolas Frattaroli
  Cc: Alexey Charkov, Rafael J. Wysocki, Zhang Rui, Lukasz Luba,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonas Karlman,
	Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Ye Zhang

On 7/17/25 09:21, Heiko Stübner wrote:
> Hi Daniel,
> 
> Am Mittwoch, 16. Juli 2025, 22:12:53 Mitteleuropäische Sommerzeit schrieb Daniel Lezcano:
>> On Tue, Jun 10, 2025 at 02:32:36PM +0200, Nicolas Frattaroli wrote:
>>> This series adds support for the RK3576's thermal sensor.
>>>
>>> The sensor has six channels, providing measurements for the package
>>> temperature, the temperature of the big cores, the temperature of the
>>> little cores, and the GPU, NPU and DDR controller.
>>>
>>> In addition to adding support for the sensor itself, the series also
>>> adds support for reading thermal trim values out of the device tree.
>>> Most of this functionality is not specific to this SoC, but needed to be
>>> implemented to make the sensors a little more accurate in order to
>>> investigate whether the TRM swapped GPU and DDR or downstream swapped
>>> GPU and DDR in terms of channel IDs, as downstream disagrees with what's
>>> in the TRM, and the difference is so small and hard to pin down with
>>> testing that the constant offset between the two sensors was a little
>>> annoying for me to deal with.
>>>
>>> I ended up going with the channel assignment the TRM lists, as I see the
>>> DDR sensor get a larger deviation from baseline temperatures during memory
>>> stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
>>> claims is the GPU sensor but downstream claims is the DDR sensor. Input
>>> from Rockchip engineers on whether the TRM is right or wrong welcome.
>>>
>>> The trim functionality is only used by RK3576 at the moment. Code to
>>> handle other SoCs can rely on the shared otp reading and perhaps even
>>> the IP revision specific function, but may need its own IP revision
>>> specific functions added as well. Absent trim functionality in other
>>> SoCs should not interfere with the modified common code paths.
>>>
>>> Patch 1 is a cleanup patch for the rockchip thermal driver, where a
>>> function was confusingly named.
>>>
>>> Patch 2 adds the RK3576 compatible to the bindings.
>>>
>>> Patch 3 adds support for this SoC's thermal chip to the driver. It is a
>>> port of the downstream commit adding support for this.
>>>
>>> Patch 4 adds some documentation for imminent additional functionality to
>>> the binding, namely the trim value stuff.
>>>
>>> Patch 5 adds support for reading these OTP values in the
>>> rockchip_thermal driver, and makes use of them. The code is mostly new
>>> upstream code written by me, using downstream code as reference.
>>
>> Replaced previously applied version V5 with this V6 patches 1-5
> 
> are these commits available somewhere?
> 
> Because git.kernel.org reports that
>    https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git
> has not seen activity in a while?
> 

I just pushed the bleeding-edge branch


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-17  8:20     ` Daniel Lezcano
@ 2025-07-31  7:33       ` Alexey Charkov
  2025-07-31  8:11         ` Heiko Stübner
  0 siblings, 1 reply; 21+ messages in thread
From: Alexey Charkov @ 2025-07-31  7:33 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Heiko Stübner, Nicolas Frattaroli, Rafael J. Wysocki,
	Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Jonas Karlman, Sebastian Reichel, kernel, linux-pm,
	devicetree, linux-arm-kernel, linux-rockchip, linux-kernel,
	Ye Zhang

Hi Heiko!

On Thu, Jul 17, 2025 at 12:20 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> On 7/17/25 09:21, Heiko Stübner wrote:
> > Hi Daniel,
> >
> > Am Mittwoch, 16. Juli 2025, 22:12:53 Mitteleuropäische Sommerzeit schrieb Daniel Lezcano:
> >> On Tue, Jun 10, 2025 at 02:32:36PM +0200, Nicolas Frattaroli wrote:
> >>> This series adds support for the RK3576's thermal sensor.
> >>>
> >>> The sensor has six channels, providing measurements for the package
> >>> temperature, the temperature of the big cores, the temperature of the
> >>> little cores, and the GPU, NPU and DDR controller.
> >>>
> >>> In addition to adding support for the sensor itself, the series also
> >>> adds support for reading thermal trim values out of the device tree.
> >>> Most of this functionality is not specific to this SoC, but needed to be
> >>> implemented to make the sensors a little more accurate in order to
> >>> investigate whether the TRM swapped GPU and DDR or downstream swapped
> >>> GPU and DDR in terms of channel IDs, as downstream disagrees with what's
> >>> in the TRM, and the difference is so small and hard to pin down with
> >>> testing that the constant offset between the two sensors was a little
> >>> annoying for me to deal with.
> >>>
> >>> I ended up going with the channel assignment the TRM lists, as I see the
> >>> DDR sensor get a larger deviation from baseline temperatures during memory
> >>> stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
> >>> claims is the GPU sensor but downstream claims is the DDR sensor. Input
> >>> from Rockchip engineers on whether the TRM is right or wrong welcome.
> >>>
> >>> The trim functionality is only used by RK3576 at the moment. Code to
> >>> handle other SoCs can rely on the shared otp reading and perhaps even
> >>> the IP revision specific function, but may need its own IP revision
> >>> specific functions added as well. Absent trim functionality in other
> >>> SoCs should not interfere with the modified common code paths.
> >>>
> >>> Patch 1 is a cleanup patch for the rockchip thermal driver, where a
> >>> function was confusingly named.
> >>>
> >>> Patch 2 adds the RK3576 compatible to the bindings.
> >>>
> >>> Patch 3 adds support for this SoC's thermal chip to the driver. It is a
> >>> port of the downstream commit adding support for this.
> >>>
> >>> Patch 4 adds some documentation for imminent additional functionality to
> >>> the binding, namely the trim value stuff.
> >>>
> >>> Patch 5 adds support for reading these OTP values in the
> >>> rockchip_thermal driver, and makes use of them. The code is mostly new
> >>> upstream code written by me, using downstream code as reference.
> >>
> >> Replaced previously applied version V5 with this V6 patches 1-5
> >
> > are these commits available somewhere?
> >
> > Because git.kernel.org reports that
> >    https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git
> > has not seen activity in a while?
> >
>
> I just pushed the bleeding-edge branch

Just wondering if patches 6-7 from this series are on your radar?
Driver changes are in -next AFAICT, but not DTS. Can't wait to get the
temperature monitoring working on RK3576 without out-of-tree patches
;-)

Thanks a lot,
Alexey

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-31  7:33       ` Alexey Charkov
@ 2025-07-31  8:11         ` Heiko Stübner
  2025-07-31 13:27           ` Sebastian Reichel
  0 siblings, 1 reply; 21+ messages in thread
From: Heiko Stübner @ 2025-07-31  8:11 UTC (permalink / raw)
  To: Daniel Lezcano, Alexey Charkov
  Cc: Nicolas Frattaroli, Rafael J. Wysocki, Zhang Rui, Lukasz Luba,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonas Karlman,
	Sebastian Reichel, kernel, linux-pm, devicetree, linux-arm-kernel,
	linux-rockchip, linux-kernel, Ye Zhang

Hey Alexey,

Am Donnerstag, 31. Juli 2025, 09:33:32 Mitteleuropäische Sommerzeit schrieb Alexey Charkov:
> On Thu, Jul 17, 2025 at 12:20 PM Daniel Lezcano
> <daniel.lezcano@linaro.org> wrote:
> >
> > On 7/17/25 09:21, Heiko Stübner wrote:
> > > Hi Daniel,
> > >
> > > Am Mittwoch, 16. Juli 2025, 22:12:53 Mitteleuropäische Sommerzeit schrieb Daniel Lezcano:
> > >> On Tue, Jun 10, 2025 at 02:32:36PM +0200, Nicolas Frattaroli wrote:
> > >>> This series adds support for the RK3576's thermal sensor.
> > >>>
> > >>> The sensor has six channels, providing measurements for the package
> > >>> temperature, the temperature of the big cores, the temperature of the
> > >>> little cores, and the GPU, NPU and DDR controller.
> > >>>
> > >>> In addition to adding support for the sensor itself, the series also
> > >>> adds support for reading thermal trim values out of the device tree.
> > >>> Most of this functionality is not specific to this SoC, but needed to be
> > >>> implemented to make the sensors a little more accurate in order to
> > >>> investigate whether the TRM swapped GPU and DDR or downstream swapped
> > >>> GPU and DDR in terms of channel IDs, as downstream disagrees with what's
> > >>> in the TRM, and the difference is so small and hard to pin down with
> > >>> testing that the constant offset between the two sensors was a little
> > >>> annoying for me to deal with.
> > >>>
> > >>> I ended up going with the channel assignment the TRM lists, as I see the
> > >>> DDR sensor get a larger deviation from baseline temperatures during memory
> > >>> stress tests (stress-ng --memrate 8 --memrate-flush) than what the TRM
> > >>> claims is the GPU sensor but downstream claims is the DDR sensor. Input
> > >>> from Rockchip engineers on whether the TRM is right or wrong welcome.
> > >>>
> > >>> The trim functionality is only used by RK3576 at the moment. Code to
> > >>> handle other SoCs can rely on the shared otp reading and perhaps even
> > >>> the IP revision specific function, but may need its own IP revision
> > >>> specific functions added as well. Absent trim functionality in other
> > >>> SoCs should not interfere with the modified common code paths.
> > >>>
> > >>> Patch 1 is a cleanup patch for the rockchip thermal driver, where a
> > >>> function was confusingly named.
> > >>>
> > >>> Patch 2 adds the RK3576 compatible to the bindings.
> > >>>
> > >>> Patch 3 adds support for this SoC's thermal chip to the driver. It is a
> > >>> port of the downstream commit adding support for this.
> > >>>
> > >>> Patch 4 adds some documentation for imminent additional functionality to
> > >>> the binding, namely the trim value stuff.
> > >>>
> > >>> Patch 5 adds support for reading these OTP values in the
> > >>> rockchip_thermal driver, and makes use of them. The code is mostly new
> > >>> upstream code written by me, using downstream code as reference.
> > >>
> > >> Replaced previously applied version V5 with this V6 patches 1-5
> > >
> > > are these commits available somewhere?
> > >
> > > Because git.kernel.org reports that
> > >    https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git
> > > has not seen activity in a while?
> > >
> >
> > I just pushed the bleeding-edge branch
> 
> Just wondering if patches 6-7 from this series are on your radar?
> Driver changes are in -next AFAICT, but not DTS. Can't wait to get the
> temperature monitoring working on RK3576 without out-of-tree patches
> ;-)

they are :-) .

Right now we're in the middle of the merge-window though, so everything
I apply now, I'd need to rebase onto -rc1 in slightly more than a week,
invalidating all those nice commit hashes that end up in the "applied" mails.

So I'm struggling with myself on every merge window about that.


Heiko



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-31  8:11         ` Heiko Stübner
@ 2025-07-31 13:27           ` Sebastian Reichel
  2025-07-31 13:45             ` Heiko Stübner
  0 siblings, 1 reply; 21+ messages in thread
From: Sebastian Reichel @ 2025-07-31 13:27 UTC (permalink / raw)
  To: Heiko Stübner
  Cc: Daniel Lezcano, Alexey Charkov, Nicolas Frattaroli,
	Rafael J. Wysocki, Zhang Rui, Lukasz Luba, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jonas Karlman, kernel,
	linux-pm, devicetree, linux-arm-kernel, linux-rockchip,
	linux-kernel, Ye Zhang

Hi,

On Thu, Jul 31, 2025 at 10:11:23AM +0200, Heiko Stübner wrote:
> Right now we're in the middle of the merge-window though, so everything
> I apply now, I'd need to rebase onto -rc1 in slightly more than a week,
> invalidating all those nice commit hashes that end up in the "applied" mails.
> 
> So I'm struggling with myself on every merge window about that.

Your are not supposed to merge anything to your for-next branch
during the merge window anyways. See first sentence of Stephen
Rothwell's mails [0]:

> Please do not add any v6.18 material to your linux-next included
> branches until after v6.17-rc1 has been released.

[0] https://lore.kernel.org/all/20250731133311.1a3e3867@canb.auug.org.au/

Greetings,

-- Sebastian

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-07-31 13:27           ` Sebastian Reichel
@ 2025-07-31 13:45             ` Heiko Stübner
  0 siblings, 0 replies; 21+ messages in thread
From: Heiko Stübner @ 2025-07-31 13:45 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Daniel Lezcano, Alexey Charkov, Nicolas Frattaroli,
	Rafael J. Wysocki, Zhang Rui, Lukasz Luba, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jonas Karlman, kernel,
	linux-pm, devicetree, linux-arm-kernel, linux-rockchip,
	linux-kernel, Ye Zhang

Am Donnerstag, 31. Juli 2025, 15:27:03 Mitteleuropäische Sommerzeit schrieb Sebastian Reichel:
> Hi,
> 
> On Thu, Jul 31, 2025 at 10:11:23AM +0200, Heiko Stübner wrote:
> > Right now we're in the middle of the merge-window though, so everything
> > I apply now, I'd need to rebase onto -rc1 in slightly more than a week,
> > invalidating all those nice commit hashes that end up in the "applied" mails.
> > 
> > So I'm struggling with myself on every merge window about that.
> 
> Your are not supposed to merge anything to your for-next branch
> during the merge window anyways. See first sentence of Stephen
> Rothwell's mails [0]:
>
> > Please do not add any v6.18 material to your linux-next included
> > branches until after v6.17-rc1 has been released.

The general idea is just merging but without updating the -next branch,
then after -rc1 rebase + do new -next.

But as you pointed out, this is all cumbersome and doesn't shave off much
from the amount of patches waiting, so as most of the time, I'll just wait
for -rc1 to start clean :-)


> 
> [0] https://lore.kernel.org/all/20250731133311.1a3e3867@canb.auug.org.au/
> 
> Greetings,
> 
> -- Sebastian
> 





^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: (subset) [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments
  2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
                   ` (7 preceding siblings ...)
  2025-07-16 20:12 ` [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Daniel Lezcano
@ 2025-08-11  7:52 ` Heiko Stuebner
  8 siblings, 0 replies; 21+ messages in thread
From: Heiko Stuebner @ 2025-08-11  7:52 UTC (permalink / raw)
  To: Alexey Charkov, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jonas Karlman, Nicolas Frattaroli
  Cc: Heiko Stuebner, Sebastian Reichel, kernel, linux-pm, devicetree,
	linux-arm-kernel, linux-rockchip, linux-kernel, Ye Zhang


On Tue, 10 Jun 2025 14:32:36 +0200, Nicolas Frattaroli wrote:
> This series adds support for the RK3576's thermal sensor.
> 
> The sensor has six channels, providing measurements for the package
> temperature, the temperature of the big cores, the temperature of the
> little cores, and the GPU, NPU and DDR controller.
> 
> In addition to adding support for the sensor itself, the series also
> adds support for reading thermal trim values out of the device tree.
> Most of this functionality is not specific to this SoC, but needed to be
> implemented to make the sensors a little more accurate in order to
> investigate whether the TRM swapped GPU and DDR or downstream swapped
> GPU and DDR in terms of channel IDs, as downstream disagrees with what's
> in the TRM, and the difference is so small and hard to pin down with
> testing that the constant offset between the two sensors was a little
> annoying for me to deal with.
> 
> [...]

Applied, thanks!

[6/7] arm64: dts: rockchip: Add thermal nodes to RK3576
      commit: 15e8ba9d8b14ae6de415186622379f5f4dcfd141
[7/7] arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes
      commit: a4053badacf3699023527392c947314b074f5e0e

Best regards,
-- 
Heiko Stuebner <heiko@sntech.de>

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2025-08-11  7:52 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-10 12:32 [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Nicolas Frattaroli
2025-06-10 12:32 ` [PATCH v6 1/7] thermal: rockchip: rename rk_tsadcv3_tshut_mode Nicolas Frattaroli
2025-07-10 11:16   ` Heiko Stuebner
2025-06-10 12:32 ` [PATCH v6 2/7] dt-bindings: rockchip-thermal: Add RK3576 compatible Nicolas Frattaroli
2025-07-10 11:17   ` Heiko Stuebner
2025-06-10 12:32 ` [PATCH v6 3/7] thermal: rockchip: Support RK3576 SoC in the thermal driver Nicolas Frattaroli
2025-07-10 11:18   ` Heiko Stuebner
2025-06-10 12:32 ` [PATCH v6 4/7] dt-bindings: thermal: rockchip: document otp thermal trim Nicolas Frattaroli
2025-07-10 11:21   ` Heiko Stuebner
2025-07-10 19:30     ` Nicolas Frattaroli
2025-06-10 12:32 ` [PATCH v6 5/7] thermal: rockchip: support reading trim values from OTP Nicolas Frattaroli
2025-06-10 12:32 ` [PATCH v6 6/7] arm64: dts: rockchip: Add thermal nodes to RK3576 Nicolas Frattaroli
2025-06-10 12:32 ` [PATCH v6 7/7] arm64: dts: rockchip: Add thermal trim OTP and tsadc nodes Nicolas Frattaroli
2025-07-16 20:12 ` [PATCH v6 0/7] RK3576 thermal sensor support, including OTP trim adjustments Daniel Lezcano
2025-07-17  7:21   ` Heiko Stübner
2025-07-17  8:20     ` Daniel Lezcano
2025-07-31  7:33       ` Alexey Charkov
2025-07-31  8:11         ` Heiko Stübner
2025-07-31 13:27           ` Sebastian Reichel
2025-07-31 13:45             ` Heiko Stübner
2025-08-11  7:52 ` (subset) " Heiko Stuebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).