Devicetree
 help / color / mirror / Atom feed
* [PATCH 0/2] arm64: dts: qcom: sm6125: add TSENS die temperature sensing
@ 2026-08-21  3:03 Roman Linev
  2026-08-21  3:03 ` [PATCH 1/2] dt-bindings: thermal: qcom-tsens: add qcom,sm6125-tsens Roman Linev
  2026-08-21  3:03 ` [PATCH 2/2] arm64: dts: qcom: sm6125: add TSENS and thermal zones Roman Linev
  0 siblings, 2 replies; 3+ messages in thread
From: Roman Linev @ 2026-08-21  3:03 UTC (permalink / raw)
  To: Amit Kucheria, Thara Gopinath, Rafael J. Wysocki, Daniel Lezcano,
	Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel, Roman Linev

SM6125 has a TSENS v2 block that mainline does not describe, so the SoC
has no die temperature sensing: on a stock kernel the only thermal zones
on an SM6125 board are the handful backed by PMIC ADC channels.

The block needs no new driver code. Its register and interrupt layout is
identical to SM6115's and, being v2, it self-calibrates and needs no
qfprom nvmem cells, so it binds through the existing qcom,tsens-v2
fallback. Patch 1 documents the SoC-specific compatible; patch 2 adds the
controller and the thermal zones.

Sensor-to-zone mapping was taken from the downstream device tree for the
Xiaomi Mi A3 (laurel_sprout) and cross-checked against sm6115.dtsi, which
agrees on every sensor the two have in common (2, 3, 4, 13, 14 and 15).
Sensor 5 is not referenced downstream and is left out, so 15 of the 16
sensors get zones.

No cooling devices are referenced, since SM6125 has no GPU node upstream
yet. The zones report temperature and carry passive and critical trips;
a cooling map for gpu-thermal can follow alongside the GPU node.

Tested on a Xiaomi Mi A3: tsens0 binds at 4411000.thermal-sensor with no
dmesg output, the thermal zone count goes from 5 to 20, and the 15 new
die zones read 37.7-39.6 degrees Celsius at idle. Under a 660 s
glmark2-es2-drm soak the hottest zone reached 52.2 degrees Celsius
against its 85 degrees Celsius passive trip.

Both SM6125 boards (laurel-sprout and ginkgo) compile with no new dtc
warnings: pristine master emits 7 unique_unit_address warnings on the
geniqup nodes, and the series emits the same 7.

I have no other SM6125 board to test on, so the zone naming beyond the
sensors shared with SM6115 rests on the downstream device tree.

Roman Linev (2):
  dt-bindings: thermal: qcom-tsens: add qcom,sm6125-tsens
  arm64: dts: qcom: sm6125: add TSENS and thermal zones

 .../bindings/thermal/qcom-tsens.yaml          |   1 +
 arch/arm64/boot/dts/qcom/sm6125.dtsi          | 299 ++++++++++++++++++
 2 files changed, 300 insertions(+)

-- 
2.55.0


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

* [PATCH 1/2] dt-bindings: thermal: qcom-tsens: add qcom,sm6125-tsens
  2026-08-21  3:03 [PATCH 0/2] arm64: dts: qcom: sm6125: add TSENS die temperature sensing Roman Linev
@ 2026-08-21  3:03 ` Roman Linev
  2026-08-21  3:03 ` [PATCH 2/2] arm64: dts: qcom: sm6125: add TSENS and thermal zones Roman Linev
  1 sibling, 0 replies; 3+ messages in thread
From: Roman Linev @ 2026-08-21  3:03 UTC (permalink / raw)
  To: Amit Kucheria, Thara Gopinath, Rafael J. Wysocki, Daniel Lezcano,
	Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel, Roman Linev

SM6125 has a TSENS v2 block with 16 sensors. Its register and interrupt
layout is identical to SM6115's, and it needs no calibration cells
because v2 self-calibrates, so it is generic apart from the SoC-specific
compatible.

Document it in the v2 list, bound by the qcom,tsens-v2 fallback.

Signed-off-by: Roman Linev <admin@mswin.me>
---
 Documentation/devicetree/bindings/thermal/qcom-tsens.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml b/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
index f0efaa834..cb808ce5c 100644
--- a/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
+++ b/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
@@ -78,6 +78,7 @@ properties:
               - qcom,sdm845-tsens
               - qcom,shikra-tsens
               - qcom,sm6115-tsens
+              - qcom,sm6125-tsens
               - qcom,sm6350-tsens
               - qcom,sm6375-tsens
               - qcom,sm8150-tsens
-- 
2.55.0


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

* [PATCH 2/2] arm64: dts: qcom: sm6125: add TSENS and thermal zones
  2026-08-21  3:03 [PATCH 0/2] arm64: dts: qcom: sm6125: add TSENS die temperature sensing Roman Linev
  2026-08-21  3:03 ` [PATCH 1/2] dt-bindings: thermal: qcom-tsens: add qcom,sm6125-tsens Roman Linev
@ 2026-08-21  3:03 ` Roman Linev
  1 sibling, 0 replies; 3+ messages in thread
From: Roman Linev @ 2026-08-21  3:03 UTC (permalink / raw)
  To: Amit Kucheria, Thara Gopinath, Rafael J. Wysocki, Daniel Lezcano,
	Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bjorn Andersson, Konrad Dybcio
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel, Roman Linev

