diff mbox series

[v2,7/9] arm64: dts: qcom: msm8998: Add PSCI cpuidle low power states

Message ID 49cf5d94beb9af9ef4e78d4c52f3b0ad20b7c63f.1558430617.git.amit.kucheria@linaro.org (mailing list archive)
State New, archived
Headers show
Series qcom: Add cpuidle to some platforms | expand

Commit Message

Amit Kucheria May 21, 2019, 9:35 a.m. UTC
Add device bindings for cpuidle states for cpu devices.

Cc: Marc Gonzalez <marc.w.gonzalez@free.fr>
Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 arch/arm64/boot/dts/qcom/msm8998.dtsi | 50 +++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

Comments

Marc Gonzalez May 21, 2019, 12:03 p.m. UTC | #1
On 21/05/2019 11:35, Amit Kucheria wrote:

> Add device bindings for cpuidle states for cpu devices.
> 
> Cc: Marc Gonzalez <marc.w.gonzalez@free.fr>
> Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  arch/arm64/boot/dts/qcom/msm8998.dtsi | 50 +++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> index 3fd0769fe648..54810980fcf9 100644
> --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> @@ -78,6 +78,7 @@
>  			compatible = "arm,armv8";
>  			reg = <0x0 0x0>;
>  			enable-method = "psci";
> +			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
>  			efficiency = <1024>;
>  			next-level-cache = <&L2_0>;
>  			L2_0: l2-cache {


NB: this patch does not apply cleanly to v5.2-rc1  ;-)

86f93c93dd50 arm64: dts: msm8998: efficiency is not valid property

commit 86f93c93dd5005f0aeb8ce84c2113e21a6006c7d
Author:     Amit Kucheria <amit.kucheria@linaro.org>
AuthorDate: Fri Mar 29 15:42:08 2019 +0530
Commit:     Andy Gross <agross@kernel.org>
CommitDate: Tue Apr 9 23:08:17 2019 -0500

After manually fixing up the trivial conflict, the DTB builds without errors.

I then enable
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y

