summaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2014-06-13 12:39:55 +0100
committerLuis Henriques <luis.henriques@canonical.com>2015-05-12 09:36:34 +0100
commit694b7f5f8c724f237e38ea27bdc77e081be243e6 (patch)
treebe6a23d06de95919d0cec0248e8b496077a8cf4d /drivers/firmware
parentf6c2e46d68cd69266ae5f763f4a5c8c3c823104c (diff)
downloadlinux-stable-694b7f5f8c724f237e38ea27bdc77e081be243e6.tar.gz
linux-stable-694b7f5f8c724f237e38ea27bdc77e081be243e6.tar.bz2
linux-stable-694b7f5f8c724f237e38ea27bdc77e081be243e6.zip
x86/reboot: Add EFI reboot quirk for ACPI Hardware Reduced flag
commit 44be28e9dd9880dca3e2cbf7a844f2114e67f2cb upstream. 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> Cc: Ben Hutchings <ben@decadent.org.uk> [ luis: backported to 3.16: - move changes from quirks.c into efi.c - adjusted context ] Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/efi/reboot.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/firmware/efi/reboot.c b/drivers/firmware/efi/reboot.c
index e9eeeb3c6345..9c59d1c795d1 100644
--- a/drivers/firmware/efi/reboot.c
+++ b/drivers/firmware/efi/reboot.c
@@ -5,6 +5,8 @@
#include <linux/efi.h>
#include <linux/reboot.h>
+int efi_reboot_quirk_mode = -1;
+
void efi_reboot(enum reboot_mode reboot_mode, const char *__unused)
{
int efi_mode;
@@ -22,6 +24,12 @@ void efi_reboot(enum reboot_mode reboot_mode, const char *__unused)
break;
}
+ /*
+ * If a quirk forced an EFI reset mode, always use that.
+ */
+ if (efi_reboot_quirk_mode != -1)
+ efi_mode = efi_reboot_quirk_mode;
+
efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL);
}