[PATCH v2] arm64: dts: qcom: monaco-arduino-monza: Rework fan cooling map
Loic Poulain <[email protected]> Mon, 03 Aug 2026 13:55:57 +0200
| Newsgroups | org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
The fan thermal zone previously had a single "active" trip at 32C mapped to the fan over the full cooling range (<&fan 0 THERMAL_NO_LIMIT>). With the default step_wise governor this only ramps the fan one step per poll according to the thermal trend, so the fan speed tracked whether the temperature was rising or falling rather than the temperature itself. A visible consequence is at boot/reboot: if the board comes up already hot but thermally stable (temperature above the trip but not rising), step_wise sees no upward trend and leaves the fan at a low or zero cooling state, so the fan stays slow despite the high temperature. Replace it with a ladder of active trips that each pin the fan to a fixed cooling state (lower == upper in the cooling-maps), turning the fan speed into a function of the actual temperature band. The multiple trips also give the tsens hardware several thresholds to raise an interrupt on, so the fan is re-evaluated whenever the temperature crosses a band boundary instead of only when leaving the single operating point. The zone is now purely interrupt driven, so the polling-delay is dropped. This also shifts fan enablement to a higher starting point: the fan now first engages at 50C rather than 32C as the fan was spinning almost all the time at such low threshold. The values are picked based on empirical board testing. Signed-off-by: Loic Poulain <[email protected]> --- Changes in v2: - Use THERMAL_NO_LIMIT as terminator for the latest operating point (Konrad) - Link to v1: https://lore.kernel.org/r/[email protected] --- arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts | 47 +++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts index d1346ca5dd4ef75072b09afd78e914e3f6b12534..4179c6088494b8d4fafd97cb9623fdf1bb9a4309 100644 --- a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts +++ b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts @@ -452,20 +452,51 @@ &pcieport1 { &thermal_zones { cpuss-0-0-thermal { - polling-delay = <2000>; - trips { - cpuss0_active: cpuss-active { - temperature = <32000>; - hysteresis = <2000>; + cpuss0_active0: cpuss-active0 { + temperature = <50000>; + hysteresis = <4000>; + type = "active"; + }; + + cpuss0_active1: cpuss-active1 { + temperature = <60000>; + hysteresis = <4000>; + type = "active"; + }; + + cpuss0_active2: cpuss-active2 { + temperature = <70000>; + hysteresis = <4000>; + type = "active"; + }; + + cpuss0_active3: cpuss-active3 { + temperature = <80000>; + hysteresis = <4000>; type = "active"; }; }; cooling-maps { - map-active { - trip = <&cpuss0_active>; - cooling-device = <&fan 0 THERMAL_NO_LIMIT>; + map-active0 { + trip = <&cpuss0_active0>; + cooling-device = <&fan 4 4>; + }; + + map-active1 { + trip = <&cpuss0_active1>; + cooling-device = <&fan 6 6>; + }; + + map-active2 { + trip = <&cpuss0_active2>; + cooling-device = <&fan 8 8>; + }; + + map-active3 { + trip = <&cpuss0_active3>; + cooling-device = <&fan 10 THERMAL_NO_LIMIT>; }; }; }; --- base-commit: 2edbea82d8edbddb2a235b8f988f17b86f075476 change-id: 20260722-fix-fan-monza-7c27404fe7e3 Best regards, -- Loic Poulain <[email protected]>