projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'efi-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi...
[firefly-linux-kernel-4.4.55.git]
/
arch
/
x86
/
boot
/
compressed
/
eboot.c
diff --git
a/arch/x86/boot/compressed/eboot.c
b/arch/x86/boot/compressed/eboot.c
index db51c1f27446157001cedc87bdd38b551e2f1844..583d539a41977a2c7397b9fd38e0839d3c41dbb9 100644
(file)
--- a/
arch/x86/boot/compressed/eboot.c
+++ b/
arch/x86/boot/compressed/eboot.c
@@
-624,7
+624,7
@@
setup_pixel_info(struct screen_info *si, u32 pixels_per_scan_line,
static efi_status_t
__gop_query32(struct efi_graphics_output_protocol_32 *gop32,
struct efi_graphics_output_mode_info **info,
static efi_status_t
__gop_query32(struct efi_graphics_output_protocol_32 *gop32,
struct efi_graphics_output_mode_info **info,
- unsigned long *size, u
32
*fb_base)
+ unsigned long *size, u
64
*fb_base)
{
struct efi_graphics_output_protocol_mode_32 *mode;
efi_status_t status;
{
struct efi_graphics_output_protocol_mode_32 *mode;
efi_status_t status;
@@
-650,7
+650,8
@@
setup_gop32(struct screen_info *si, efi_guid_t *proto,
unsigned long nr_gops;
u16 width, height;
u32 pixels_per_scan_line;
unsigned long nr_gops;
u16 width, height;
u32 pixels_per_scan_line;
- u32 fb_base;
+ u32 ext_lfb_base;
+ u64 fb_base;
struct efi_pixel_bitmask pixel_info;
int pixel_format;
efi_status_t status;
struct efi_pixel_bitmask pixel_info;
int pixel_format;
efi_status_t status;
@@
-667,7
+668,7
@@
setup_gop32(struct screen_info *si, efi_guid_t *proto,
bool conout_found = false;
void *dummy = NULL;
u32 h = handles[i];
bool conout_found = false;
void *dummy = NULL;
u32 h = handles[i];
- u
32
current_fb_base;
+ u
64
current_fb_base;
status = efi_call_early(handle_protocol, h,
proto, (void **)&gop32);
status = efi_call_early(handle_protocol, h,
proto, (void **)&gop32);
@@
-715,6
+716,13
@@
setup_gop32(struct screen_info *si, efi_guid_t *proto,
si->lfb_width = width;
si->lfb_height = height;
si->lfb_base = fb_base;
si->lfb_width = width;
si->lfb_height = height;
si->lfb_base = fb_base;
+
+ ext_lfb_base = (u64)(unsigned long)fb_base >> 32;
+ if (ext_lfb_base) {
+ si->capabilities |= VIDEO_CAPABILITY_64BIT_BASE;
+ si->ext_lfb_base = ext_lfb_base;
+ }
+
si->pages = 1;
setup_pixel_info(si, pixels_per_scan_line, pixel_info, pixel_format);
si->pages = 1;
setup_pixel_info(si, pixels_per_scan_line, pixel_info, pixel_format);
@@
-729,7
+737,7
@@
out:
static efi_status_t
__gop_query64(struct efi_graphics_output_protocol_64 *gop64,
struct efi_graphics_output_mode_info **info,
static efi_status_t
__gop_query64(struct efi_graphics_output_protocol_64 *gop64,
struct efi_graphics_output_mode_info **info,
- unsigned long *size, u
32
*fb_base)
+ unsigned long *size, u
64
*fb_base)
{
struct efi_graphics_output_protocol_mode_64 *mode;
efi_status_t status;
{
struct efi_graphics_output_protocol_mode_64 *mode;
efi_status_t status;
@@
-755,7
+763,8
@@
setup_gop64(struct screen_info *si, efi_guid_t *proto,
unsigned long nr_gops;
u16 width, height;
u32 pixels_per_scan_line;
unsigned long nr_gops;
u16 width, height;
u32 pixels_per_scan_line;
- u32 fb_base;
+ u32 ext_lfb_base;
+ u64 fb_base;
struct efi_pixel_bitmask pixel_info;
int pixel_format;
efi_status_t status;
struct efi_pixel_bitmask pixel_info;
int pixel_format;
efi_status_t status;
@@
-772,7
+781,7
@@
setup_gop64(struct screen_info *si, efi_guid_t *proto,
bool conout_found = false;
void *dummy = NULL;
u64 h = handles[i];
bool conout_found = false;
void *dummy = NULL;
u64 h = handles[i];
- u
32
current_fb_base;
+ u
64
current_fb_base;
status = efi_call_early(handle_protocol, h,
proto, (void **)&gop64);
status = efi_call_early(handle_protocol, h,
proto, (void **)&gop64);
@@
-820,6
+829,13
@@
setup_gop64(struct screen_info *si, efi_guid_t *proto,
si->lfb_width = width;
si->lfb_height = height;
si->lfb_base = fb_base;
si->lfb_width = width;
si->lfb_height = height;
si->lfb_base = fb_base;
+
+ ext_lfb_base = (u64)(unsigned long)fb_base >> 32;
+ if (ext_lfb_base) {
+ si->capabilities |= VIDEO_CAPABILITY_64BIT_BASE;
+ si->ext_lfb_base = ext_lfb_base;
+ }
+
si->pages = 1;
setup_pixel_info(si, pixels_per_scan_line, pixel_info, pixel_format);
si->pages = 1;
setup_pixel_info(si, pixels_per_scan_line, pixel_info, pixel_format);