]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm64: dts: fvp: Add CPU idle states for Rev C model
authorSudeep Holla <sudeep.holla@arm.com>
Fri, 9 May 2025 15:46:39 +0000 (16:46 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Mon, 12 May 2025 17:51:42 +0000 (18:51 +0100)
Add CPU idle state definitions to the FVP Rev C device tree to enable
support for CPU lower power modes. This allows the system to properly
enter low power states during idle. It is disabled by default as it is
know to impact performance on the models.

Note that the power_state parameter(arm,psci-suspend-param) doesn't use
the Extended StateID format for compatibility reasons on FVP.

Tested on the FVP Rev C model with PSCI support enabled firmware.

Tested-by: Leo Yan <leo.yan@arm.com>
Message-Id: <20250509154640.836093-2-sudeep.holla@arm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
arch/arm64/boot/dts/arm/fvp-base-revc.dts

index 50b5993a24602e2b73ececb4b33211274ed910bf..755b1407c4dce7c4aac18e6f059a0c7aab54de70 100644 (file)
                #address-cells = <2>;
                #size-cells = <0>;
 
+               idle-states {
+                       entry-method = "psci";
+
+                       CPU_SLEEP_0: cpu-sleep-0 {
+                               compatible = "arm,idle-state";
+                               local-timer-stop;
+                               arm,psci-suspend-param = <0x0010000>;
+                               entry-latency-us = <40>;
+                               exit-latency-us = <100>;
+                               min-residency-us = <150>;
+                               status = "disabled";
+                       };
+
+                       CLUSTER_SLEEP_0: cluster-sleep-0 {
+                               compatible = "arm,idle-state";
+                               local-timer-stop;
+                               arm,psci-suspend-param = <0x1010000>;
+                               entry-latency-us = <500>;
+                               exit-latency-us = <1000>;
+                               min-residency-us = <2500>;
+                               status = "disabled";
+                       };
+               };
+
                cpu0: cpu@0 {
                        device_type = "cpu";
                        compatible = "arm,armv8";
@@ -56,6 +80,7 @@
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C0_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu1: cpu@100 {
                        device_type = "cpu";
@@ -69,6 +94,7 @@
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C0_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu2: cpu@200 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C0_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu3: cpu@300 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C0_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu4: cpu@10000 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C1_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu5: cpu@10100 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C1_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu6: cpu@10200 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C1_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                cpu7: cpu@10300 {
                        device_type = "cpu";
                        d-cache-line-size = <64>;
                        d-cache-sets = <256>;
                        next-level-cache = <&C1_L2>;
+                       cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
                };
                C0_L2: l2-cache0 {
                        compatible = "cache";