Lines Matching +full:psci +full:- +full:suspend +full:- +full:param
6 1 - Introduction
10 where cores can be put in different low-power states (ranging from simple
12 the range of dynamic idle states that a processor can enter at run-time, can be
19 - Running
20 - Idle_standby
21 - Idle_retention
22 - Sleep
23 - Off
29 wake-up capabilities, hence it is not considered in this document).
39 2 - idle-states definitions
52 |<------ entry ------->|
54 |<- exit ->|
56 |<-------- min-residency -------->|
57 |<------- wakeup-latency ------->|
64 like cache flushing. This is abortable on pending wake-up
73 IDLE: This is the actual energy-saving idle period. This may last
74 between 0 and infinite time, until a wake-up event occurs.
79 entry-latency: Worst case latency required to enter the idle state. The
80 exit-latency may be guaranteed only after entry-latency has passed.
82 min-residency: Minimum period, including preparation and entry, for a given
85 wakeup-latency: Maximum delay between the signaling of a wake-up event and the
87 to be entry-latency + exit-latency.
91 An idle CPU requires the expected min-residency time to select the most
93 (i.e. wake-up) that causes the CPU to return to the EXEC phase.
95 An operating system scheduler may need to compute the shortest wake-up delay
99 wakeup-delay = exit-latency + max(entry-latency - (now - entry-timestamp), 0)
102 (e.g. waking-up) the CPU with the shortest wake-up delay.
103 The wake-up delay must take into account the entry latency if that period
109 An OS has to reliably probe the wakeup-latency since some devices can enforce
111 worst case wake-up latency it can incur if a CPU is allowed to enter an
115 The min-residency time parameter deserves further explanation since it is
125 n | /---
126 e | /------
127 r | /------
128 g | /-----
129 y | /------
130 | ----
138 -----|-------+----------------------------------
143 The graph is split in two parts delimited by time 1ms on the X-axis.
144 The graph curve with X-axis values = { x | 0 < x < 1ms } has a steep slope
147 The graph curve in the area delimited by X-axis values = {x | x > 1ms } has
151 min-residency is defined for a given idle state as the minimum expected
163 | /-- IDLE1
164 e | /---
165 n | /----
166 e | /---
167 r | /-----/--------- IDLE2
168 g | /-------/---------
169 y | ------------ /---|
170 | / /---- |
171 | / /--- |
172 | / /---- |
173 | / /--- |
174 | --- |
178 ---/----------------------------+------------------------
179 |IDLE1-energy < IDLE2-energy | IDLE2-energy < IDLE1-energy
181 IDLE2-min-residency
183 Graph 2: idle states min-residency example
187 wake-up IRQ) is less than IDLE2-min-residency, IDLE1 is the better idle state
199 IDLE2-min-residency and corresponds to the time when energy consumption of
206 3 - idle-states node
209 ARM processor idle states are defined within the idle-states node, which is
213 - idle-states node
215 Usage: Optional - On ARM systems, it is a container of processor idle
218 supports idle_standby, an idle-states node is not
221 Description: idle-states node is a container node, where its
224 Node name must be "idle-states".
226 The idle-states node's parent node must be the cpus node.
228 The idle-states node's child nodes can be:
230 - one or more state nodes
234 An idle-states node defines the following properties:
236 - entry-method
239 # On ARM v8 64-bit this property is required and must
241 - "psci"
242 # On ARM 32-bit systems this property is optional
244 This assumes that the "enable-method" property is set to "psci" in the cpu
249 within the idle-states node, any other configuration is considered invalid
253 4 - state node
259 - state node
261 Description: must be child of the idle-states node
274 - compatible
277 Definition: Must be "arm,idle-state".
279 - local-timer-stop
285 - entry-latency-us
287 Value type: <prop-encoded-array>
291 - exit-latency-us
293 Value type: <prop-encoded-array>
296 The exit-latency-us duration may be guaranteed
297 only after entry-latency-us has passed.
299 - min-residency-us
301 Value type: <prop-encoded-array>
308 - wakeup-latency-us:
310 Value type: <prop-encoded-array>
312 signaling of a wake-up event and the CPU being
316 entry-latency-us + exit-latency-us
320 section 2) is non-neglibigle.
321 In such systems entry-latency-us + exit-latency-us
322 will exceed wakeup-latency-us by this duration.
324 - status:
328 the operational status of an idle-state.
335 If the property is not present the idle-state must
338 - idle-state-name:
345 additional properties specific to the entry-method defined in the
346 idle-states node. Please refer to the entry-method bindings
350 4 - Examples
353 Example 1 (ARM 64-bit, 16-cpu system, PSCI enable-method):
356 #size-cells = <0>;
357 #address-cells = <2>;
361 compatible = "arm,cortex-a57";
363 enable-method = "psci";
364 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
370 compatible = "arm,cortex-a57";
372 enable-method = "psci";
373 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
379 compatible = "arm,cortex-a57";
381 enable-method = "psci";
382 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
388 compatible = "arm,cortex-a57";
390 enable-method = "psci";
391 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
397 compatible = "arm,cortex-a57";
399 enable-method = "psci";
400 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
406 compatible = "arm,cortex-a57";
408 enable-method = "psci";
409 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
415 compatible = "arm,cortex-a57";
417 enable-method = "psci";
418 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
424 compatible = "arm,cortex-a57";
426 enable-method = "psci";
427 cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
433 compatible = "arm,cortex-a53";
435 enable-method = "psci";
436 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
442 compatible = "arm,cortex-a53";
444 enable-method = "psci";
445 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
451 compatible = "arm,cortex-a53";
453 enable-method = "psci";
454 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
460 compatible = "arm,cortex-a53";
462 enable-method = "psci";
463 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
469 compatible = "arm,cortex-a53";
471 enable-method = "psci";
472 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
478 compatible = "arm,cortex-a53";
480 enable-method = "psci";
481 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
487 compatible = "arm,cortex-a53";
489 enable-method = "psci";
490 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
496 compatible = "arm,cortex-a53";
498 enable-method = "psci";
499 cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
503 idle-states {
504 entry-method = "psci";
506 CPU_RETENTION_0_0: cpu-retention-0-0 {
507 compatible = "arm,idle-state";
508 arm,psci-suspend-param = <0x0010000>;
509 entry-latency-us = <20>;
510 exit-latency-us = <40>;
511 min-residency-us = <80>;
514 CLUSTER_RETENTION_0: cluster-retention-0 {
515 compatible = "arm,idle-state";
516 local-timer-stop;
517 arm,psci-suspend-param = <0x1010000>;
518 entry-latency-us = <50>;
519 exit-latency-us = <100>;
520 min-residency-us = <250>;
521 wakeup-latency-us = <130>;
524 CPU_SLEEP_0_0: cpu-sleep-0-0 {
525 compatible = "arm,idle-state";
526 local-timer-stop;
527 arm,psci-suspend-param = <0x0010000>;
528 entry-latency-us = <250>;
529 exit-latency-us = <500>;
530 min-residency-us = <950>;
533 CLUSTER_SLEEP_0: cluster-sleep-0 {
534 compatible = "arm,idle-state";
535 local-timer-stop;
536 arm,psci-suspend-param = <0x1010000>;
537 entry-latency-us = <600>;
538 exit-latency-us = <1100>;
539 min-residency-us = <2700>;
540 wakeup-latency-us = <1500>;
543 CPU_RETENTION_1_0: cpu-retention-1-0 {
544 compatible = "arm,idle-state";
545 arm,psci-suspend-param = <0x0010000>;
546 entry-latency-us = <20>;
547 exit-latency-us = <40>;
548 min-residency-us = <90>;
551 CLUSTER_RETENTION_1: cluster-retention-1 {
552 compatible = "arm,idle-state";
553 local-timer-stop;
554 arm,psci-suspend-param = <0x1010000>;
555 entry-latency-us = <50>;
556 exit-latency-us = <100>;
557 min-residency-us = <270>;
558 wakeup-latency-us = <100>;
561 CPU_SLEEP_1_0: cpu-sleep-1-0 {
562 compatible = "arm,idle-state";
563 local-timer-stop;
564 arm,psci-suspend-param = <0x0010000>;
565 entry-latency-us = <70>;
566 exit-latency-us = <100>;
567 min-residency-us = <300>;
568 wakeup-latency-us = <150>;
571 CLUSTER_SLEEP_1: cluster-sleep-1 {
572 compatible = "arm,idle-state";
573 local-timer-stop;
574 arm,psci-suspend-param = <0x1010000>;
575 entry-latency-us = <500>;
576 exit-latency-us = <1200>;
577 min-residency-us = <3500>;
578 wakeup-latency-us = <1300>;
584 Example 2 (ARM 32-bit, 8-cpu system, two clusters):
587 #size-cells = <0>;
588 #address-cells = <1>;
592 compatible = "arm,cortex-a15";
594 cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
599 compatible = "arm,cortex-a15";
601 cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
606 compatible = "arm,cortex-a15";
608 cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
613 compatible = "arm,cortex-a15";
615 cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
620 compatible = "arm,cortex-a7";
622 cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
627 compatible = "arm,cortex-a7";
629 cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
634 compatible = "arm,cortex-a7";
636 cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
641 compatible = "arm,cortex-a7";
643 cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
646 idle-states {
647 CPU_SLEEP_0_0: cpu-sleep-0-0 {
648 compatible = "arm,idle-state";
649 local-timer-stop;
650 entry-latency-us = <200>;
651 exit-latency-us = <100>;
652 min-residency-us = <400>;
653 wakeup-latency-us = <250>;
656 CLUSTER_SLEEP_0: cluster-sleep-0 {
657 compatible = "arm,idle-state";
658 local-timer-stop;
659 entry-latency-us = <500>;
660 exit-latency-us = <1500>;
661 min-residency-us = <2500>;
662 wakeup-latency-us = <1700>;
665 CPU_SLEEP_1_0: cpu-sleep-1-0 {
666 compatible = "arm,idle-state";
667 local-timer-stop;
668 entry-latency-us = <300>;
669 exit-latency-us = <500>;
670 min-residency-us = <900>;
671 wakeup-latency-us = <600>;
674 CLUSTER_SLEEP_1: cluster-sleep-1 {
675 compatible = "arm,idle-state";
676 local-timer-stop;
677 entry-latency-us = <800>;
678 exit-latency-us = <2000>;
679 min-residency-us = <6500>;
680 wakeup-latency-us = <2300>;
687 5 - References
690 [1] ARM Linux Kernel documentation - CPUs bindings
693 [2] ARM Linux Kernel documentation - PSCI bindings
694 Documentation/devicetree/bindings/arm/psci.yaml
705 [6] ARM Linux Kernel documentation - Booting AArch64 Linux