(because I'm using a board-specific tiny defconfig)

And... the system starts to boot, hangs a few seconds, then silently reboots:

scsi 0:0:0:3: Direct-Access     SAMSUNG  KLUBG4G1CE-B0B1  0800 PQ: 0 ANSI: 6
sd 0:0:0:1: [sdb] 16384-byte physical blocks
sd 0:0:0:2: [sdc] 2048 4096-byte logical blocks: (8.39 MB/8.00 MiB)
sd 0:0:0:2: [sdc] 16384-byte physical blocks

Format: Log Type - Time(microsec) - Message - Optional Info
Log Type: B - Since Boot(Power On Reset),  D - Delta,  S - Statistic
S - QC_IMAGE_VERSION_STRING=BOOT.XF.1.2.2-00157-M8998LZB-1
S - IMAGE_VARIANT_STRING=Msm8998LA


Looks like the "helpful" behavior of the secure OS...

Regards.
Marc Gonzalez May 21, 2019, 4:10 p.m. UTC | #2
On 21/05/2019 14:03, Marc Gonzalez wrote:

> the system starts to boot, hangs a few seconds, then silently reboots

Using extremely high-tech debugging tools (i.e. spraying printk left and right)
I traced this one down to:

psci_cpu_suspend_enter: 435
psci_cpu_suspend: 171
psci_cpu_suspend: __invoke_psci_fn_smc c4000001
__invoke_psci_fn_smc: id=c4000001 3 0 0
/*** we never return from arm_smccc_smc() ***/


The following dmesg log caught my eye, and might be relevant:

ARM_SMCCC_ARCH_WORKAROUND_1 missing from firmware


If I revert your patch, psci_cpu_suspend_enter() is never called,
so we don't tickle the arm_smccc_smc() monster.

Could it be that my FW doesn't support PSCI?

Regards.
Marc Gonzalez May 22, 2019, 9:17 a.m. UTC | #3
[ Re-sending to a wider audience, hoping to catch someone's eye ]

https://patchwork.kernel.org/patch/10953257/

On 21/05/2019 14:03, Marc Gonzalez wrote:

> With CPUIDLE enabled, my system starts to boot, hangs a few seconds,
> then silently reboots (killed by FW)

Using extremely high-tech debugging tools (i.e. spraying printk left and right)
I traced this crash down to:

psci_cpu_suspend_enter: 435
psci_cpu_suspend: 171
psci_cpu_suspend: __invoke_psci_fn_smc c4000001
__invoke_psci_fn_smc: id=c4000001 3 0 0
/*** execution never returns from arm_smccc_smc() ***/


The following dmesg log caught my eye, and might be relevant:

	ARM_SMCCC_ARCH_WORKAROUND_1 missing from firmware

Is that bad, doctor? I don't think it would explain the crash though...


If I revert the patch, psci_cpu_suspend_enter() is never called,
so we don't tickle the arm_smccc_smc() monster.

Could it be that this FW doesn't support PSCI?

Regards.
Marc Zyngier May 22, 2019, 9:35 a.m. UTC | #4
On 22/05/2019 10:17, Marc Gonzalez wrote:
> [ Re-sending to a wider audience, hoping to catch someone's eye ]
> 
> https://patchwork.kernel.org/patch/10953257/
> 
> On 21/05/2019 14:03, Marc Gonzalez wrote:
> 
>> With CPUIDLE enabled, my system starts to boot, hangs a few seconds,
>> then silently reboots (killed by FW)
> 
> Using extremely high-tech debugging tools (i.e. spraying printk left and right)
> I traced this crash down to:
> 
> psci_cpu_suspend_enter: 435
> psci_cpu_suspend: 171
> psci_cpu_suspend: __invoke_psci_fn_smc c4000001
> __invoke_psci_fn_smc: id=c4000001 3 0 0
> /*** execution never returns from arm_smccc_smc() ***/
> 
> 
> The following dmesg log caught my eye, and might be relevant:
> 
> 	ARM_SMCCC_ARCH_WORKAROUND_1 missing from firmware
> 
> Is that bad, doctor? I don't think it would explain the crash though...

It doesn't explain it.

It is bad though: your vendor doesn't tell the kernel about the HW being
free of Spectre-v2, and doesn't provide a mitigation either. Hopefully,
this is a responsible vendor that will provide you with a firmware
update that fixes it.

> 
> 
> If I revert the patch, psci_cpu_suspend_enter() is never called,
> so we don't tickle the arm_smccc_smc() monster.
> 
> Could it be that this FW doesn't support PSCI?

Probably not in as well as it could, at least for CPU suspend.

	M.
Marc Gonzalez May 22, 2019, 2:48 p.m. UTC | #5
On 22/05/2019 11:17, Marc Gonzalez wrote:

> Could it be that this FW doesn't support PSCI?

I believe it works now.

Tested-by: Marc Gonzalez <marc.w.gonzalez@free.fr>

As pointed out by Niklas in v1:
	arm,psci-suspend-param needs to be 0x40000003 not 0x3

(If either local-timer-stop is removed, bad things happen.)

Below is the diff with next-20190521.

diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
index 412195b9794c..224f84e39204 100644
--- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
@@ -78,6 +78,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x0>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			next-level-cache = <&L2_0>;
 			L2_0: l2-cache {
 				compatible = "arm,arch-cache";
@@ -96,6 +97,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x1>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			next-level-cache = <&L2_0>;
 			L1_I_1: l1-icache {
 				compatible = "arm,arch-cache";
@@ -110,6 +112,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x2>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			next-level-cache = <&L2_0>;
 			L1_I_2: l1-icache {
 				compatible = "arm,arch-cache";
@@ -124,6 +127,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x3>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			next-level-cache = <&L2_0>;
 			L1_I_3: l1-icache {
 				compatible = "arm,arch-cache";
@@ -138,6 +142,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x100>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			next-level-cache = <&L2_1>;
 			L2_1: l2-cache {
 				compatible = "arm,arch-cache";
@@ -156,6 +161,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x101>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			next-level-cache = <&L2_1>;
 			L1_I_101: l1-icache {
 				compatible = "arm,arch-cache";
@@ -170,6 +176,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x102>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			next-level-cache = <&L2_1>;
 			L1_I_102: l1-icache {
 				compatible = "arm,arch-cache";
@@ -184,6 +191,7 @@
 			compatible = "arm,armv8";
 			reg = <0x0 0x103>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			next-level-cache = <&L2_1>;
 			L1_I_103: l1-icache {
 				compatible = "arm,arch-cache";
@@ -230,6 +238,48 @@
 				};
 			};
 		};
+
+		idle-states {
+			entry-method = "psci";
+
+			LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
+				compatible = "arm,idle-state";
+				idle-state-name = "little-retention";
+				arm,psci-suspend-param = <0x00000002>;
+				entry-latency-us = <43>;
+				exit-latency-us = <86>;
+				min-residency-us = <200>;
+			};
+
+			LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 {
+				compatible = "arm,idle-state";
+				idle-state-name = "little-power-collapse";
+				arm,psci-suspend-param = <0x40000003>;
+				entry-latency-us = <100>;
+				exit-latency-us = <612>;
+				min-residency-us = <1000>;
+				local-timer-stop;
+			};
+
+			BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
+				compatible = "arm,idle-state";
+				idle-state-name = "big-retention";
+				arm,psci-suspend-param = <0x00000002>;
+				entry-latency-us = <41>;
+				exit-latency-us = <82>;
+				min-residency-us = <200>;
+			};
+
+			BIG_CPU_SLEEP_1: cpu-sleep-1-1 {
+				compatible = "arm,idle-state";
+				idle-state-name = "big-power-collapse";
+				arm,psci-suspend-param = <0x40000003>;
+				entry-latency-us = <100>;
+				exit-latency-us = <525>;
+				min-residency-us = <1000>;
+				local-timer-stop;
+			};
+		};
 	};
 
 	firmware {






# for F in $(find /sys/devices/system/cpu -type f); do echo $F; cat $F; done
/sys/devices/system/cpu/cpuidle/current_governor_ro
menu
/sys/devices/system/cpu/cpuidle/current_driver
arm_idle
/sys/devices/system/cpu/uevent
/sys/devices/system/cpu/cpu7/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu7/cpuidle/state1/above
1
/sys/devices/system/cpu/cpu7/cpuidle/state1/time
15749
/sys/devices/system/cpu/cpu7/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu7/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu7/cpuidle/state1/latency
123
/sys/devices/system/cpu/cpu7/cpuidle/state1/usage
19
/sys/devices/system/cpu/cpu7/cpuidle/state1/desc
big-retention
/sys/devices/system/cpu/cpu7/cpuidle/state1/below
6
/sys/devices/system/cpu/cpu7/cpuidle/state1/name
cpu-sleep-1-0
/sys/devices/system/cpu/cpu7/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu7/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu7/cpuidle/state2/above
8
/sys/devices/system/cpu/cpu7/cpuidle/state2/time
616012492
/sys/devices/system/cpu/cpu7/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu7/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu7/cpuidle/state2/latency
625
/sys/devices/system/cpu/cpu7/cpuidle/state2/usage
120
/sys/devices/system/cpu/cpu7/cpuidle/state2/desc
big-power-collapse
/sys/devices/system/cpu/cpu7/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu7/cpuidle/state2/name
cpu-sleep-1-1
/sys/devices/system/cpu/cpu7/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu7/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu7/cpuidle/state0/time
29077
/sys/devices/system/cpu/cpu7/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu7/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu7/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu7/cpuidle/state0/usage
11
/sys/devices/system/cpu/cpu7/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu7/cpuidle/state0/below
8
/sys/devices/system/cpu/cpu7/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu7/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@103
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu7/power/runtime_active_time
0
/sys/devices/system/cpu/cpu7/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu7/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu7/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu7/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu7/power/control
auto
/sys/devices/system/cpu/cpu7/topology/physical_package_id
1
/sys/devices/system/cpu/cpu7/topology/core_siblings
f0
/sys/devices/system/cpu/cpu7/topology/core_siblings_list
4-7
/sys/devices/system/cpu/cpu7/topology/thread_siblings_list
7
/sys/devices/system/cpu/cpu7/topology/core_id
3
/sys/devices/system/cpu/cpu7/topology/thread_siblings
80
/sys/devices/system/cpu/cpu7/cpu_capacity
1024
/sys/devices/system/cpu/cpu7/cache/uevent
/sys/devices/system/cpu/cpu7/cache/index2/uevent
/sys/devices/system/cpu/cpu7/cache/index2/shared_cpu_list
4-7
/sys/devices/system/cpu/cpu7/cache/index2/type
Unified
/sys/devices/system/cpu/cpu7/cache/index2/level
2
/sys/devices/system/cpu/cpu7/cache/index2/shared_cpu_map
f0
/sys/devices/system/cpu/cpu7/cache/index0/uevent
/sys/devices/system/cpu/cpu7/cache/index0/shared_cpu_list
7
/sys/devices/system/cpu/cpu7/cache/index0/type
Data
/sys/devices/system/cpu/cpu7/cache/index0/level
1
/sys/devices/system/cpu/cpu7/cache/index0/shared_cpu_map
80
/sys/devices/system/cpu/cpu7/cache/index1/uevent
/sys/devices/system/cpu/cpu7/cache/index1/shared_cpu_list
7
/sys/devices/system/cpu/cpu7/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu7/cache/index1/level
1
/sys/devices/system/cpu/cpu7/cache/index1/shared_cpu_map
80
/sys/devices/system/cpu/cpu7/regs/identification/revidr_el1
0x0000000000000001
/sys/devices/system/cpu/cpu7/regs/identification/midr_el1
0x0000000051af8001
/sys/devices/system/cpu/cpu5/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu5/cpuidle/state1/above
0
/sys/devices/system/cpu/cpu5/cpuidle/state1/time
19922
/sys/devices/system/cpu/cpu5/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu5/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu5/cpuidle/state1/latency
123
/sys/devices/system/cpu/cpu5/cpuidle/state1/usage
28
/sys/devices/system/cpu/cpu5/cpuidle/state1/desc
big-retention
/sys/devices/system/cpu/cpu5/cpuidle/state1/below
5
/sys/devices/system/cpu/cpu5/cpuidle/state1/name
cpu-sleep-1-0
/sys/devices/system/cpu/cpu5/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu5/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu5/cpuidle/state2/above
12
/sys/devices/system/cpu/cpu5/cpuidle/state2/time
616088023
/sys/devices/system/cpu/cpu5/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu5/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu5/cpuidle/state2/latency
625
/sys/devices/system/cpu/cpu5/cpuidle/state2/usage
248
/sys/devices/system/cpu/cpu5/cpuidle/state2/desc
big-power-collapse
/sys/devices/system/cpu/cpu5/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu5/cpuidle/state2/name
cpu-sleep-1-1
/sys/devices/system/cpu/cpu5/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu5/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu5/cpuidle/state0/time
30023
/sys/devices/system/cpu/cpu5/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu5/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu5/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu5/cpuidle/state0/usage
16
/sys/devices/system/cpu/cpu5/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu5/cpuidle/state0/below
10
/sys/devices/system/cpu/cpu5/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu5/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@101
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu5/power/runtime_active_time
0
/sys/devices/system/cpu/cpu5/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu5/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu5/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu5/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu5/power/control
auto
/sys/devices/system/cpu/cpu5/topology/physical_package_id
1
/sys/devices/system/cpu/cpu5/topology/core_siblings
f0
/sys/devices/system/cpu/cpu5/topology/core_siblings_list
4-7
/sys/devices/system/cpu/cpu5/topology/thread_siblings_list
5
/sys/devices/system/cpu/cpu5/topology/core_id
1
/sys/devices/system/cpu/cpu5/topology/thread_siblings
20
/sys/devices/system/cpu/cpu5/cpu_capacity
1024
/sys/devices/system/cpu/cpu5/cache/uevent
/sys/devices/system/cpu/cpu5/cache/index2/uevent
/sys/devices/system/cpu/cpu5/cache/index2/shared_cpu_list
4-7
/sys/devices/system/cpu/cpu5/cache/index2/type
Unified
/sys/devices/system/cpu/cpu5/cache/index2/level
2
/sys/devices/system/cpu/cpu5/cache/index2/shared_cpu_map
f0
/sys/devices/system/cpu/cpu5/cache/index0/uevent
/sys/devices/system/cpu/cpu5/cache/index0/shared_cpu_list
5
/sys/devices/system/cpu/cpu5/cache/index0/type
Data
/sys/devices/system/cpu/cpu5/cache/index0/level
1
/sys/devices/system/cpu/cpu5/cache/index0/shared_cpu_map
20
/sys/devices/system/cpu/cpu5/cache/index1/uevent
/sys/devices/system/cpu/cpu5/cache/index1/shared_cpu_list
5
/sys/devices/system/cpu/cpu5/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu5/cache/index1/level
1
/sys/devices/system/cpu/cpu5/cache/index1/shared_cpu_map
20
/sys/devices/system/cpu/cpu5/regs/identification/revidr_el1
0x0000000000000001
/sys/devices/system/cpu/cpu5/regs/identification/midr_el1
0x0000000051af8001
/sys/devices/system/cpu/possible
0-7
/sys/devices/system/cpu/offline

/sys/devices/system/cpu/present
0-7
/sys/devices/system/cpu/power/runtime_active_time
0
/sys/devices/system/cpu/power/runtime_status
unsupported
/sys/devices/system/cpu/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/power/runtime_suspended_time
0
/sys/devices/system/cpu/power/control
auto
/sys/devices/system/cpu/cpu3/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu3/cpuidle/state1/above
0
/sys/devices/system/cpu/cpu3/cpuidle/state1/time
7453
/sys/devices/system/cpu/cpu3/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu3/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu3/cpuidle/state1/latency
129
/sys/devices/system/cpu/cpu3/cpuidle/state1/usage
10
/sys/devices/system/cpu/cpu3/cpuidle/state1/desc
little-retention
/sys/devices/system/cpu/cpu3/cpuidle/state1/below
2
/sys/devices/system/cpu/cpu3/cpuidle/state1/name
cpu-sleep-0-0
/sys/devices/system/cpu/cpu3/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu3/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu3/cpuidle/state2/above
8
/sys/devices/system/cpu/cpu3/cpuidle/state2/time
616684999
/sys/devices/system/cpu/cpu3/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu3/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu3/cpuidle/state2/latency
712
/sys/devices/system/cpu/cpu3/cpuidle/state2/usage
298
/sys/devices/system/cpu/cpu3/cpuidle/state2/desc
little-power-collapse
/sys/devices/system/cpu/cpu3/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu3/cpuidle/state2/name
cpu-sleep-0-1
/sys/devices/system/cpu/cpu3/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu3/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu3/cpuidle/state0/time
29256
/sys/devices/system/cpu/cpu3/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu3/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu3/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu3/cpuidle/state0/usage
11
/sys/devices/system/cpu/cpu3/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu3/cpuidle/state0/below
8
/sys/devices/system/cpu/cpu3/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu3/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@3
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu3/power/runtime_active_time
0
/sys/devices/system/cpu/cpu3/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu3/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu3/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu3/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu3/power/control
auto
/sys/devices/system/cpu/cpu3/topology/physical_package_id
0
/sys/devices/system/cpu/cpu3/topology/core_siblings
0f
/sys/devices/system/cpu/cpu3/topology/core_siblings_list
0-3
/sys/devices/system/cpu/cpu3/topology/thread_siblings_list
3
/sys/devices/system/cpu/cpu3/topology/core_id
3
/sys/devices/system/cpu/cpu3/topology/thread_siblings
08
/sys/devices/system/cpu/cpu3/cpu_capacity
1024
/sys/devices/system/cpu/cpu3/cache/uevent
/sys/devices/system/cpu/cpu3/cache/index2/uevent
/sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_list
0-3
/sys/devices/system/cpu/cpu3/cache/index2/type
Unified
/sys/devices/system/cpu/cpu3/cache/index2/level
2
/sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map
0f
/sys/devices/system/cpu/cpu3/cache/index0/uevent
/sys/devices/system/cpu/cpu3/cache/index0/shared_cpu_list
3
/sys/devices/system/cpu/cpu3/cache/index0/type
Data
/sys/devices/system/cpu/cpu3/cache/index0/level
1
/sys/devices/system/cpu/cpu3/cache/index0/shared_cpu_map
08
/sys/devices/system/cpu/cpu3/cache/index1/uevent
/sys/devices/system/cpu/cpu3/cache/index1/shared_cpu_list
3
/sys/devices/system/cpu/cpu3/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu3/cache/index1/level
1
/sys/devices/system/cpu/cpu3/cache/index1/shared_cpu_map
08
/sys/devices/system/cpu/cpu3/regs/identification/revidr_el1
0x0000000000000180
/sys/devices/system/cpu/cpu3/regs/identification/midr_el1
0x0000000051af8014
/sys/devices/system/cpu/online
0-7
/sys/devices/system/cpu/cpu1/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu1/cpuidle/state1/above
3
/sys/devices/system/cpu/cpu1/cpuidle/state1/time
8494
/sys/devices/system/cpu/cpu1/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu1/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu1/cpuidle/state1/latency
129
/sys/devices/system/cpu/cpu1/cpuidle/state1/usage
15
/sys/devices/system/cpu/cpu1/cpuidle/state1/desc
little-retention
/sys/devices/system/cpu/cpu1/cpuidle/state1/below
0
/sys/devices/system/cpu/cpu1/cpuidle/state1/name
cpu-sleep-0-0
/sys/devices/system/cpu/cpu1/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu1/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu1/cpuidle/state2/above
6
/sys/devices/system/cpu/cpu1/cpuidle/state2/time
617122679
/sys/devices/system/cpu/cpu1/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu1/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu1/cpuidle/state2/latency
712
/sys/devices/system/cpu/cpu1/cpuidle/state2/usage
394
/sys/devices/system/cpu/cpu1/cpuidle/state2/desc
little-power-collapse
/sys/devices/system/cpu/cpu1/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu1/cpuidle/state2/name
cpu-sleep-0-1
/sys/devices/system/cpu/cpu1/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu1/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu1/cpuidle/state0/time
4704
/sys/devices/system/cpu/cpu1/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu1/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu1/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu1/cpuidle/state0/usage
8
/sys/devices/system/cpu/cpu1/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu1/cpuidle/state0/below
4
/sys/devices/system/cpu/cpu1/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu1/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@1
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu1/power/runtime_active_time
0
/sys/devices/system/cpu/cpu1/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu1/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu1/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu1/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu1/power/control
auto
/sys/devices/system/cpu/cpu1/topology/physical_package_id
0
/sys/devices/system/cpu/cpu1/topology/core_siblings
0f
/sys/devices/system/cpu/cpu1/topology/core_siblings_list
0-3
/sys/devices/system/cpu/cpu1/topology/thread_siblings_list
1
/sys/devices/system/cpu/cpu1/topology/core_id
1
/sys/devices/system/cpu/cpu1/topology/thread_siblings
02
/sys/devices/system/cpu/cpu1/cpu_capacity
1024
/sys/devices/system/cpu/cpu1/cache/uevent
/sys/devices/system/cpu/cpu1/cache/index2/uevent
/sys/devices/system/cpu/cpu1/cache/index2/shared_cpu_list
0-3
/sys/devices/system/cpu/cpu1/cache/index2/type
Unified
/sys/devices/system/cpu/cpu1/cache/index2/level
2
/sys/devices/system/cpu/cpu1/cache/index2/shared_cpu_map
0f
/sys/devices/system/cpu/cpu1/cache/index0/uevent
/sys/devices/system/cpu/cpu1/cache/index0/shared_cpu_list
1
/sys/devices/system/cpu/cpu1/cache/index0/type
Data
/sys/devices/system/cpu/cpu1/cache/index0/level
1
/sys/devices/system/cpu/cpu1/cache/index0/shared_cpu_map
02
/sys/devices/system/cpu/cpu1/cache/index1/uevent
/sys/devices/system/cpu/cpu1/cache/index1/shared_cpu_list
1
/sys/devices/system/cpu/cpu1/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu1/cache/index1/level
1
/sys/devices/system/cpu/cpu1/cache/index1/shared_cpu_map
02
/sys/devices/system/cpu/cpu1/regs/identification/revidr_el1
0x0000000000000180
/sys/devices/system/cpu/cpu1/regs/identification/midr_el1
0x0000000051af8014
/sys/devices/system/cpu/vulnerabilities/spectre_v2
Vulnerable
/sys/devices/system/cpu/vulnerabilities/mds
Not affected
/sys/devices/system/cpu/vulnerabilities/l1tf
Not affected
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
Vulnerable
/sys/devices/system/cpu/vulnerabilities/spectre_v1
Mitigation: __user pointer sanitization
/sys/devices/system/cpu/vulnerabilities/meltdown
Mitigation: PTI
/sys/devices/system/cpu/cpu6/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu6/cpuidle/state1/above
0
/sys/devices/system/cpu/cpu6/cpuidle/state1/time
7186
/sys/devices/system/cpu/cpu6/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu6/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu6/cpuidle/state1/latency
123
/sys/devices/system/cpu/cpu6/cpuidle/state1/usage
9
/sys/devices/system/cpu/cpu6/cpuidle/state1/desc
big-retention
/sys/devices/system/cpu/cpu6/cpuidle/state1/below
2
/sys/devices/system/cpu/cpu6/cpuidle/state1/name
cpu-sleep-1-0
/sys/devices/system/cpu/cpu6/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu6/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu6/cpuidle/state2/above
4
/sys/devices/system/cpu/cpu6/cpuidle/state2/time
617440536
/sys/devices/system/cpu/cpu6/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu6/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu6/cpuidle/state2/latency
625
/sys/devices/system/cpu/cpu6/cpuidle/state2/usage
385
/sys/devices/system/cpu/cpu6/cpuidle/state2/desc
big-power-collapse
/sys/devices/system/cpu/cpu6/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu6/cpuidle/state2/name
cpu-sleep-1-1
/sys/devices/system/cpu/cpu6/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu6/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu6/cpuidle/state0/time
28990
/sys/devices/system/cpu/cpu6/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu6/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu6/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu6/cpuidle/state0/usage
10
/sys/devices/system/cpu/cpu6/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu6/cpuidle/state0/below
8
/sys/devices/system/cpu/cpu6/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu6/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@102
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu6/power/runtime_active_time
0
/sys/devices/system/cpu/cpu6/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu6/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu6/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu6/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu6/power/control
auto
/sys/devices/system/cpu/cpu6/topology/physical_package_id
1
/sys/devices/system/cpu/cpu6/topology/core_siblings
f0
/sys/devices/system/cpu/cpu6/topology/core_siblings_list
4-7
/sys/devices/system/cpu/cpu6/topology/thread_siblings_list
6
/sys/devices/system/cpu/cpu6/topology/core_id
2
/sys/devices/system/cpu/cpu6/topology/thread_siblings
40
/sys/devices/system/cpu/cpu6/cpu_capacity
1024
/sys/devices/system/cpu/cpu6/cache/uevent
/sys/devices/system/cpu/cpu6/cache/index2/uevent
/sys/devices/system/cpu/cpu6/cache/index2/shared_cpu_list
4-7
/sys/devices/system/cpu/cpu6/cache/index2/type
Unified
/sys/devices/system/cpu/cpu6/cache/index2/level
2
/sys/devices/system/cpu/cpu6/cache/index2/shared_cpu_map
f0
/sys/devices/system/cpu/cpu6/cache/index0/uevent
/sys/devices/system/cpu/cpu6/cache/index0/shared_cpu_list
6
/sys/devices/system/cpu/cpu6/cache/index0/type
Data
/sys/devices/system/cpu/cpu6/cache/index0/level
1
/sys/devices/system/cpu/cpu6/cache/index0/shared_cpu_map
40
/sys/devices/system/cpu/cpu6/cache/index1/uevent
/sys/devices/system/cpu/cpu6/cache/index1/shared_cpu_list
6
/sys/devices/system/cpu/cpu6/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu6/cache/index1/level
1
/sys/devices/system/cpu/cpu6/cache/index1/shared_cpu_map
40
/sys/devices/system/cpu/cpu6/regs/identification/revidr_el1
0x0000000000000001
/sys/devices/system/cpu/cpu6/regs/identification/midr_el1
0x0000000051af8001
/sys/devices/system/cpu/cpu4/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu4/cpuidle/state1/above
4
/sys/devices/system/cpu/cpu4/cpuidle/state1/time
48576
/sys/devices/system/cpu/cpu4/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu4/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu4/cpuidle/state1/latency
123
/sys/devices/system/cpu/cpu4/cpuidle/state1/usage
58
/sys/devices/system/cpu/cpu4/cpuidle/state1/desc
big-retention
/sys/devices/system/cpu/cpu4/cpuidle/state1/below
15
/sys/devices/system/cpu/cpu4/cpuidle/state1/name
cpu-sleep-1-0
/sys/devices/system/cpu/cpu4/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu4/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu4/cpuidle/state2/above
19
/sys/devices/system/cpu/cpu4/cpuidle/state2/time
617566283
/sys/devices/system/cpu/cpu4/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu4/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu4/cpuidle/state2/latency
625
/sys/devices/system/cpu/cpu4/cpuidle/state2/usage
515
/sys/devices/system/cpu/cpu4/cpuidle/state2/desc
big-power-collapse
/sys/devices/system/cpu/cpu4/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu4/cpuidle/state2/name
cpu-sleep-1-1
/sys/devices/system/cpu/cpu4/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu4/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu4/cpuidle/state0/time
33524
/sys/devices/system/cpu/cpu4/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu4/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu4/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu4/cpuidle/state0/usage
19
/sys/devices/system/cpu/cpu4/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu4/cpuidle/state0/below
9
/sys/devices/system/cpu/cpu4/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu4/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@100
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu4/power/runtime_active_time
0
/sys/devices/system/cpu/cpu4/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu4/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu4/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu4/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu4/power/control
auto
/sys/devices/system/cpu/cpu4/topology/physical_package_id
1
/sys/devices/system/cpu/cpu4/topology/core_siblings
f0
/sys/devices/system/cpu/cpu4/topology/core_siblings_list
4-7
/sys/devices/system/cpu/cpu4/topology/thread_siblings_list
4
/sys/devices/system/cpu/cpu4/topology/core_id
0
/sys/devices/system/cpu/cpu4/topology/thread_siblings
10
/sys/devices/system/cpu/cpu4/cpu_capacity
1024
/sys/devices/system/cpu/cpu4/cache/uevent
/sys/devices/system/cpu/cpu4/cache/index2/uevent
/sys/devices/system/cpu/cpu4/cache/index2/shared_cpu_list
4-7
/sys/devices/system/cpu/cpu4/cache/index2/type
Unified
/sys/devices/system/cpu/cpu4/cache/index2/level
2
/sys/devices/system/cpu/cpu4/cache/index2/shared_cpu_map
f0
/sys/devices/system/cpu/cpu4/cache/index0/uevent
/sys/devices/system/cpu/cpu4/cache/index0/shared_cpu_list
4
/sys/devices/system/cpu/cpu4/cache/index0/type
Data
/sys/devices/system/cpu/cpu4/cache/index0/level
1
/sys/devices/system/cpu/cpu4/cache/index0/shared_cpu_map
10
/sys/devices/system/cpu/cpu4/cache/index1/uevent
/sys/devices/system/cpu/cpu4/cache/index1/shared_cpu_list
4
/sys/devices/system/cpu/cpu4/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu4/cache/index1/level
1
/sys/devices/system/cpu/cpu4/cache/index1/shared_cpu_map
10
/sys/devices/system/cpu/cpu4/regs/identification/revidr_el1
0x0000000000000001
/sys/devices/system/cpu/cpu4/regs/identification/midr_el1
0x0000000051af8001
/sys/devices/system/cpu/isolated

/sys/devices/system/cpu/kernel_max
255
/sys/devices/system/cpu/cpu2/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu2/cpuidle/state1/above
27
/sys/devices/system/cpu/cpu2/cpuidle/state1/time
80485
/sys/devices/system/cpu/cpu2/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu2/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu2/cpuidle/state1/latency
129
/sys/devices/system/cpu/cpu2/cpuidle/state1/usage
142
/sys/devices/system/cpu/cpu2/cpuidle/state1/desc
little-retention
/sys/devices/system/cpu/cpu2/cpuidle/state1/below
6
/sys/devices/system/cpu/cpu2/cpuidle/state1/name
cpu-sleep-0-0
/sys/devices/system/cpu/cpu2/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu2/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu2/cpuidle/state2/above
14
/sys/devices/system/cpu/cpu2/cpuidle/state2/time
617916929
/sys/devices/system/cpu/cpu2/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu2/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu2/cpuidle/state2/latency
712
/sys/devices/system/cpu/cpu2/cpuidle/state2/usage
614
/sys/devices/system/cpu/cpu2/cpuidle/state2/desc
little-power-collapse
/sys/devices/system/cpu/cpu2/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu2/cpuidle/state2/name
cpu-sleep-0-1
/sys/devices/system/cpu/cpu2/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu2/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu2/cpuidle/state0/time
36601
/sys/devices/system/cpu/cpu2/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu2/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu2/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu2/cpuidle/state0/usage
49
/sys/devices/system/cpu/cpu2/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu2/cpuidle/state0/below
20
/sys/devices/system/cpu/cpu2/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu2/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@2
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu2/power/runtime_active_time
0
/sys/devices/system/cpu/cpu2/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu2/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu2/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu2/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu2/power/control
auto
/sys/devices/system/cpu/cpu2/topology/physical_package_id
0
/sys/devices/system/cpu/cpu2/topology/core_siblings
0f
/sys/devices/system/cpu/cpu2/topology/core_siblings_list
0-3
/sys/devices/system/cpu/cpu2/topology/thread_siblings_list
2
/sys/devices/system/cpu/cpu2/topology/core_id
2
/sys/devices/system/cpu/cpu2/topology/thread_siblings
04
/sys/devices/system/cpu/cpu2/cpu_capacity
1024
/sys/devices/system/cpu/cpu2/cache/uevent
/sys/devices/system/cpu/cpu2/cache/index2/uevent
/sys/devices/system/cpu/cpu2/cache/index2/shared_cpu_list
0-3
/sys/devices/system/cpu/cpu2/cache/index2/type
Unified
/sys/devices/system/cpu/cpu2/cache/index2/level
2
/sys/devices/system/cpu/cpu2/cache/index2/shared_cpu_map
0f
/sys/devices/system/cpu/cpu2/cache/index0/uevent
/sys/devices/system/cpu/cpu2/cache/index0/shared_cpu_list
2
/sys/devices/system/cpu/cpu2/cache/index0/type
Data
/sys/devices/system/cpu/cpu2/cache/index0/level
1
/sys/devices/system/cpu/cpu2/cache/index0/shared_cpu_map
04
/sys/devices/system/cpu/cpu2/cache/index1/uevent
/sys/devices/system/cpu/cpu2/cache/index1/shared_cpu_list
2
/sys/devices/system/cpu/cpu2/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu2/cache/index1/level
1
/sys/devices/system/cpu/cpu2/cache/index1/shared_cpu_map
04
/sys/devices/system/cpu/cpu2/regs/identification/revidr_el1
0x0000000000000180
/sys/devices/system/cpu/cpu2/regs/identification/midr_el1
0x0000000051af8014
/sys/devices/system/cpu/cpu0/cpuidle/state1/disable
0
/sys/devices/system/cpu/cpu0/cpuidle/state1/above
42
/sys/devices/system/cpu/cpu0/cpuidle/state1/time
363386
/sys/devices/system/cpu/cpu0/cpuidle/state1/power
0
/sys/devices/system/cpu/cpu0/cpuidle/state1/residency
200
/sys/devices/system/cpu/cpu0/cpuidle/state1/latency
129
/sys/devices/system/cpu/cpu0/cpuidle/state1/usage
416
/sys/devices/system/cpu/cpu0/cpuidle/state1/desc
little-retention
/sys/devices/system/cpu/cpu0/cpuidle/state1/below
117
/sys/devices/system/cpu/cpu0/cpuidle/state1/name
cpu-sleep-0-0
/sys/devices/system/cpu/cpu0/cpuidle/driver/name
arm_idle
/sys/devices/system/cpu/cpu0/cpuidle/state2/disable
0
/sys/devices/system/cpu/cpu0/cpuidle/state2/above
189
/sys/devices/system/cpu/cpu0/cpuidle/state2/time
616567065
/sys/devices/system/cpu/cpu0/cpuidle/state2/power
0
/sys/devices/system/cpu/cpu0/cpuidle/state2/residency
1000
/sys/devices/system/cpu/cpu0/cpuidle/state2/latency
712
/sys/devices/system/cpu/cpu0/cpuidle/state2/usage
1661
/sys/devices/system/cpu/cpu0/cpuidle/state2/desc
little-power-collapse
/sys/devices/system/cpu/cpu0/cpuidle/state2/below
0
/sys/devices/system/cpu/cpu0/cpuidle/state2/name
cpu-sleep-0-1
/sys/devices/system/cpu/cpu0/cpuidle/state0/disable
0
/sys/devices/system/cpu/cpu0/cpuidle/state0/above
0
/sys/devices/system/cpu/cpu0/cpuidle/state0/time
7123
/sys/devices/system/cpu/cpu0/cpuidle/state0/power
4294967295
/sys/devices/system/cpu/cpu0/cpuidle/state0/residency
1
/sys/devices/system/cpu/cpu0/cpuidle/state0/latency
1
/sys/devices/system/cpu/cpu0/cpuidle/state0/usage
53
/sys/devices/system/cpu/cpu0/cpuidle/state0/desc
ARM WFI
/sys/devices/system/cpu/cpu0/cpuidle/state0/below
14
/sys/devices/system/cpu/cpu0/cpuidle/state0/name
WFI
/sys/devices/system/cpu/cpu0/uevent
OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@0
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,armv8
OF_COMPATIBLE_N=1
MODALIAS=cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B

/sys/devices/system/cpu/cpu0/power/runtime_active_time
0
/sys/devices/system/cpu/cpu0/power/pm_qos_resume_latency_us
0
/sys/devices/system/cpu/cpu0/power/runtime_status
unsupported
/sys/devices/system/cpu/cpu0/power/autosuspend_delay_ms
cat: read error: Input/output error
/sys/devices/system/cpu/cpu0/power/runtime_suspended_time
0
/sys/devices/system/cpu/cpu0/power/control
auto
/sys/devices/system/cpu/cpu0/topology/physical_package_id
0
/sys/devices/system/cpu/cpu0/topology/core_siblings
0f
/sys/devices/system/cpu/cpu0/topology/core_siblings_list
0-3
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0
/sys/devices/system/cpu/cpu0/topology/core_id
0
/sys/devices/system/cpu/cpu0/topology/thread_siblings
01
/sys/devices/system/cpu/cpu0/cpu_capacity
1024
/sys/devices/system/cpu/cpu0/cache/uevent
/sys/devices/system/cpu/cpu0/cache/index2/uevent
/sys/devices/system/cpu/cpu0/cache/index2/shared_cpu_list
0-3
/sys/devices/system/cpu/cpu0/cache/index2/type
Unified
/sys/devices/system/cpu/cpu0/cache/index2/level
2
/sys/devices/system/cpu/cpu0/cache/index2/shared_cpu_map
0f
/sys/devices/system/cpu/cpu0/cache/index0/uevent
/sys/devices/system/cpu/cpu0/cache/index0/shared_cpu_list
0
/sys/devices/system/cpu/cpu0/cache/index0/type
Data
/sys/devices/system/cpu/cpu0/cache/index0/level
1
/sys/devices/system/cpu/cpu0/cache/index0/shared_cpu_map
01
/sys/devices/system/cpu/cpu0/cache/index1/uevent
/sys/devices/system/cpu/cpu0/cache/index1/shared_cpu_list
0
/sys/devices/system/cpu/cpu0/cache/index1/type
Instruction
/sys/devices/system/cpu/cpu0/cache/index1/level
1
/sys/devices/system/cpu/cpu0/cache/index1/shared_cpu_map
01
/sys/devices/system/cpu/cpu0/regs/identification/revidr_el1
0x0000000000000180
/sys/devices/system/cpu/cpu0/regs/identification/midr_el1
0x0000000051af8014
/sys/devices/system/cpu/modalias
cpu:type:aarch64:feature:,0000,0001,0002,0003,0004,0005,0006,0007,000B
Marc Gonzalez May 22, 2019, 3:39 p.m. UTC | #6
On 22/05/2019 11:35, Marc Zyngier wrote:

> On 22/05/2019 10:17, Marc Gonzalez wrote:
> 
>> The following dmesg log caught my eye, and might be relevant:
>>
>> 	ARM_SMCCC_ARCH_WORKAROUND_1 missing from firmware
>>
>> Is that bad, doctor? I don't think it would explain the crash though...
> 
> It doesn't explain it.
> 
> It is bad though: your vendor doesn't tell the kernel about the HW being
> free of Spectre-v2, and doesn't provide a mitigation either. Hopefully,
> this is a responsible vendor that will provide you with a firmware
> update that fixes it.

# cd /sys/devices/system/cpu/vulnerabilities/
# grep "" *
l1tf:Not affected
mds:Not affected
meltdown:Mitigation: PTI
spec_store_bypass:Vulnerable
spectre_v1:Mitigation: __user pointer sanitization
spectre_v2:Vulnerable

OK, so there are apparently two unmitigated vulns, spec_store_bypass
and spectre_v2.

These vulns need to be mitigated in FW because otherwise some secure
property of the secure OS could be violated? Or because disabling the
faulty optimization requires secure privileges?


Some documentation, for my own reference:

https://elixir.bootlin.com/linux/latest/source/Documentation/ABI/testing/sysfs-devices-system-cpu
https://developer.arm.com/support/arm-security-updates/speculative-processor-vulnerability

Regards.
Jeffrey Hugo Sept. 30, 2019, 10:20 p.m. UTC | #7
Amit, the merged version of the below change causes a boot failure
(nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
enough, it seems to be resolved if I remove the cpu-idle-states
property from one of the cpu nodes.

I see no issues with the msm8998 MTP.

Do you have any suggestions on how we might debug this?

On Tue, May 21, 2019 at 3:38 AM Amit Kucheria <amit.kucheria@linaro.org> wrote:
>
> Add device bindings for cpuidle states for cpu devices.
>
> Cc: Marc Gonzalez <marc.w.gonzalez@free.fr>
> Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  arch/arm64/boot/dts/qcom/msm8998.dtsi | 50 +++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> index 3fd0769fe648..54810980fcf9 100644
> --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> @@ -78,6 +78,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x0>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
>                         efficiency = <1024>;
>                         next-level-cache = <&L2_0>;
>                         L2_0: l2-cache {
> @@ -97,6 +98,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x1>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
>                         efficiency = <1024>;
>                         next-level-cache = <&L2_0>;
>                         L1_I_1: l1-icache {
> @@ -112,6 +114,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x2>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
>                         efficiency = <1024>;
>                         next-level-cache = <&L2_0>;
>                         L1_I_2: l1-icache {
> @@ -127,6 +130,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x3>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
>                         efficiency = <1024>;
>                         next-level-cache = <&L2_0>;
>                         L1_I_3: l1-icache {
> @@ -142,6 +146,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x100>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
>                         efficiency = <1536>;
>                         next-level-cache = <&L2_1>;
>                         L2_1: l2-cache {
> @@ -161,6 +166,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x101>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
>                         efficiency = <1536>;
>                         next-level-cache = <&L2_1>;
>                         L1_I_101: l1-icache {
> @@ -176,6 +182,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x102>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
>                         efficiency = <1536>;
>                         next-level-cache = <&L2_1>;
>                         L1_I_102: l1-icache {
> @@ -191,6 +198,7 @@
>                         compatible = "arm,armv8";
>                         reg = <0x0 0x103>;
>                         enable-method = "psci";
> +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
>                         efficiency = <1536>;
>                         next-level-cache = <&L2_1>;
>                         L1_I_103: l1-icache {
> @@ -238,6 +246,48 @@
>                                 };
>                         };
>                 };
> +
> +               idle-states {
> +                       entry-method = "psci";
> +
> +                       LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
> +                               compatible = "arm,idle-state";
> +                               idle-state-name = "little-retention";
> +                               arm,psci-suspend-param = <0x00000002>;
> +                               entry-latency-us = <43>;
> +                               exit-latency-us = <86>;
> +                               min-residency-us = <200>;
> +                       };
> +
> +                       LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 {
> +                               compatible = "arm,idle-state";
> +                               idle-state-name = "little-power-collapse";
> +                               arm,psci-suspend-param = <0x00000003>;
> +                               entry-latency-us = <100>;
> +                               exit-latency-us = <612>;
> +                               min-residency-us = <1000>;
> +                               local-timer-stop;
> +                       };
> +
> +                       BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
> +                               compatible = "arm,idle-state";
> +                               idle-state-name = "big-retention";
> +                               arm,psci-suspend-param = <0x00000002>;
> +                               entry-latency-us = <41>;
> +                               exit-latency-us = <82>;
> +                               min-residency-us = <200>;
> +                       };
> +
> +                       BIG_CPU_SLEEP_1: cpu-sleep-1-1 {
> +                               compatible = "arm,idle-state";
> +                               idle-state-name = "big-power-collapse";
> +                               arm,psci-suspend-param = <0x00000003>;
> +                               entry-latency-us = <100>;
> +                               exit-latency-us = <525>;
> +                               min-residency-us = <1000>;
> +                               local-timer-stop;
> +                       };
> +               };
>         };
>
>         firmware {
> --
> 2.17.1
>
Amit Kucheria Sept. 30, 2019, 10:44 p.m. UTC | #8
Can you try removing just the *SLEEP_1 states from the cpu-idle-states
property? I want to understand if this is triggered just by the deeper
C-state.

On Tue, Oct 1, 2019 at 3:50 AM Jeffrey Hugo <jeffrey.l.hugo@gmail.com> wrote:
>
> Amit, the merged version of the below change causes a boot failure
> (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> enough, it seems to be resolved if I remove the cpu-idle-states
> property from one of the cpu nodes.
>
> I see no issues with the msm8998 MTP.
>
> Do you have any suggestions on how we might debug this?
>
> On Tue, May 21, 2019 at 3:38 AM Amit Kucheria <amit.kucheria@linaro.org> wrote:
> >
> > Add device bindings for cpuidle states for cpu devices.
> >
> > Cc: Marc Gonzalez <marc.w.gonzalez@free.fr>
> > Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
> > Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> > ---
> >  arch/arm64/boot/dts/qcom/msm8998.dtsi | 50 +++++++++++++++++++++++++++
> >  1 file changed, 50 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > index 3fd0769fe648..54810980fcf9 100644
> > --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > @@ -78,6 +78,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x0>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> >                         efficiency = <1024>;
> >                         next-level-cache = <&L2_0>;
> >                         L2_0: l2-cache {
> > @@ -97,6 +98,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x1>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> >                         efficiency = <1024>;
> >                         next-level-cache = <&L2_0>;
> >                         L1_I_1: l1-icache {
> > @@ -112,6 +114,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x2>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> >                         efficiency = <1024>;
> >                         next-level-cache = <&L2_0>;
> >                         L1_I_2: l1-icache {
> > @@ -127,6 +130,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x3>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> >                         efficiency = <1024>;
> >                         next-level-cache = <&L2_0>;
> >                         L1_I_3: l1-icache {
> > @@ -142,6 +146,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x100>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> >                         efficiency = <1536>;
> >                         next-level-cache = <&L2_1>;
> >                         L2_1: l2-cache {
> > @@ -161,6 +166,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x101>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> >                         efficiency = <1536>;
> >                         next-level-cache = <&L2_1>;
> >                         L1_I_101: l1-icache {
> > @@ -176,6 +182,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x102>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> >                         efficiency = <1536>;
> >                         next-level-cache = <&L2_1>;
> >                         L1_I_102: l1-icache {
> > @@ -191,6 +198,7 @@
> >                         compatible = "arm,armv8";
> >                         reg = <0x0 0x103>;
> >                         enable-method = "psci";
> > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> >                         efficiency = <1536>;
> >                         next-level-cache = <&L2_1>;
> >                         L1_I_103: l1-icache {
> > @@ -238,6 +246,48 @@
> >                                 };
> >                         };
> >                 };
> > +
> > +               idle-states {
> > +                       entry-method = "psci";
> > +
> > +                       LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
> > +                               compatible = "arm,idle-state";
> > +                               idle-state-name = "little-retention";
> > +                               arm,psci-suspend-param = <0x00000002>;
> > +                               entry-latency-us = <43>;
> > +                               exit-latency-us = <86>;
> > +                               min-residency-us = <200>;
> > +                       };
> > +
> > +                       LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 {
> > +                               compatible = "arm,idle-state";
> > +                               idle-state-name = "little-power-collapse";
> > +                               arm,psci-suspend-param = <0x00000003>;
> > +                               entry-latency-us = <100>;
> > +                               exit-latency-us = <612>;
> > +                               min-residency-us = <1000>;
> > +                               local-timer-stop;
> > +                       };
> > +
> > +                       BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
> > +                               compatible = "arm,idle-state";
> > +                               idle-state-name = "big-retention";
> > +                               arm,psci-suspend-param = <0x00000002>;
> > +                               entry-latency-us = <41>;
> > +                               exit-latency-us = <82>;
> > +                               min-residency-us = <200>;
> > +                       };
> > +
> > +                       BIG_CPU_SLEEP_1: cpu-sleep-1-1 {
> > +                               compatible = "arm,idle-state";
> > +                               idle-state-name = "big-power-collapse";
> > +                               arm,psci-suspend-param = <0x00000003>;
> > +                               entry-latency-us = <100>;
> > +                               exit-latency-us = <525>;
> > +                               min-residency-us = <1000>;
> > +                               local-timer-stop;
> > +                       };
> > +               };
> >         };
> >
> >         firmware {
> > --
> > 2.17.1
> >
Jeffrey Hugo Oct. 1, 2019, 2:21 p.m. UTC | #9
On Mon, Sep 30, 2019 at 4:44 PM Amit Kucheria <amit.kucheria@linaro.org> wrote:
>
> Can you try removing just the *SLEEP_1 states from the cpu-idle-states
> property? I want to understand if this is triggered just by the deeper
> C-state.

Still seeing the issue with just the SLEEP_0 states.  For reference,
Bjorn suggested adding kpti=no to the command line, which also
appeared to have no effect on the issue.

>
> On Tue, Oct 1, 2019 at 3:50 AM Jeffrey Hugo <jeffrey.l.hugo@gmail.com> wrote:
> >
> > Amit, the merged version of the below change causes a boot failure
> > (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> > enough, it seems to be resolved if I remove the cpu-idle-states
> > property from one of the cpu nodes.
> >
> > I see no issues with the msm8998 MTP.
> >
> > Do you have any suggestions on how we might debug this?
> >
> > On Tue, May 21, 2019 at 3:38 AM Amit Kucheria <amit.kucheria@linaro.org> wrote:
> > >
> > > Add device bindings for cpuidle states for cpu devices.
> > >
> > > Cc: Marc Gonzalez <marc.w.gonzalez@free.fr>
> > > Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>
> > > Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> > > ---
> > >  arch/arm64/boot/dts/qcom/msm8998.dtsi | 50 +++++++++++++++++++++++++++
> > >  1 file changed, 50 insertions(+)
> > >
> > > diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > > index 3fd0769fe648..54810980fcf9 100644
> > > --- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > > +++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
> > > @@ -78,6 +78,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x0>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> > >                         efficiency = <1024>;
> > >                         next-level-cache = <&L2_0>;
> > >                         L2_0: l2-cache {
> > > @@ -97,6 +98,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x1>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> > >                         efficiency = <1024>;
> > >                         next-level-cache = <&L2_0>;
> > >                         L1_I_1: l1-icache {
> > > @@ -112,6 +114,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x2>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> > >                         efficiency = <1024>;
> > >                         next-level-cache = <&L2_0>;
> > >                         L1_I_2: l1-icache {
> > > @@ -127,6 +130,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x3>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
> > >                         efficiency = <1024>;
> > >                         next-level-cache = <&L2_0>;
> > >                         L1_I_3: l1-icache {
> > > @@ -142,6 +146,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x100>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> > >                         efficiency = <1536>;
> > >                         next-level-cache = <&L2_1>;
> > >                         L2_1: l2-cache {
> > > @@ -161,6 +166,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x101>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> > >                         efficiency = <1536>;
> > >                         next-level-cache = <&L2_1>;
> > >                         L1_I_101: l1-icache {
> > > @@ -176,6 +182,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x102>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> > >                         efficiency = <1536>;
> > >                         next-level-cache = <&L2_1>;
> > >                         L1_I_102: l1-icache {
> > > @@ -191,6 +198,7 @@
> > >                         compatible = "arm,armv8";
> > >                         reg = <0x0 0x103>;
> > >                         enable-method = "psci";
> > > +                       cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
> > >                         efficiency = <1536>;
> > >                         next-level-cache = <&L2_1>;
> > >                         L1_I_103: l1-icache {
> > > @@ -238,6 +246,48 @@
> > >                                 };
> > >                         };
> > >                 };
> > > +
> > > +               idle-states {
> > > +                       entry-method = "psci";
> > > +
> > > +                       LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
> > > +                               compatible = "arm,idle-state";
> > > +                               idle-state-name = "little-retention";
> > > +                               arm,psci-suspend-param = <0x00000002>;
> > > +                               entry-latency-us = <43>;
> > > +                               exit-latency-us = <86>;
> > > +                               min-residency-us = <200>;
> > > +                       };
> > > +
> > > +                       LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 {
> > > +                               compatible = "arm,idle-state";
> > > +                               idle-state-name = "little-power-collapse";
> > > +                               arm,psci-suspend-param = <0x00000003>;
> > > +                               entry-latency-us = <100>;
> > > +                               exit-latency-us = <612>;
> > > +                               min-residency-us = <1000>;
> > > +                               local-timer-stop;
> > > +                       };
> > > +
> > > +                       BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
> > > +                               compatible = "arm,idle-state";
> > > +                               idle-state-name = "big-retention";
> > > +                               arm,psci-suspend-param = <0x00000002>;
> > > +                               entry-latency-us = <41>;
> > > +                               exit-latency-us = <82>;
> > > +                               min-residency-us = <200>;
> > > +                       };
> > > +
> > > +                       BIG_CPU_SLEEP_1: cpu-sleep-1-1 {
> > > +                               compatible = "arm,idle-state";
> > > +                               idle-state-name = "big-power-collapse";
> > > +                               arm,psci-suspend-param = <0x00000003>;
> > > +                               entry-latency-us = <100>;
> > > +                               exit-latency-us = <525>;
> > > +                               min-residency-us = <1000>;
> > > +                               local-timer-stop;
> > > +                       };
> > > +               };
> > >         };
> > >
> > >         firmware {
> > > --
> > > 2.17.1
> > >
Niklas Cassel Oct. 2, 2019, 9:19 a.m. UTC | #10
On Mon, Sep 30, 2019 at 04:20:15PM -0600, Jeffrey Hugo wrote:
> Amit, the merged version of the below change causes a boot failure
> (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> enough, it seems to be resolved if I remove the cpu-idle-states
> property from one of the cpu nodes.
> 
> I see no issues with the msm8998 MTP.

Hello Jeffrey, Amit,

If the PSCI idle states work properly on the msm8998 devboard (MTP),
but causes crashes on msm8998 laptops, the only logical change is
that the PSCI firmware is different between the two devices.


Kind regards,
Niklas
Niklas Cassel Oct. 2, 2019, 9:27 a.m. UTC | #11
On Wed, Oct 02, 2019 at 11:19:50AM +0200, Niklas Cassel wrote:
> On Mon, Sep 30, 2019 at 04:20:15PM -0600, Jeffrey Hugo wrote:
> > Amit, the merged version of the below change causes a boot failure
> > (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> > enough, it seems to be resolved if I remove the cpu-idle-states
> > property from one of the cpu nodes.
> > 
> > I see no issues with the msm8998 MTP.
> 
> Hello Jeffrey, Amit,
> 
> If the PSCI idle states work properly on the msm8998 devboard (MTP),
> but causes crashes on msm8998 laptops, the only logical change is
> that the PSCI firmware is different between the two devices.

Since the msm8998 laptops boot using ACPI, perhaps these laptops
doesn't support PSCI/have any PSCI firmware at all.


Kind regards,
Niklas
Jeffrey Hugo Oct. 2, 2019, 6:18 p.m. UTC | #12
On Wed, Oct 2, 2019 at 3:27 AM Niklas Cassel <niklas.cassel@linaro.org> wrote:
>
> On Wed, Oct 02, 2019 at 11:19:50AM +0200, Niklas Cassel wrote:
> > On Mon, Sep 30, 2019 at 04:20:15PM -0600, Jeffrey Hugo wrote:
> > > Amit, the merged version of the below change causes a boot failure
> > > (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> > > enough, it seems to be resolved if I remove the cpu-idle-states
> > > property from one of the cpu nodes.
> > >
> > > I see no issues with the msm8998 MTP.
> >
> > Hello Jeffrey, Amit,
> >
> > If the PSCI idle states work properly on the msm8998 devboard (MTP),
> > but causes crashes on msm8998 laptops, the only logical change is
> > that the PSCI firmware is different between the two devices.
>
> Since the msm8998 laptops boot using ACPI, perhaps these laptops
> doesn't support PSCI/have any PSCI firmware at all.

They have PSCI.  If there was no PSCI, I would expect the PSCI
get_version request from Linux to fail, and all PSCI functionality to
be disabled.

However, your mention about ACPI sparked a thought.  ACPI describes
the idle states, along with the PSCI info, in the ACPI0007 devices.
Those exist on the laptops, and the info mostly correlates with Amit's
patch (ACPI seems to be a bit more conservative about the latencies,
and describes one additional deeper state).  However, upon a detailed
analysis of the ACPI description, I did find something relevant - the
retention state is not enabled.

So, I hacked out the retention state from Amit's patch, and I did not
observe a hang.  I used sysfs, and appeared able to validate that the
power collapse state was being used successfully.

I'm guessing that something is weird with the laptops, where the CPUs
can go into retention, but not come out, thus causing issues.

I'll post a patch to fix up the laptops.  Thanks for all the help.
Amit Kucheria Oct. 4, 2019, 1:36 a.m. UTC | #13
On Wed, Oct 2, 2019 at 11:48 PM Jeffrey Hugo <jeffrey.l.hugo@gmail.com> wrote:
>
> On Wed, Oct 2, 2019 at 3:27 AM Niklas Cassel <niklas.cassel@linaro.org> wrote:
> >
> > On Wed, Oct 02, 2019 at 11:19:50AM +0200, Niklas Cassel wrote:
> > > On Mon, Sep 30, 2019 at 04:20:15PM -0600, Jeffrey Hugo wrote:
> > > > Amit, the merged version of the below change causes a boot failure
> > > > (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> > > > enough, it seems to be resolved if I remove the cpu-idle-states
> > > > property from one of the cpu nodes.
> > > >
> > > > I see no issues with the msm8998 MTP.
> > >
> > > Hello Jeffrey, Amit,
> > >
> > > If the PSCI idle states work properly on the msm8998 devboard (MTP),
> > > but causes crashes on msm8998 laptops, the only logical change is
> > > that the PSCI firmware is different between the two devices.
> >
> > Since the msm8998 laptops boot using ACPI, perhaps these laptops
> > doesn't support PSCI/have any PSCI firmware at all.
>
> They have PSCI.  If there was no PSCI, I would expect the PSCI
> get_version request from Linux to fail, and all PSCI functionality to
> be disabled.
>
> However, your mention about ACPI sparked a thought.  ACPI describes
> the idle states, along with the PSCI info, in the ACPI0007 devices.
> Those exist on the laptops, and the info mostly correlates with Amit's
> patch (ACPI seems to be a bit more conservative about the latencies,
> and describes one additional deeper state).  However, upon a detailed
> analysis of the ACPI description, I did find something relevant - the
> retention state is not enabled.
>
> So, I hacked out the retention state from Amit's patch, and I did not
> observe a hang.  I used sysfs, and appeared able to validate that the
> power collapse state was being used successfully.

Interesting that the shallower sleep state was causing problems.
Usually, it is the deeper states that cause problems. So you plan to
override the idle states table in the board-specific DT?

Why does the platform even rely on DT? Shouldn't we use the ACPI tables instead?

> I'm guessing that something is weird with the laptops, where the CPUs
> can go into retention, but not come out, thus causing issues.
>
> I'll post a patch to fix up the laptops.  Thanks for all the help.
Jeffrey Hugo Oct. 4, 2019, 3:14 a.m. UTC | #14
On Thu, Oct 3, 2019 at 7:36 PM Amit Kucheria <amit.kucheria@linaro.org> wrote:
>
> On Wed, Oct 2, 2019 at 11:48 PM Jeffrey Hugo <jeffrey.l.hugo@gmail.com> wrote:
> >
> > On Wed, Oct 2, 2019 at 3:27 AM Niklas Cassel <niklas.cassel@linaro.org> wrote:
> > >
> > > On Wed, Oct 02, 2019 at 11:19:50AM +0200, Niklas Cassel wrote:
> > > > On Mon, Sep 30, 2019 at 04:20:15PM -0600, Jeffrey Hugo wrote:
> > > > > Amit, the merged version of the below change causes a boot failure
> > > > > (nasty hang, sometimes with RCU stalls) on the msm8998 laptops.  Oddly
> > > > > enough, it seems to be resolved if I remove the cpu-idle-states
> > > > > property from one of the cpu nodes.
> > > > >
> > > > > I see no issues with the msm8998 MTP.
> > > >
> > > > Hello Jeffrey, Amit,
> > > >
> > > > If the PSCI idle states work properly on the msm8998 devboard (MTP),
> > > > but causes crashes on msm8998 laptops, the only logical change is
> > > > that the PSCI firmware is different between the two devices.
> > >
> > > Since the msm8998 laptops boot using ACPI, perhaps these laptops
> > > doesn't support PSCI/have any PSCI firmware at all.
> >
> > They have PSCI.  If there was no PSCI, I would expect the PSCI
> > get_version request from Linux to fail, and all PSCI functionality to
> > be disabled.
> >
> > However, your mention about ACPI sparked a thought.  ACPI describes
> > the idle states, along with the PSCI info, in the ACPI0007 devices.
> > Those exist on the laptops, and the info mostly correlates with Amit's
> > patch (ACPI seems to be a bit more conservative about the latencies,
> > and describes one additional deeper state).  However, upon a detailed
> > analysis of the ACPI description, I did find something relevant - the
> > retention state is not enabled.
> >
> > So, I hacked out the retention state from Amit's patch, and I did not
> > observe a hang.  I used sysfs, and appeared able to validate that the
> > power collapse state was being used successfully.
>
> Interesting that the shallower sleep state was causing problems.
> Usually, it is the deeper states that cause problems. So you plan to
> override the idle states table in the board-specific DT?

Yes.  Already posted.

>
> Why does the platform even rely on DT? Shouldn't we use the ACPI tables instead?

In theory, yes.  However the ACPI seems to be incomplete (assumes
things are just hardcoded in the driver maybe?) and has tons of
non-standard things in it.  DT seems to be the easy path to
enablement.
>
> > I'm guessing that something is weird with the laptops, where the CPUs
> > can go into retention, but not come out, thus causing issues.
> >
> > I'll post a patch to fix up the laptops.  Thanks for all the help.
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/qcom/msm8998.dtsi b/arch/arm64/boot/dts/qcom/msm8998.dtsi
index 3fd0769fe648..54810980fcf9 100644
--- a/arch/arm64/boot/dts/qcom/msm8998.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8998.dtsi
@@ -78,6 +78,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x0>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			efficiency = <1024>;
 			next-level-cache = <&L2_0>;
 			L2_0: l2-cache {
@@ -97,6 +98,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x1>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			efficiency = <1024>;
 			next-level-cache = <&L2_0>;
 			L1_I_1: l1-icache {
@@ -112,6 +114,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x2>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			efficiency = <1024>;
 			next-level-cache = <&L2_0>;
 			L1_I_2: l1-icache {
@@ -127,6 +130,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x3>;
 			enable-method = "psci";
+			cpu-idle-states = <&LITTLE_CPU_SLEEP_0 &LITTLE_CPU_SLEEP_1>;
 			efficiency = <1024>;
 			next-level-cache = <&L2_0>;
 			L1_I_3: l1-icache {
@@ -142,6 +146,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x100>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			efficiency = <1536>;
 			next-level-cache = <&L2_1>;
 			L2_1: l2-cache {
@@ -161,6 +166,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x101>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			efficiency = <1536>;
 			next-level-cache = <&L2_1>;
 			L1_I_101: l1-icache {
@@ -176,6 +182,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x102>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			efficiency = <1536>;
 			next-level-cache = <&L2_1>;
 			L1_I_102: l1-icache {
@@ -191,6 +198,7 @@ 
 			compatible = "arm,armv8";
 			reg = <0x0 0x103>;
 			enable-method = "psci";
+			cpu-idle-states = <&BIG_CPU_SLEEP_0 &BIG_CPU_SLEEP_1>;
 			efficiency = <1536>;
 			next-level-cache = <&L2_1>;
 			L1_I_103: l1-icache {
@@ -238,6 +246,48 @@ 
 				};
 			};
 		};
+
+		idle-states {
+			entry-method = "psci";
+
+			LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
+				compatible = "arm,idle-state";
+				idle-state-name = "little-retention";
+				arm,psci-suspend-param = <0x00000002>;
+				entry-latency-us = <43>;
+				exit-latency-us = <86>;
+				min-residency-us = <200>;
+			};
+
+			LITTLE_CPU_SLEEP_1: cpu-sleep-0-1 {
+				compatible = "arm,idle-state";
+				idle-state-name = "little-power-collapse";
+				arm,psci-suspend-param = <0x00000003>;
+				entry-latency-us = <100>;
+				exit-latency-us = <612>;
+				min-residency-us = <1000>;
+				local-timer-stop;
+			};
+
+			BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
+				compatible = "arm,idle-state";
+				idle-state-name = "big-retention";
+				arm,psci-suspend-param = <0x00000002>;
+				entry-latency-us = <41>;
+				exit-latency-us = <82>;
+				min-residency-us = <200>;
+			};
+
+			BIG_CPU_SLEEP_1: cpu-sleep-1-1 {
+				compatible = "arm,idle-state";
+				idle-state-name = "big-power-collapse";
+				arm,psci-suspend-param = <0x00000003>;
+				entry-latency-us = <100>;
+				exit-latency-us = <525>;
+				min-residency-us = <1000>;
+				local-timer-stop;
+			};
+		};
 	};
 
 	firmware {