70 lines
2.6 KiB
Diff
70 lines
2.6 KiB
Diff
From: Matt Fleming <matt.fleming@intel.com>
|
|
Date: Wed, 14 Nov 2012 09:42:35 +0000
|
|
Subject: efi: Make 'efi_enabled' a function to query EFI facilities
|
|
|
|
commit 83e68189745ad931c2afd45d8ee3303929233e7f upstream.
|
|
|
|
Originally 'efi_enabled' indicated whether a kernel was booted from
|
|
EFI firmware. Over time its semantics have changed, and it now
|
|
indicates whether or not we are booted on an EFI machine with
|
|
bit-native firmware, e.g. 64-bit kernel with 64-bit firmware.
|
|
|
|
The immediate motivation for this patch is the bug report at,
|
|
|
|
https://bugs.launchpad.net/ubuntu-cdimage/+bug/1040557
|
|
|
|
which details how running a platform driver on an EFI machine that is
|
|
designed to run under BIOS can cause the machine to become
|
|
bricked. Also, the following report,
|
|
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=47121
|
|
|
|
details how running said driver can also cause Machine Check
|
|
Exceptions. Drivers need a new means of detecting whether they're
|
|
running on an EFI machine, as sadly the expression,
|
|
|
|
if (!efi_enabled)
|
|
|
|
hasn't been a sufficient condition for quite some time.
|
|
|
|
Users actually want to query 'efi_enabled' for different reasons -
|
|
what they really want access to is the list of available EFI
|
|
facilities.
|
|
|
|
For instance, the x86 reboot code needs to know whether it can invoke
|
|
the ResetSystem() function provided by the EFI runtime services, while
|
|
the ACPI OSL code wants to know whether the EFI config tables were
|
|
mapped successfully. There are also checks in some of the platform
|
|
driver code to simply see if they're running on an EFI machine (which
|
|
would make it a bad idea to do BIOS-y things).
|
|
|
|
This patch is a prereq for the samsung-laptop fix patch.
|
|
|
|
Cc: David Airlie <airlied@linux.ie>
|
|
Cc: Corentin Chary <corentincj@iksaif.net>
|
|
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
|
|
Cc: Dave Jiang <dave.jiang@intel.com>
|
|
Cc: Olof Johansson <olof@lixom.net>
|
|
Cc: Peter Jones <pjones@redhat.com>
|
|
Cc: Colin Ian King <colin.king@canonical.com>
|
|
Cc: Steve Langasek <steve.langasek@canonical.com>
|
|
Cc: Tony Luck <tony.luck@intel.com>
|
|
Cc: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
|
Cc: Rafael J. Wysocki <rjw@sisk.pl>
|
|
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
|
|
[bwh: Restricted to drivers/gpu/drm/]
|
|
---
|
|
--- a/drivers/gpu/drm/radeon/radeon_device.c
|
|
+++ b/drivers/gpu/drm/radeon/radeon_device.c
|
|
@@ -429,7 +429,8 @@ bool radeon_card_posted(struct radeon_device *rdev)
|
|
{
|
|
uint32_t reg;
|
|
|
|
- if (efi_enabled && rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE)
|
|
+ if (efi_enabled(EFI_BOOT) &&
|
|
+ rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE)
|
|
return false;
|
|
|
|
/* first check CRTCs */
|