diff options
author | Juan Castillo <juan.castillo@arm.com> | 2014-08-12 11:17:06 +0100 |
---|---|---|
committer | Dan Handley <dan.handley@arm.com> | 2014-08-19 11:42:45 +0100 |
commit | d5f130930624ceb95cde40de999a880aa2b00493 (patch) | |
tree | 9f52641daefbb25d4dc7c9af1e4bca74c23957c1 /include/bl31/services/psci.h | |
parent | a1d80440c44ce70e5fec4d8c60b5f6688b6cf8ff (diff) |
Add support for PSCI SYSTEM_OFF and SYSTEM_RESET APIs
This patch adds support for SYSTEM_OFF and SYSTEM_RESET PSCI
operations. A platform should export handlers to complete the
requested operation. The FVP port exports fvp_system_off() and
fvp_system_reset() as an example.
If the SPD provides a power management hook for system off and
system reset, then the SPD is notified about the corresponding
operation so it can do some bookkeeping. The TSPD exports
tspd_system_off() and tspd_system_reset() for that purpose.
Versatile Express shutdown and reset methods have been removed
from the FDT as new PSCI sys_poweroff and sys_reset services
have been added. For those kernels that do not support yet these
PSCI services (i.e. GICv3 kernel), the original dtsi files have
been renamed to *-no_psci.dtsi.
Fixes ARM-software/tf-issues#218
Change-Id: Ic8a3bf801db979099ab7029162af041c4e8330c8
Diffstat (limited to 'include/bl31/services/psci.h')
-rw-r--r-- | include/bl31/services/psci.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/include/bl31/services/psci.h b/include/bl31/services/psci.h index 77f406d2..6512dfb5 100644 --- a/include/bl31/services/psci.h +++ b/include/bl31/services/psci.h @@ -52,10 +52,9 @@ #define PSCI_SYSTEM_RESET 0x84000009 /* - * Number of PSCI calls (above) implemented. System off and reset aren't - * implemented as yet + * Number of PSCI calls (above) implemented */ -#define PSCI_NUM_CALLS 13 +#define PSCI_NUM_CALLS 15 /******************************************************************************* * PSCI Migrate and friends @@ -154,6 +153,8 @@ typedef struct plat_pm_ops { int (*affinst_suspend_finish)(unsigned long, unsigned int, unsigned int); + void (*system_off)(void) __dead2; + void (*system_reset)(void) __dead2; } plat_pm_ops_t; /******************************************************************************* @@ -170,6 +171,8 @@ typedef struct spd_pm_ops { void (*svc_suspend_finish)(uint64_t suspend_level); void (*svc_migrate)(uint64_t __unused1, uint64_t __unused2); int32_t (*svc_migrate_info)(uint64_t *__unused); + void (*svc_system_off)(void); + void (*svc_system_reset)(void); } spd_pm_ops_t; /******************************************************************************* @@ -182,8 +185,6 @@ int psci_affinity_info(unsigned long, unsigned int); int psci_migrate(unsigned int); unsigned int psci_migrate_info_type(void); unsigned long psci_migrate_info_up_cpu(void); -void psci_system_off(void); -void psci_system_reset(void); int psci_cpu_on(unsigned long, unsigned long, unsigned long); |