SM6125 has a TSENS v2 controller with 16 sensors, at 0x04411000 (TM) and
0x04410000 (SROT), with SPI 275 as "uplow" and SPI 190 as "critical".
The register and interrupt layout is identical to SM6115's, and being v2
the block self-calibrates, so it needs no qfprom nvmem cells and no new
driver code: it binds through the existing qcom,tsens-v2 fallback.

Add the controller and thermal zones for the 15 sensors that are used.
The sensor-to-zone mapping comes from the downstream device tree for
Xiaomi Mi A3 (laurel_sprout), cross-checked against mainline sm6115.dtsi,
which agrees on sensors 2, 3, 4, 13, 14 and 15. Sensor 5 is not
referenced downstream and is left out.

No cooling devices are wired up: SM6125 has no GPU node upstream yet, so
there is nothing to reference. The zones report temperature and carry
passive and critical trips; cooling maps can be added alongside the
consumers when those land.

Tested on Xiaomi Mi A3 (sm6125): tsens0 binds at 4411000.thermal-sensor
with no dmesg output, the thermal zone count goes from 5 to 20, and the
15 new die zones read 37.7-39.6 degrees Celsius at idle. Under a 660 s
glmark2-es2-drm soak the hottest zone reached 52.2 degrees Celsius, well
below its 85 degrees Celsius passive trip.

Both SM6125 boards still build with no new dtc warnings.

Signed-off-by: Roman Linev <admin@mswin.me>
---
 arch/arm64/boot/dts/qcom/sm6125.dtsi | 299 +++++++++++++++++++++++++++
 1 file changed, 299 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm6125.dtsi b/arch/arm64/boot/dts/qcom/sm6125.dtsi
index 86de1560b..ed7fb5b75 100644
--- a/arch/arm64/boot/dts/qcom/sm6125.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm6125.dtsi
@@ -719,6 +719,17 @@ spmi_bus: spmi@1c40000 {
 			#interrupt-cells = <4>;
 		};
 
+		tsens0: thermal-sensor@4411000 {
+			compatible = "qcom,sm6125-tsens", "qcom,tsens-v2";
+			reg = <0x0 0x04411000 0x0 0x1ff>, /* TM */
+			      <0x0 0x04410000 0x0 0x8>; /* SROT */
+			#qcom,sensors = <16>;
+			interrupts = <GIC_SPI 275 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "uplow", "critical";
+			#thermal-sensor-cells = <1>;
+		};
+
 		rpm_msg_ram: sram@45f0000 {
 			compatible = "qcom,rpm-msg-ram";
 			reg = <0x0 0x045f0000 0x0 0x7000>;
@@ -1634,6 +1645,294 @@ intc: interrupt-controller@f200000 {
 		};
 	};
 
+	thermal-zones {
+		/*
+		 * Sensor-to-zone mapping verified against the downstream
+		 * laurel_sprout device tree (tsens@4410000, sensors 0..15) and
+		 * cross-checked with mainline sm6115.dtsi, which agrees on
+		 * sensors 2, 3, 4, 13, 14 and 15. Sensor 5 is unused by the
+		 * downstream tree and is therefore left out.
+		 * cpu4..cpu7 are the downstream cpu-1-{0..3} (cluster 1) sensors.
+		 */
+		aoss0-thermal {
+			thermal-sensors = <&tsens0 0>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cdsp-thermal {
+			thermal-sensors = <&tsens0 1>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		wlan-thermal {
+			thermal-sensors = <&tsens0 2>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		camera-thermal {
+			thermal-sensors = <&tsens0 3>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		video-thermal {
+			thermal-sensors = <&tsens0 4>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpuss0-thermal {
+			thermal-sensors = <&tsens0 6>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpuss1-thermal {
+			thermal-sensors = <&tsens0 7>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpuss2-thermal {
+			thermal-sensors = <&tsens0 8>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpu4-thermal {
+			thermal-sensors = <&tsens0 9>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpu5-thermal {
+			thermal-sensors = <&tsens0 10>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpu6-thermal {
+			thermal-sensors = <&tsens0 11>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpu7-thermal {
+			thermal-sensors = <&tsens0 12>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		modem0-thermal {
+			thermal-sensors = <&tsens0 13>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		display-thermal {
+			thermal-sensors = <&tsens0 14>;
+
+			trips {
+				trip-point0 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		gpu-thermal {
+			polling-delay-passive = <250>;
+
+			thermal-sensors = <&tsens0 15>;
+
+			trips {
+				trip-point0 {
+					temperature = <85000>;
+					hysteresis = <1000>;
+					type = "passive";
+				};
+
+				trip-point1 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				trip-point2 {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+	};
+
 	timer {
 		compatible = "arm,armv8-timer";
 		interrupts = <GIC_PPI 1 IRQ_TYPE_LEVEL_LOW>,
-- 
2.55.0


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

end of thread, other threads:[~2026-08-21  3:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21  3:03 [PATCH 0/2] arm64: dts: qcom: sm6125: add TSENS die temperature sensing Roman Linev
2026-08-21  3:03 ` [PATCH 1/2] dt-bindings: thermal: qcom-tsens: add qcom,sm6125-tsens Roman Linev
2026-08-21  3:03 ` [PATCH 2/2] arm64: dts: qcom: sm6125: add TSENS and thermal zones Roman Linev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox