* [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
@ 2026-10-14 19:35 Daniel Lezcano
2026-10-14 19:36 ` johannes.goede
2026-10-14 19:47 ` sashiko-bot
0 siblings, 2 replies; 4+ messages in thread
From: Daniel Lezcano @ 2026-10-14 19:35 UTC (permalink / raw)
To: andersson, konradybcio
Cc: robh, krzk+dt, johannes.goede, conor+dt, stephan.gerhold,
linux-arm-msm, devicetree, linux-kernel
Add thermal zones for the ThinkPad T14s and describe the board
temperature sensors exposed through the PMK8550 VADC.
Add a passive thermal zone for the keyboard area, which is the main
thermal constraint under sustained load. The EC reports a thermal alert
at 57.85°C, so use this value as the passive trip point and allow the
thermal framework to throttle all CPUs and the GPU when the threshold is
reached. Use a 1000 m°C hysteresis and a 500 ms passive polling interval.
An earlier approach used staged CPU cluster throttling in an attempt to
start thermal mitigation before reaching the target temperature. Testing
did not show a significant improvement compared to throttling all CPUs at
the EC thermal alert threshold. It also introduced a latency imbalance
between the different CPU clusters, which could negatively affect
workloads depending on where tasks are scheduled.
A more optimal solution would require a significantly more complex,
system-wide approach, accounting for the workload distribution and the
available power and thermal headroom across the CPU clusters and other
devices. Such an approach would also require kernel mechanisms which are
not currently available. Keep the thermal policy simple here and use a
single passive trip, which at least ensures that the system is actively
mitigated before reaching temperatures that could ultimately lead to a
thermal shutdown.
The mitigation temperature is derived from the platform behaviour when
using the balanced power profile available under Windows. A separate
change will adjust this trip point dynamically according to events
reported by the embedded controller. Name the trip
"keyboard-ec-alert" so that the EC driver can identify the corresponding
trip point in the device tree.
Also add a 73°C critical trip to shut the system down if the keyboard
temperature reaches an unsafe level.
Add a thermal zone for the back cover with a 73°C critical shutdown
trip.
Describe the SoC, SMB, SDX, east and west board temperature sensors as
monitoring-only thermal zones.
Thermal camera measurements were also used to compare the reported
temperatures with the physical temperature of the chassis. The measured
values appear to primarily represent temperatures inside the enclosure
rather than the user-contact surface temperature. No unsafe external
surface temperature was observed during these tests, although this should
not be considered a substitute for formal platform thermal qualification.
Finally, enable ADC thermal monitoring on the corresponding PMK8550 VADC
channels used by these thermal zones.
Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
---
.../qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 105 ++++++++++++++++++
1 file changed, 105 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
index 75ad74bcb042..2d0a434d2248 100644
--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
@@ -502,6 +502,81 @@ platform {
};
};
};
+
+ thermal-zones {
+ backcover-thermal {
+ critical-action = "shutdown";
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_THM_100K_PU(1)>;
+
+ trips {
+ backcover-critical {
+ temperature = <73000>;
+ hysteresis = <1000>;
+ type = "critical";
+ };
+ };
+ };
+
+ east-thermal {
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX4_THM_100K_PU(1)>;
+ };
+
+ keyboard-thermal {
+ critical-action = "shutdown";
+ polling-delay-passive = <500>;
+
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX2_GPIO_100K_PU(1)>;
+
+ trips {
+ keyboard_ec_alert: keyboard-ec-alert {
+ temperature = <57850>;
+ hysteresis = <1000>;
+ type = "passive";
+ };
+
+ keyboard-critical {
+ temperature = <73000>;
+ hysteresis = <1000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&keyboard_ec_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu8 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu9 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu10 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu11 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ sdx-thermal {
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX3_THM_100K_PU(1)>;
+ };
+
+ smb-thermal {
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX2_THM_100K_PU(1)>;
+ };
+
+ soc-thermal {
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_GPIO_100K_PU(1)>;
+ };
+
+ west-thermal {
+ thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX5_THM_100K_PU(1)>;
+ };
+ };
};
&apps_rsc {
@@ -1285,6 +1360,36 @@ usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
};
};
+&pmk8550_vadc {
+ channel@144 {
+ qcom,adc-tm;
+ };
+
+ channel@145 {
+ qcom,adc-tm;
+ };
+
+ channel@146 {
+ qcom,adc-tm;
+ };
+
+ channel@147 {
+ qcom,adc-tm;
+ };
+
+ channel@148 {
+ qcom,adc-tm;
+ };
+
+ channel@14a {
+ qcom,adc-tm;
+ };
+
+ channel@14b {
+ qcom,adc-tm;
+ };
+};
+
&qupv3_0 {
status = "okay";
};
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
2026-10-14 19:35 [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs Daniel Lezcano
@ 2026-10-14 19:36 ` johannes.goede
2026-10-14 19:47 ` sashiko-bot
1 sibling, 0 replies; 4+ messages in thread
From: johannes.goede @ 2026-10-14 19:36 UTC (permalink / raw)
To: Daniel Lezcano, andersson, konradybcio
Cc: robh, krzk+dt, conor+dt, stephan.gerhold, linux-arm-msm,
devicetree, linux-kernel
Hi,
On 14-Oct-26 21:35, Daniel Lezcano wrote:
> Add thermal zones for the ThinkPad T14s and describe the board
> temperature sensors exposed through the PMK8550 VADC.
>
> Add a passive thermal zone for the keyboard area, which is the main
> thermal constraint under sustained load. The EC reports a thermal alert
> at 57.85°C, so use this value as the passive trip point and allow the
> thermal framework to throttle all CPUs and the GPU when the threshold is
> reached. Use a 1000 m°C hysteresis and a 500 ms passive polling interval.
>
> An earlier approach used staged CPU cluster throttling in an attempt to
> start thermal mitigation before reaching the target temperature. Testing
> did not show a significant improvement compared to throttling all CPUs at
> the EC thermal alert threshold. It also introduced a latency imbalance
> between the different CPU clusters, which could negatively affect
> workloads depending on where tasks are scheduled.
>
> A more optimal solution would require a significantly more complex,
> system-wide approach, accounting for the workload distribution and the
> available power and thermal headroom across the CPU clusters and other
> devices. Such an approach would also require kernel mechanisms which are
> not currently available. Keep the thermal policy simple here and use a
> single passive trip, which at least ensures that the system is actively
> mitigated before reaching temperatures that could ultimately lead to a
> thermal shutdown.
>
> The mitigation temperature is derived from the platform behaviour when
> using the balanced power profile available under Windows. A separate
> change will adjust this trip point dynamically according to events
> reported by the embedded controller. Name the trip
> "keyboard-ec-alert" so that the EC driver can identify the corresponding
> trip point in the device tree.
>
> Also add a 73°C critical trip to shut the system down if the keyboard
> temperature reaches an unsafe level.
>
> Add a thermal zone for the back cover with a 73°C critical shutdown
> trip.
>
> Describe the SoC, SMB, SDX, east and west board temperature sensors as
> monitoring-only thermal zones.
>
> Thermal camera measurements were also used to compare the reported
> temperatures with the physical temperature of the chassis. The measured
> values appear to primarily represent temperatures inside the enclosure
> rather than the user-contact surface temperature. No unsafe external
> surface temperature was observed during these tests, although this should
> not be considered a substitute for formal platform thermal qualification.
>
> Finally, enable ADC thermal monitoring on the corresponding PMK8550 VADC
> channels used by these thermal zones.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Thanks, patch looks good to me:
Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
Regards,
Hans
> ---
> .../qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 105 ++++++++++++++++++
> 1 file changed, 105 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> index 75ad74bcb042..2d0a434d2248 100644
> --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> @@ -502,6 +502,81 @@ platform {
> };
> };
> };
> +
> + thermal-zones {
> + backcover-thermal {
> + critical-action = "shutdown";
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_THM_100K_PU(1)>;
> +
> + trips {
> + backcover-critical {
> + temperature = <73000>;
> + hysteresis = <1000>;
> + type = "critical";
> + };
> + };
> + };
> +
> + east-thermal {
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX4_THM_100K_PU(1)>;
> + };
> +
> + keyboard-thermal {
> + critical-action = "shutdown";
> + polling-delay-passive = <500>;
> +
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX2_GPIO_100K_PU(1)>;
> +
> + trips {
> + keyboard_ec_alert: keyboard-ec-alert {
> + temperature = <57850>;
> + hysteresis = <1000>;
> + type = "passive";
> + };
> +
> + keyboard-critical {
> + temperature = <73000>;
> + hysteresis = <1000>;
> + type = "critical";
> + };
> + };
> +
> + cooling-maps {
> + map0 {
> + trip = <&keyboard_ec_alert>;
> + cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu8 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu9 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu10 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&cpu11 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
> + <&gpu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
> + };
> + };
> + };
> +
> + sdx-thermal {
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX3_THM_100K_PU(1)>;
> + };
> +
> + smb-thermal {
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX2_THM_100K_PU(1)>;
> + };
> +
> + soc-thermal {
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_GPIO_100K_PU(1)>;
> + };
> +
> + west-thermal {
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX5_THM_100K_PU(1)>;
> + };
> + };
> };
>
> &apps_rsc {
> @@ -1285,6 +1360,36 @@ usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
> };
> };
>
> +&pmk8550_vadc {
> + channel@144 {
> + qcom,adc-tm;
> + };
> +
> + channel@145 {
> + qcom,adc-tm;
> + };
> +
> + channel@146 {
> + qcom,adc-tm;
> + };
> +
> + channel@147 {
> + qcom,adc-tm;
> + };
> +
> + channel@148 {
> + qcom,adc-tm;
> + };
> +
> + channel@14a {
> + qcom,adc-tm;
> + };
> +
> + channel@14b {
> + qcom,adc-tm;
> + };
> +};
> +
> &qupv3_0 {
> status = "okay";
> };
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
2026-10-14 19:35 [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs Daniel Lezcano
2026-10-14 19:36 ` johannes.goede
@ 2026-10-14 19:47 ` sashiko-bot
2026-10-14 19:52 ` Daniel Lezcano
1 sibling, 1 reply; 4+ messages in thread
From: sashiko-bot @ 2026-10-14 19:47 UTC (permalink / raw)
To: Daniel Lezcano; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] dts: missing #thermal-sensor-cells causes thermal zone registration failure
--
commit fd5ef96fe4a4a5f82c85c0157e689c00a5a97d30
Author: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
Add thermal zones for the ThinkPad T14s and describe the board
temperature sensors exposed through the PMK8550 VADC.
> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> index 0bee2a3d6e7a9..9586421553442 100644
> --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> @@ -502,6 +502,81 @@ platform {
> };
> };
> };
> +
> + thermal-zones {
> + backcover-thermal {
> + critical-action = "shutdown";
> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_THM_100K_PU(1)>;
[Severity: High]
Does this setup cause thermal zone registration to fail at boot?
During boot, the thermal framework resolves the thermal-sensors phandle using
of_parse_phandle_with_args(), which expects the target node to have a
#thermal-sensor-cells property.
Since the target pmk8550_vadc node lacks the #thermal-sensor-cells property,
will the device tree parser return -EINVAL, causing thermal_of_zone_register()
to abort registration for all these newly added thermal zones?
[ ... ]
> @@ -1285,6 +1360,36 @@ usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
> };
> };
>
> +&pmk8550_vadc {
> + channel@144 {
> + qcom,adc-tm;
> + };
[Severity: High]
Should this override block include `#thermal-sensor-cells = <1>;`?
Adding the missing property here would allow the thermal framework to
successfully parse and register the thermal zones.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261014193524.5590-1-daniel.lezcano@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
2026-10-14 19:47 ` sashiko-bot
@ 2026-10-14 19:52 ` Daniel Lezcano
0 siblings, 0 replies; 4+ messages in thread
From: Daniel Lezcano @ 2026-10-14 19:52 UTC (permalink / raw)
To: sashiko-reviews; +Cc: devicetree, robh, conor+dt
On 10/14/26 21:47, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] dts: missing #thermal-sensor-cells causes thermal zone registration failure
> --
>
> commit fd5ef96fe4a4a5f82c85c0157e689c00a5a97d30
> Author: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
>
> arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs
>
> Add thermal zones for the ThinkPad T14s and describe the board
> temperature sensors exposed through the PMK8550 VADC.
>
>> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
>> index 0bee2a3d6e7a9..9586421553442 100644
>> --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
>> @@ -502,6 +502,81 @@ platform {
>> };
>> };
>> };
>> +
>> + thermal-zones {
>> + backcover-thermal {
>> + critical-action = "shutdown";
>> + thermal-sensors = <&pmk8550_vadc ADC5_GEN3_AMUX1_THM_100K_PU(1)>;
>
> [Severity: High]
> Does this setup cause thermal zone registration to fail at boot?
>
> During boot, the thermal framework resolves the thermal-sensors phandle using
> of_parse_phandle_with_args(), which expects the target node to have a
> #thermal-sensor-cells property.
>
> Since the target pmk8550_vadc node lacks the #thermal-sensor-cells property,
> will the device tree parser return -EINVAL, causing thermal_of_zone_register()
> to abort registration for all these newly added thermal zones?
>
> [ ... ]
>
>> @@ -1285,6 +1360,36 @@ usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
>> };
>> };
>>
>> +&pmk8550_vadc {
>> + channel@144 {
>> + qcom,adc-tm;
>> + };
>
> [Severity: High]
> Should this override block include `#thermal-sensor-cells = <1>;`?
>
> Adding the missing property here would allow the thermal framework to
> successfully parse and register the thermal zones.
False positive:
https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/hamoa-pmics.dtsi?h=for-next#n291
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-10-14 19:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-14 19:35 [PATCH v3] arm64: dts: qcom: x1e78100-thinkpad-t14s: Add thermal zones for PMICs Daniel Lezcano
2026-10-14 19:36 ` johannes.goede
2026-10-14 19:47 ` sashiko-bot
2026-10-14 19:52 ` Daniel Lezcano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox