summaryrefslogtreecommitdiff
path: root/include/bl31/services/psci.h
diff options
context:
space:
mode:
authorJuan Castillo <juan.castillo@arm.com>2014-08-12 11:17:06 +0100
committerDan Handley <dan.handley@arm.com>2014-08-19 11:42:45 +0100
commitd5f130930624ceb95cde40de999a880aa2b00493 (patch)
tree9f52641daefbb25d4dc7c9af1e4bca74c23957c1 /include/bl31/services/psci.h
parenta1d80440c44ce70e5fec4d8c60b5f6688b6cf8ff (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.h11
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);