From: Fabricio Akio via B4 Relay <devnull+fabricioakio.gmail.com@kernel.org>
To: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>
Cc: Abel Vesa <abelvesa@kernel.org>,
Alexey Minnekhanov <alexeymin@postmarketos.org>,
Dmitry Baryshkov <lumag@kernel.org>,
Martin Botka <martin.botka@somainline.org>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Fabricio Akio <fabricioakio@gmail.com>
Subject: [PATCH 1/2] arm64: dts: qcom: sdm630: Drop the cluster idle states
Date: Sun, 11 Oct 2026 23:18:07 -0300 [thread overview]
Message-ID: <20261011-sdm630-idle-states-v1-1-3181d488dc0f@gmail.com> (raw)
In-Reply-To: <20261011-sdm630-idle-states-v1-0-3181d488dc0f@gmail.com>
From: Fabricio Akio <fabricioakio@gmail.com>
The cluster idle states use PSCI parameters 0x400000f2-0x400000f4. The
vendor kernel encodes a cluster state differently: it puts the cluster
mode in StateID bits 7:4 and sets an affinity-level field, bits 25:24,
to 1, so cluster power collapse is 0x41000043, and only the last
running CPU of a cluster requests one. A flat cpu-idle-states list
cannot express that condition.
cpuidle records no successful entry into any of these states, and every
request for one fails. Because they are the deepest, an idle CPU keeps
choosing one, each attempt returns at once, and the CPU spends its idle
time retrying instead of sleeping. On a Motorola Moto X4 (SDM630) with
the screen off, the CPUs made about 133,000 failed idle entries per
second and spent about 10% of the time in an idle state, and the
battery supplied 277 mA. Without these states they spend nearly all of
it in one, and the battery supplies 115 mA.
Fixes: b190fb010664 ("arm64: dts: qcom: sdm630: Add sdm630 dts file")
Signed-off-by: Fabricio Akio <fabricioakio@gmail.com>
---
arch/arm64/boot/dts/qcom/sdm630.dtsi | 108 +++--------------------------------
1 file changed, 8 insertions(+), 100 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/sdm630.dtsi b/arch/arm64/boot/dts/qcom/sdm630.dtsi
index 3a1014804fb0..222ec5886818 100644
--- a/arch/arm64/boot/dts/qcom/sdm630.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm630.dtsi
@@ -55,11 +55,7 @@ cpu0: cpu@100 {
compatible = "arm,cortex-a53";
reg = <0x0 0x100>;
enable-method = "psci";
- cpu-idle-states = <&perf_cpu_sleep_0
- &perf_cpu_sleep_1
- &perf_cluster_sleep_0
- &perf_cluster_sleep_1
- &perf_cluster_sleep_2>;
+ cpu-idle-states = <&perf_cpu_sleep_0 &perf_cpu_sleep_1>;
capacity-dmips-mhz = <1126>;
#cooling-cells = <2>;
next-level-cache = <&l2_1>;
@@ -75,11 +71,7 @@ cpu1: cpu@101 {
compatible = "arm,cortex-a53";
reg = <0x0 0x101>;
enable-method = "psci";
- cpu-idle-states = <&perf_cpu_sleep_0
- &perf_cpu_sleep_1
- &perf_cluster_sleep_0
- &perf_cluster_sleep_1
- &perf_cluster_sleep_2>;
+ cpu-idle-states = <&perf_cpu_sleep_0 &perf_cpu_sleep_1>;
capacity-dmips-mhz = <1126>;
#cooling-cells = <2>;
next-level-cache = <&l2_1>;
@@ -90,11 +82,7 @@ cpu2: cpu@102 {
compatible = "arm,cortex-a53";
reg = <0x0 0x102>;
enable-method = "psci";
- cpu-idle-states = <&perf_cpu_sleep_0
- &perf_cpu_sleep_1
- &perf_cluster_sleep_0
- &perf_cluster_sleep_1
- &perf_cluster_sleep_2>;
+ cpu-idle-states = <&perf_cpu_sleep_0 &perf_cpu_sleep_1>;
capacity-dmips-mhz = <1126>;
#cooling-cells = <2>;
next-level-cache = <&l2_1>;
@@ -105,11 +93,7 @@ cpu3: cpu@103 {
compatible = "arm,cortex-a53";
reg = <0x0 0x103>;
enable-method = "psci";
- cpu-idle-states = <&perf_cpu_sleep_0
- &perf_cpu_sleep_1
- &perf_cluster_sleep_0
- &perf_cluster_sleep_1
- &perf_cluster_sleep_2>;
+ cpu-idle-states = <&perf_cpu_sleep_0 &perf_cpu_sleep_1>;
capacity-dmips-mhz = <1126>;
#cooling-cells = <2>;
next-level-cache = <&l2_1>;
@@ -120,11 +104,7 @@ cpu4: cpu@0 {
compatible = "arm,cortex-a53";
reg = <0x0 0x0>;
enable-method = "psci";
- cpu-idle-states = <&pwr_cpu_sleep_0
- &pwr_cpu_sleep_1
- &pwr_cluster_sleep_0
- &pwr_cluster_sleep_1
- &pwr_cluster_sleep_2>;
+ cpu-idle-states = <&pwr_cpu_sleep_0 &pwr_cpu_sleep_1>;
capacity-dmips-mhz = <1024>;
#cooling-cells = <2>;
next-level-cache = <&l2_0>;
@@ -140,11 +120,7 @@ cpu5: cpu@1 {
compatible = "arm,cortex-a53";
reg = <0x0 0x1>;
enable-method = "psci";
- cpu-idle-states = <&pwr_cpu_sleep_0
- &pwr_cpu_sleep_1
- &pwr_cluster_sleep_0
- &pwr_cluster_sleep_1
- &pwr_cluster_sleep_2>;
+ cpu-idle-states = <&pwr_cpu_sleep_0 &pwr_cpu_sleep_1>;
capacity-dmips-mhz = <1024>;
#cooling-cells = <2>;
next-level-cache = <&l2_0>;
@@ -155,11 +131,7 @@ cpu6: cpu@2 {
compatible = "arm,cortex-a53";
reg = <0x0 0x2>;
enable-method = "psci";
- cpu-idle-states = <&pwr_cpu_sleep_0
- &pwr_cpu_sleep_1
- &pwr_cluster_sleep_0
- &pwr_cluster_sleep_1
- &pwr_cluster_sleep_2>;
+ cpu-idle-states = <&pwr_cpu_sleep_0 &pwr_cpu_sleep_1>;
capacity-dmips-mhz = <1024>;
#cooling-cells = <2>;
next-level-cache = <&l2_0>;
@@ -170,11 +142,7 @@ cpu7: cpu@3 {
compatible = "arm,cortex-a53";
reg = <0x0 0x3>;
enable-method = "psci";
- cpu-idle-states = <&pwr_cpu_sleep_0
- &pwr_cpu_sleep_1
- &pwr_cluster_sleep_0
- &pwr_cluster_sleep_1
- &pwr_cluster_sleep_2>;
+ cpu-idle-states = <&pwr_cpu_sleep_0 &pwr_cpu_sleep_1>;
capacity-dmips-mhz = <1024>;
#cooling-cells = <2>;
next-level-cache = <&l2_0>;
@@ -258,66 +226,6 @@ perf_cpu_sleep_1: cpu-sleep-1-1 {
min-residency-us = <1000>;
local-timer-stop;
};
-
- pwr_cluster_sleep_0: cluster-sleep-0-0 {
- compatible = "arm,idle-state";
- idle-state-name = "pwr-cluster-dynamic-retention";
- arm,psci-suspend-param = <0x400000f2>;
- entry-latency-us = <284>;
- exit-latency-us = <384>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
-
- pwr_cluster_sleep_1: cluster-sleep-0-1 {
- compatible = "arm,idle-state";
- idle-state-name = "pwr-cluster-retention";
- arm,psci-suspend-param = <0x400000f3>;
- entry-latency-us = <338>;
- exit-latency-us = <423>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
-
- pwr_cluster_sleep_2: cluster-sleep-0-2 {
- compatible = "arm,idle-state";
- idle-state-name = "pwr-cluster-retention";
- arm,psci-suspend-param = <0x400000f4>;
- entry-latency-us = <515>;
- exit-latency-us = <1821>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
-
- perf_cluster_sleep_0: cluster-sleep-1-0 {
- compatible = "arm,idle-state";
- idle-state-name = "perf-cluster-dynamic-retention";
- arm,psci-suspend-param = <0x400000f2>;
- entry-latency-us = <272>;
- exit-latency-us = <329>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
-
- perf_cluster_sleep_1: cluster-sleep-1-1 {
- compatible = "arm,idle-state";
- idle-state-name = "perf-cluster-retention";
- arm,psci-suspend-param = <0x400000f3>;
- entry-latency-us = <332>;
- exit-latency-us = <368>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
-
- perf_cluster_sleep_2: cluster-sleep-1-2 {
- compatible = "arm,idle-state";
- idle-state-name = "perf-cluster-retention";
- arm,psci-suspend-param = <0x400000f4>;
- entry-latency-us = <545>;
- exit-latency-us = <1609>;
- min-residency-us = <9987>;
- local-timer-stop;
- };
};
};
--
2.56.0
next prev parent reply other threads:[~2026-10-12 2:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 2:18 [PATCH 0/2] arm64: dts: qcom: sdm630: Fix the CPU " Fabricio Akio via B4 Relay
2026-10-12 2:18 ` Fabricio Akio via B4 Relay [this message]
2026-10-15 13:51 ` [PATCH 1/2] arm64: dts: qcom: sdm630: Drop the cluster " Konrad Dybcio
2026-10-20 16:15 ` Fabricio Akio
2026-10-23 12:44 ` Konrad Dybcio
2026-10-23 16:27 ` Konrad Dybcio
2026-10-12 2:18 ` [PATCH 2/2] arm64: dts: qcom: sdm630: Fix the CPU retention idle state parameter Fabricio Akio via B4 Relay
2026-10-15 13:41 ` Konrad Dybcio
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=20261011-sdm630-idle-states-v1-1-3181d488dc0f@gmail.com \
--to=devnull+fabricioakio.gmail.com@kernel.org \
--cc=abelvesa@kernel.org \
--cc=alexeymin@postmarketos.org \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=fabricioakio@gmail.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=martin.botka@somainline.org \
--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
all inboxes | Powered by JetHome®