Fix efifb handling on MBP8,3
This commit is contained in:
parent
f8f8ccfe16
commit
4f94f043d0
@ -0,0 +1,69 @@
|
||||
From f462ed939de67c20528bc08f11d2fc4f2d59c0d5 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <mjg@redhat.com>
|
||||
Date: Fri, 27 Jul 2012 12:58:53 -0400
|
||||
Subject: [PATCH 1/2] efifb: Skip DMI checks if the bootloader knows what it's
|
||||
doing
|
||||
|
||||
The majority of the DMI checks in efifb are for cases where the bootloader
|
||||
has provided invalid information. However, on some machines the overrides
|
||||
may do more harm than good due to configuration differences between machines
|
||||
with the same machine identifier. It turns out that it's possible for the
|
||||
bootloader to get the correct information on GOP-based systems, but we
|
||||
can't guarantee that the kernel's being booted with one that's been updated
|
||||
to do so. Add support for a capabilities flag that can be set by the
|
||||
bootloader, and skip the DMI checks in that case. Additionally, set this
|
||||
flag in the UEFI stub code.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
Acked-by: Peter Jones <pjones@redhat.com>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
arch/x86/boot/compressed/eboot.c | 2 ++
|
||||
drivers/video/efifb.c | 4 +++-
|
||||
include/linux/screen_info.h | 2 ++
|
||||
3 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index d5e4044..bbd83b9 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -379,6 +379,8 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto,
|
||||
si->rsvd_pos = 0;
|
||||
}
|
||||
|
||||
+ si->capabilities |= VIDEO_CAPABILITY_SKIP_QUIRKS;
|
||||
+
|
||||
free_handle:
|
||||
efi_call_phys1(sys_table->boottime->free_pool, gop_handle);
|
||||
return status;
|
||||
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
|
||||
index b4a632a..932abaa 100644
|
||||
--- a/drivers/video/efifb.c
|
||||
+++ b/drivers/video/efifb.c
|
||||
@@ -553,7 +553,9 @@ static int __init efifb_init(void)
|
||||
int ret;
|
||||
char *option = NULL;
|
||||
|
||||
- dmi_check_system(dmi_system_table);
|
||||
+ if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI ||
|
||||
+ !(screen_info.capabilities & VIDEO_CAPABILITY_SKIP_QUIRKS))
|
||||
+ dmi_check_system(dmi_system_table);
|
||||
|
||||
if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
|
||||
return -ENODEV;
|
||||
diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h
|
||||
index 899fbb4..fb3c5a8 100644
|
||||
--- a/include/linux/screen_info.h
|
||||
+++ b/include/linux/screen_info.h
|
||||
@@ -68,6 +68,8 @@ struct screen_info {
|
||||
|
||||
#define VIDEO_FLAGS_NOCURSOR (1 << 0) /* The video mode has no cursor set */
|
||||
|
||||
+#define VIDEO_CAPABILITY_SKIP_QUIRKS (1 << 0)
|
||||
+
|
||||
#ifdef __KERNEL__
|
||||
extern struct screen_info screen_info;
|
||||
|
||||
--
|
||||
1.7.12.1
|
||||
|
@ -0,0 +1,43 @@
|
||||
From e9b10953edbccd3744e039ffc060ab2692f17856 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <mjg@redhat.com>
|
||||
Date: Fri, 27 Jul 2012 17:20:49 -0400
|
||||
Subject: [PATCH 2/2] x86, EFI: Calculate the EFI framebuffer size instead of
|
||||
trusting the firmware
|
||||
|
||||
Seth Forshee reported that his system was reporting that the EFI framebuffer
|
||||
stretched from 0x90010000-0xb0010000 despite the GPU's BAR only covering
|
||||
0x90000000-0x9ffffff. It's safer to calculate this value from the pixel
|
||||
stride and screen height (values we already depend on) rather than face
|
||||
potential problems with resource allocation later on.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
Tested-by: Seth Forshee <seth.forshee@canonical.com>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
arch/x86/boot/compressed/eboot.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index bbd83b9..c760e07 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -331,7 +331,6 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto,
|
||||
si->lfb_width = width;
|
||||
si->lfb_height = height;
|
||||
si->lfb_base = fb_base;
|
||||
- si->lfb_size = fb_size;
|
||||
si->pages = 1;
|
||||
|
||||
if (pixel_format == PIXEL_RGB_RESERVED_8BIT_PER_COLOR) {
|
||||
@@ -379,6 +378,8 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto,
|
||||
si->rsvd_pos = 0;
|
||||
}
|
||||
|
||||
+ si->lfb_size = si->lfb_linelength * si->lfb_height;
|
||||
+
|
||||
si->capabilities |= VIDEO_CAPABILITY_SKIP_QUIRKS;
|
||||
|
||||
free_handle:
|
||||
--
|
||||
1.7.12.1
|
||||
|
@ -732,6 +732,9 @@ Patch14010: lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
Patch19001: i82975x-edac-fix.patch
|
||||
|
||||
Patch20000: 0001-efifb-Skip-DMI-checks-if-the-bootloader-knows-what-i.patch
|
||||
Patch20001: 0002-x86-EFI-Calculate-the-EFI-framebuffer-size-instead-o.patch
|
||||
|
||||
# ARM
|
||||
Patch21000: arm-read_current_timer.patch
|
||||
Patch21001: arm-fix-omapdrm.patch
|
||||
@ -1485,6 +1488,9 @@ ApplyPatch lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
ApplyPatch i82975x-edac-fix.patch
|
||||
|
||||
ApplyPatch 0001-efifb-Skip-DMI-checks-if-the-bootloader-knows-what-i.patch
|
||||
ApplyPatch 0002-x86-EFI-Calculate-the-EFI-framebuffer-size-instead-o.patch
|
||||
|
||||
#rhbz 754518
|
||||
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
@ -2372,6 +2378,9 @@ fi
|
||||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Mon Nov 05 2012 David Woodhouse <David.Woodhouse@intel.com> - 3.6.5-3
|
||||
- Fix EFI framebuffer handling
|
||||
|
||||
* Wed Oct 31 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.5-2
|
||||
- Update modsign to what is currently in 3.7-rc2
|
||||
- Update secure boot support for UEFI cert importing.
|
||||
|
Loading…
Reference in New Issue
Block a user