From: "Michał Kopeć" <michal@nozomi.space>
To: AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Matthias Brugger <matthias.bgg@gmail.com>
Cc: "Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Fei Shao" <fshao@chromium.org>,
devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
"Michał Kopeć" <michal@nozomi.space>
Subject: [PATCH 2/3] arm64: dts: mediatek: mt8188: Add power allocator parameters to CPU zones
Date: Sat, 3 Oct 2026 21:31:07 +0200 [thread overview]
Message-ID: <20261003193108.789939-3-michal@nozomi.space> (raw)
In-Reply-To: <20261003193108.789939-1-michal@nozomi.space>
Under sustained load the CPU temperature on MT8188 rises from the passive
trip to the 100 C critical trip within seconds, faster than the step-wise
governor lowers the CPU frequency one step per poll, so the system hits a
thermal shutdown instead of throttling.
Describe the CPU thermal zones the way the ChromeOS kernel describes the
MT8188 SoC zone for the power allocator governor:
- a 68 C passive switch-on trip before the existing control trip,
- a sustainable power of 1500 mW,
- both CPU clusters as cooling devices in every CPU zone, weighted 2345
for the little and 1024 for the big cluster,
- a 100 ms passive polling interval.
The step-wise governor ignores the switch-on trip, which has no cooling
devices, so zones that don't use the power allocator keep their existing
trip points. Limit the new little cluster maps of the big zones to the
four remaining little cores on MT8370.
Signed-off-by: Michał Kopeć <michal@nozomi.space>
---
arch/arm64/boot/dts/mediatek/mt8188.dtsi | 110 +++++++++++++++++++++--
arch/arm64/boot/dts/mediatek/mt8370.dtsi | 14 +++
2 files changed, 118 insertions(+), 6 deletions(-)
diff --git a/arch/arm64/boot/dts/mediatek/mt8188.dtsi b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
index 14a320f0c70cb..07f5f4e62d7d6 100644
--- a/arch/arm64/boot/dts/mediatek/mt8188.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
@@ -471,10 +471,17 @@ sound: sound {
thermal_zones: thermal-zones {
cpu-little0-thermal {
polling-delay = <1000>;
- polling-delay-passive = <150>;
+ polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_LITTLE_CPU0>;
+ sustainable-power = <1500>;
trips {
+ cpu_little0_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_little0_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -503,16 +510,31 @@ cpu_little0_cooling_map0: map0 {
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
+ trip = <&cpu_little0_alert0>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
cpu-little1-thermal {
polling-delay = <1000>;
- polling-delay-passive = <150>;
+ polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_LITTLE_CPU1>;
+ sustainable-power = <1500>;
trips {
+ cpu_little1_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_little1_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -541,16 +563,31 @@ cpu_little1_cooling_map0: map0 {
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
+ trip = <&cpu_little1_alert0>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
cpu-little2-thermal {
polling-delay = <1000>;
- polling-delay-passive = <150>;
+ polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_LITTLE_CPU2>;
+ sustainable-power = <1500>;
trips {
+ cpu_little2_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_little2_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -579,16 +616,31 @@ cpu_little2_cooling_map0: map0 {
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
+ trip = <&cpu_little2_alert0>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
cpu-little3-thermal {
polling-delay = <1000>;
- polling-delay-passive = <150>;
+ polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_LITTLE_CPU3>;
+ sustainable-power = <1500>;
trips {
+ cpu_little3_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_little3_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -617,6 +669,14 @@ cpu_little3_cooling_map0: map0 {
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
+ trip = <&cpu_little3_alert0>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
@@ -625,8 +685,15 @@ cpu-big0-thermal {
polling-delay = <1000>;
polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_BIG_CPU0>;
+ sustainable-power = <1500>;
trips {
+ cpu_big0_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_big0_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -647,10 +714,22 @@ cpu_big0_crit: trip-crit {
};
cooling-maps {
- map0 {
+ cpu_big0_cooling_map0: map0 {
+ trip = <&cpu_big0_alert0>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
trip = <&cpu_big0_alert0>;
cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
@@ -659,8 +738,15 @@ cpu-big1-thermal {
polling-delay = <1000>;
polling-delay-passive = <100>;
thermal-sensors = <&lvts_mcu MT8188_MCU_BIG_CPU1>;
+ sustainable-power = <1500>;
trips {
+ cpu_big1_switch_on: trip-switch-on {
+ temperature = <68000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
cpu_big1_alert0: trip-alert0 {
temperature = <85000>;
hysteresis = <2000>;
@@ -681,10 +767,22 @@ cpu_big1_crit: trip-crit {
};
cooling-maps {
- map0 {
+ cpu_big1_cooling_map0: map0 {
+ trip = <&cpu_big1_alert0>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <2345>;
+ };
+
+ map1 {
trip = <&cpu_big1_alert0>;
cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
<&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ contribution = <1024>;
};
};
};
diff --git a/arch/arm64/boot/dts/mediatek/mt8370.dtsi b/arch/arm64/boot/dts/mediatek/mt8370.dtsi
index 7ac8b8d034945..61801f79e729e 100644
--- a/arch/arm64/boot/dts/mediatek/mt8370.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8370.dtsi
@@ -59,6 +59,20 @@ &cpu_little3_cooling_map0 {
<&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
};
+&cpu_big0_cooling_map0 {
+ 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>;
+};
+
+&cpu_big1_cooling_map0 {
+ 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>;
+};
+
/*
* Please note that overriding compatibles is a discouraged practice and is a
* clear indication of nodes not being, well, compatible!
--
2.55.0
next prev parent reply other threads:[~2026-10-03 19:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-03 19:31 [PATCH 0/3] arm64: dts: mediatek: mt8188: SCP memory, thermal and touchpad fixes Michał Kopeć
2026-10-03 19:31 ` [PATCH 1/3] arm64: dts: mediatek: mt8188-geralt: Reserve SCP dual-core memory region Michał Kopeć
2026-10-03 19:31 ` Michał Kopeć [this message]
2026-10-03 19:31 ` [PATCH 3/3] arm64: dts: mediatek: mt8188-geralt: Add the detachable base touchpad Michał Kopeć
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261003193108.789939-3-michal@nozomi.space \
--to=michal@nozomi.space \
--cc=angelogioacchino.delregno@collabora.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=fshao@chromium.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox