112 lines
3.4 KiB
Plaintext
112 lines
3.4 KiB
Plaintext
|
* Power State Coordination Interface (PSCI)
|
||
|
|
||
|
Firmware implementing the PSCI functions described in ARM document number
|
||
|
ARM DEN 0022A ("Power State Coordination Interface System Software on ARM
|
||
|
processors") can be used by Linux to initiate various CPU-centric power
|
||
|
operations.
|
||
|
|
||
|
Issue A of the specification describes functions for CPU suspend, hotplug
|
||
|
and migration of secure software.
|
||
|
|
||
|
Functions are invoked by trapping to the privilege level of the PSCI
|
||
|
firmware (specified as part of the binding below) and passing arguments
|
||
|
in a manner similar to that specified by AAPCS:
|
||
|
|
||
|
r0 => 32-bit Function ID / return value
|
||
|
{r1 - r3} => Parameters
|
||
|
|
||
|
Note that the immediate field of the trapping instruction must be set
|
||
|
to #0.
|
||
|
|
||
|
|
||
|
Main node required properties:
|
||
|
|
||
|
- compatible : should contain at least one of:
|
||
|
|
||
|
* "arm,psci" : For implementations complying to PSCI versions prior
|
||
|
to 0.2.
|
||
|
For these cases function IDs must be provided.
|
||
|
|
||
|
* "arm,psci-0.2" : For implementations complying to PSCI 0.2.
|
||
|
Function IDs are not required and should be ignored by
|
||
|
an OS with PSCI 0.2 support, but are permitted to be
|
||
|
present for compatibility with existing software when
|
||
|
"arm,psci" is later in the compatible list.
|
||
|
|
||
|
* "arm,psci-1.0" : For implementations complying to PSCI 1.0.
|
||
|
PSCI 1.0 is backward compatible with PSCI 0.2 with
|
||
|
minor specification updates, as defined in the PSCI
|
||
|
specification[2].
|
||
|
|
||
|
- method : The method of calling the PSCI firmware. Permitted
|
||
|
values are:
|
||
|
|
||
|
"smc" : SMC #0, with the register assignments specified
|
||
|
in this binding.
|
||
|
|
||
|
"hvc" : HVC #0, with the register assignments specified
|
||
|
in this binding.
|
||
|
|
||
|
Main node optional properties:
|
||
|
|
||
|
- cpu_suspend : Function ID for CPU_SUSPEND operation
|
||
|
|
||
|
- cpu_off : Function ID for CPU_OFF operation
|
||
|
|
||
|
- cpu_on : Function ID for CPU_ON operation
|
||
|
|
||
|
- migrate : Function ID for MIGRATE operation
|
||
|
|
||
|
Device tree nodes that require usage of PSCI CPU_SUSPEND function (ie idle
|
||
|
state nodes, as per bindings in [1]) must specify the following properties:
|
||
|
|
||
|
- arm,psci-suspend-param
|
||
|
Usage: Required for state nodes[1] if the corresponding
|
||
|
idle-states node entry-method property is set
|
||
|
to "psci".
|
||
|
Value type: <u32>
|
||
|
Definition: power_state parameter to pass to the PSCI
|
||
|
suspend call.
|
||
|
|
||
|
Example:
|
||
|
|
||
|
Case 1: PSCI v0.1 only.
|
||
|
|
||
|
psci {
|
||
|
compatible = "arm,psci";
|
||
|
method = "smc";
|
||
|
cpu_suspend = <0x95c10000>;
|
||
|
cpu_off = <0x95c10001>;
|
||
|
cpu_on = <0x95c10002>;
|
||
|
migrate = <0x95c10003>;
|
||
|
};
|
||
|
|
||
|
Case 2: PSCI v0.2 only
|
||
|
|
||
|
psci {
|
||
|
compatible = "arm,psci-0.2";
|
||
|
method = "smc";
|
||
|
};
|
||
|
|
||
|
Case 3: PSCI v0.2 and PSCI v0.1.
|
||
|
|
||
|
A DTB may provide IDs for use by kernels without PSCI 0.2 support,
|
||
|
enabling firmware and hypervisors to support existing and new kernels.
|
||
|
These IDs will be ignored by kernels with PSCI 0.2 support, which will
|
||
|
use the standard PSCI 0.2 IDs exclusively.
|
||
|
|
||
|
psci {
|
||
|
compatible = "arm,psci-0.2", "arm,psci";
|
||
|
method = "hvc";
|
||
|
|
||
|
cpu_on = < arbitrary value >;
|
||
|
cpu_off = < arbitrary value >;
|
||
|
|
||
|
...
|
||
|
};
|
||
|
|
||
|
[1] Kernel documentation - ARM idle states bindings
|
||
|
Documentation/devicetree/bindings/arm/idle-states.txt
|
||
|
[2] Power State Coordination Interface (PSCI) specification
|
||
|
http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
|