| * 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 |