diff options
author | Alexander Graf <agraf@suse.de> | 2016-08-16 21:08:47 +0200 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2016-10-18 09:08:08 +0200 |
commit | 3ee655ed83ada67912cbbd14b6685bc0c7102553 (patch) | |
tree | bb700ca0e2c742b2f2422a47ff7aa8b27e05c307 | |
parent | 51bfb5b6f522b1fbe453c18df03648d72b08131f (diff) | |
download | u-boot-3ee655ed83ada67912cbbd14b6685bc0c7102553.tar.gz |
arm: Add PSCI shutdown function
Using PSCI you can not only reset the system, you can also shut it down!
This patch exposes a function to do exactly that to whatever code wants
to make use of it.
Signed-off-by: Alexander Graf <agraf@suse.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | arch/arm/cpu/armv8/fwcall.c | 15 | ||||
-rw-r--r-- | arch/arm/include/asm/system.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv8/fwcall.c b/arch/arm/cpu/armv8/fwcall.c index 6bb68f2ed3..b3ef7c0f73 100644 --- a/arch/arm/cpu/armv8/fwcall.c +++ b/arch/arm/cpu/armv8/fwcall.c @@ -97,3 +97,18 @@ void __noreturn psci_system_reset(void) while (1) ; } + +void __noreturn psci_system_off(void) +{ + struct pt_regs regs; + + regs.regs[0] = ARM_PSCI_0_2_FN_SYSTEM_OFF; + + if (use_smc_for_psci) + smc_call(®s); + else + hvc_call(®s); + + while (1) + ; +} diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 5166c653f3..b928bd8d17 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -116,6 +116,7 @@ void flush_l3_cache(void); void smc_call(struct pt_regs *args); void __noreturn psci_system_reset(void); +void __noreturn psci_system_off(void); #endif /* __ASSEMBLY__ */ |