diff options
author | Matt Fleming <matt.fleming@intel.com> | 2014-06-13 12:39:55 +0100 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2014-07-18 21:23:52 +0100 |
commit | 44be28e9dd9880dca3e2cbf7a844f2114e67f2cb (patch) | |
tree | 8f0ed71cd35b242fc546ccdd9da58f7c0f6363a2 /arch/x86/kernel/reboot.c | |
parent | 0c5ed61adbdbf2ca5de934642d5be1e971c498c1 (diff) | |
download | op-kernel-dev-44be28e9dd9880dca3e2cbf7a844f2114e67f2cb.zip op-kernel-dev-44be28e9dd9880dca3e2cbf7a844f2114e67f2cb.tar.gz |
x86/reboot: Add EFI reboot quirk for ACPI Hardware Reduced flag
It appears that the BayTrail-T class of hardware requires EFI in order
to powerdown and reboot and no other reliable method exists.
This quirk is generally applicable to all hardware that has the ACPI
Hardware Reduced bit set, since usually ACPI would be the preferred
method.
Cc: Len Brown <len.brown@intel.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'arch/x86/kernel/reboot.c')
-rw-r--r-- | arch/x86/kernel/reboot.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 09e709f..17962e6 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -28,6 +28,7 @@ #include <linux/mc146818rtc.h> #include <asm/realmode.h> #include <asm/x86_init.h> +#include <asm/efi.h> /* * Power off function, if any @@ -401,12 +402,25 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { static int __init reboot_init(void) { + int rv; + /* * Only do the DMI check if reboot_type hasn't been overridden * on the command line */ - if (reboot_default) - dmi_check_system(reboot_dmi_table); + if (!reboot_default) + return 0; + + /* + * The DMI quirks table takes precedence. If no quirks entry + * matches and the ACPI Hardware Reduced bit is set, force EFI + * reboot. + */ + rv = dmi_check_system(reboot_dmi_table); + + if (!rv && efi_reboot_required()) + reboot_type = BOOT_EFI; + return 0; } core_initcall(reboot_init); |