Commit 07ddb33a authored by danh-arm's avatar danh-arm
Browse files

Merge pull request #245 from danh-arm/sm/psci_version

Increment the PSCI VERSION to 1.0 (PR v2)
parents 126866f0 e8ca7d1e
...@@ -734,32 +734,43 @@ restoring the stack and CPU state and returning from the original SMC. ...@@ -734,32 +734,43 @@ restoring the stack and CPU state and returning from the original SMC.
TODO: Provide design walkthrough of PSCI implementation. TODO: Provide design walkthrough of PSCI implementation.
The complete PSCI API is not yet implemented. The following functions are The PSCI v1.0 specification categorizes APIs as optional and mandatory. All the
currently implemented: mandatory APIs in PSCI v1.0 and all the APIs in PSCI v0.2 draft specification
[Power State Coordination Interface PDD] [PSCI] are implemented. The table lists
- `PSCI_VERSION` the PSCI v1.0 APIs and their support in generic code.
- `CPU_OFF`
- `CPU_ON` An API implementation might have a dependency on platform code e.g. CPU_SUSPEND
- `CPU_SUSPEND` requires the platform to export a part of the implementation. Hence the level
- `AFFINITY_INFO` of support of the mandatory APIs depends upon the support exported by the
- `SYSTEM_OFF` platform port as well. The Juno and FVP (all variants) platforms export all the
- `SYSTEM_RESET` required support.
The `CPU_ON`, `CPU_OFF` and `CPU_SUSPEND` functions implement the warm boot | PSCI v1.0 API |Supported| Comments |
path in ARM Trusted Firmware. `CPU_ON` and `CPU_OFF` have undergone testing |:----------------------|:--------|:------------------------------------------|
on all the supported FVPs. `CPU_SUSPEND` & `AFFINITY_INFO` have undergone |`PSCI_VERSION` | Yes | The version returned is 1.0 |
testing only on the AEM v8 Base FVP. Support for `AFFINITY_INFO` is still |`CPU_SUSPEND` | Yes* | The original `power_state` format is used |
experimental. Support for `CPU_SUSPEND` is stable for entry into power down |`CPU_OFF` | Yes* | |
states. Standby states are currently not supported. `PSCI_VERSION` is |`CPU_ON` | Yes* | |
present but completely untested in this version of the software. |`AFFINITY_INFO` | Yes | |
|`MIGRATE` | Yes** | |
The following unsupported functions return with a error code as documented in |`MIGRATE_INFO_TYPE` | Yes** | |
the [Power State Coordination Interface PDD] [PSCI]. |`MIGRATE_INFO_CPU` | Yes** | |
|`SYSTEM_OFF` | Yes* | |
- `MIGRATE` : -1 (NOT_SUPPORTED) |`SYSTEM_RESET` | Yes* | |
- `MIGRATE_INFO_TYPE` : 2 (Trusted OS is either not present or does not |`PSCI_FEATURES` | Yes | |
require migration) |`CPU_FREEZE` | No | |
- `MIGRATE_INFO_UP_CPU` : 0 (Return value is UNDEFINED) |`CPU_DEFAULT_SUSPEND` | No | |
|`CPU_HW_STATE` | No | |
|`SYSTEM_SUSPEND` | No | |
|`PSCI_SET_SUSPEND_MODE`| No | |
|`PSCI_STAT_RESIDENCY` | No | |
|`PSCI_STAT_COUNT` | No | |
*Note : These PSCI APIs require platform power management hooks to be
registered with the generic PSCI code to be supported.
**Note : These PSCI APIs require appropriate Secure Payload Dispatcher
hooks to be registered with the generic PSCI code to be supported.
5. Secure-EL1 Payloads and Dispatchers 5. Secure-EL1 Payloads and Dispatchers
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}; };
psci { psci {
compatible = "arm,psci"; compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
method = "smc"; method = "smc";
cpu_suspend = <0xc4000001>; cpu_suspend = <0xc4000001>;
cpu_off = <0x84000002>; cpu_off = <0x84000002>;
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}; };
psci { psci {
compatible = "arm,psci"; compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
method = "smc"; method = "smc";
cpu_suspend = <0xc4000001>; cpu_suspend = <0xc4000001>;
cpu_off = <0x84000002>; cpu_off = <0x84000002>;
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}; };
psci { psci {
compatible = "arm,psci"; compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
method = "smc"; method = "smc";
cpu_suspend = <0xc4000001>; cpu_suspend = <0xc4000001>;
cpu_off = <0x84000002>; cpu_off = <0x84000002>;
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}; };
psci { psci {
compatible = "arm,psci"; compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
method = "smc"; method = "smc";
cpu_suspend = <0xc4000001>; cpu_suspend = <0xc4000001>;
cpu_off = <0x84000002>; cpu_off = <0x84000002>;
......
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
}; };
idle-states { idle-states {
entry-method = "arm,psci"; entry-method = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
CPU_SLEEP_0: cpu-sleep-0 { CPU_SLEEP_0: cpu-sleep-0 {
compatible = "arm,idle-state"; compatible = "arm,idle-state";
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}; };
psci { psci {
compatible = "arm,psci"; compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
method = "smc"; method = "smc";
cpu_suspend = <0xc4000001>; cpu_suspend = <0xc4000001>;
cpu_off = <0x84000002>; cpu_off = <0x84000002>;
......
...@@ -115,8 +115,8 @@ ...@@ -115,8 +115,8 @@
/******************************************************************************* /*******************************************************************************
* PSCI version * PSCI version
******************************************************************************/ ******************************************************************************/
#define PSCI_MAJOR_VER (0 << 16) #define PSCI_MAJOR_VER (1 << 16)
#define PSCI_MINOR_VER 0x2 #define PSCI_MINOR_VER 0x0
/******************************************************************************* /*******************************************************************************
* PSCI error codes * PSCI error codes
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment