From: Mark Salter msalter@redhat.com
Wire in support for EFI reboot and poweroff functions. We use these only if no other mechanism has been registered with arm_pm_reboot and/or pm_power_off respectively.
Signed-off-by: Mark Salter msalter@redhat.com --- arch/arm64/kernel/efi.c | 11 +++++++++++ arch/arm64/kernel/process.c | 6 ++++++ 2 files changed, 17 insertions(+)
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 95c49eb..a73daae 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -471,3 +471,14 @@ err_unmap: return -1; } early_initcall(arm64_enter_virtual_mode); + +/* + * If nothing else is handling pm_power_off, use EFI + * + * This is called from a late_initcall after other mechanisms + * have had a chance to register a handler. + */ +bool efi_poweroff_required(void) +{ + return pm_power_off == NULL; +} diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index fde9923..466f8cd 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -43,6 +43,7 @@ #include <linux/hw_breakpoint.h> #include <linux/personality.h> #include <linux/notifier.h> +#include <linux/efi.h>
#include <asm/compat.h> #include <asm/cacheflush.h> @@ -157,6 +158,11 @@ void machine_restart(char *cmd) do_kernel_restart(cmd);
/* + * If all else fails, try EFI + */ + efi_reboot(reboot_mode, cmd); + + /* * Whoops - the architecture was unable to reboot. */ printk("Reboot failed -- System halted\n");