Loading arch/x86/boot/compressed/Makefile +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ $(obj)/piggy.o $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone $(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone ifeq ($(CONFIG_EFI_STUB), y) VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o endif Loading arch/x86/boot/compressed/eboot.c +20 −14 Original line number Diff line number Diff line Loading @@ -276,8 +276,9 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, nr_gops = size / sizeof(void *); for (i = 0; i < nr_gops; i++) { struct efi_graphics_output_mode_info *info; efi_guid_t pciio_proto = EFI_PCI_IO_PROTOCOL_GUID; void *pciio; efi_guid_t conout_proto = EFI_CONSOLE_OUT_DEVICE_GUID; bool conout_found = false; void *dummy; void *h = gop_handle[i]; status = efi_call_phys3(sys_table->boottime->handle_protocol, Loading @@ -285,19 +286,21 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, if (status != EFI_SUCCESS) continue; efi_call_phys3(sys_table->boottime->handle_protocol, h, &pciio_proto, &pciio); status = efi_call_phys3(sys_table->boottime->handle_protocol, h, &conout_proto, &dummy); if (status == EFI_SUCCESS) conout_found = true; status = efi_call_phys4(gop->query_mode, gop, gop->mode->mode, &size, &info); if (status == EFI_SUCCESS && (!first_gop || pciio)) { if (status == EFI_SUCCESS && (!first_gop || conout_found)) { /* * Apple provide GOPs that are not backed by * real hardware (they're used to handle * multiple displays). The workaround is to * search for a GOP implementing the PCIIO * protocol, and if one isn't found, to just * fallback to the first GOP. * Systems that use the UEFI Console Splitter may * provide multiple GOP devices, not all of which are * backed by real hardware. The workaround is to search * for a GOP implementing the ConOut protocol, and if * one isn't found, to just fall back to the first GOP. */ width = info->horizontal_resolution; height = info->vertical_resolution; Loading @@ -308,10 +311,10 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, pixels_per_scan_line = info->pixels_per_scan_line; /* * Once we've found a GOP supporting PCIIO, * Once we've found a GOP supporting ConOut, * don't bother looking any further. */ if (pciio) if (conout_found) break; first_gop = gop; Loading @@ -328,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) { Loading Loading @@ -376,6 +378,10 @@ 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: efi_call_phys1(sys_table->boottime->free_pool, gop_handle); return status; Loading arch/x86/boot/compressed/eboot.h +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) #define EFI_READ_CHUNK_SIZE (1024 * 1024) #define EFI_CONSOLE_OUT_DEVICE_GUID \ EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x0, 0x90, 0x27, \ 0x3f, 0xc1, 0x4d) #define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0 #define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1 #define PIXEL_BIT_MASK 2 Loading arch/x86/platform/efi/efi.c +1 −0 Original line number Diff line number Diff line Loading @@ -890,6 +890,7 @@ void __init efi_enter_virtual_mode(void) * * Call EFI services through wrapper functions. */ efi.runtime_version = efi_systab.fw_revision; efi.get_time = virt_efi_get_time; efi.set_time = virt_efi_set_time; efi.get_wakeup_time = virt_efi_get_wakeup_time; Loading drivers/video/efifb.c +3 −1 Original line number Diff line number Diff line Loading @@ -553,6 +553,8 @@ static int __init efifb_init(void) int ret; char *option = NULL; 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) Loading Loading
arch/x86/boot/compressed/Makefile +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ $(obj)/piggy.o $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone $(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone ifeq ($(CONFIG_EFI_STUB), y) VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o endif Loading
arch/x86/boot/compressed/eboot.c +20 −14 Original line number Diff line number Diff line Loading @@ -276,8 +276,9 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, nr_gops = size / sizeof(void *); for (i = 0; i < nr_gops; i++) { struct efi_graphics_output_mode_info *info; efi_guid_t pciio_proto = EFI_PCI_IO_PROTOCOL_GUID; void *pciio; efi_guid_t conout_proto = EFI_CONSOLE_OUT_DEVICE_GUID; bool conout_found = false; void *dummy; void *h = gop_handle[i]; status = efi_call_phys3(sys_table->boottime->handle_protocol, Loading @@ -285,19 +286,21 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, if (status != EFI_SUCCESS) continue; efi_call_phys3(sys_table->boottime->handle_protocol, h, &pciio_proto, &pciio); status = efi_call_phys3(sys_table->boottime->handle_protocol, h, &conout_proto, &dummy); if (status == EFI_SUCCESS) conout_found = true; status = efi_call_phys4(gop->query_mode, gop, gop->mode->mode, &size, &info); if (status == EFI_SUCCESS && (!first_gop || pciio)) { if (status == EFI_SUCCESS && (!first_gop || conout_found)) { /* * Apple provide GOPs that are not backed by * real hardware (they're used to handle * multiple displays). The workaround is to * search for a GOP implementing the PCIIO * protocol, and if one isn't found, to just * fallback to the first GOP. * Systems that use the UEFI Console Splitter may * provide multiple GOP devices, not all of which are * backed by real hardware. The workaround is to search * for a GOP implementing the ConOut protocol, and if * one isn't found, to just fall back to the first GOP. */ width = info->horizontal_resolution; height = info->vertical_resolution; Loading @@ -308,10 +311,10 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, pixels_per_scan_line = info->pixels_per_scan_line; /* * Once we've found a GOP supporting PCIIO, * Once we've found a GOP supporting ConOut, * don't bother looking any further. */ if (pciio) if (conout_found) break; first_gop = gop; Loading @@ -328,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) { Loading Loading @@ -376,6 +378,10 @@ 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: efi_call_phys1(sys_table->boottime->free_pool, gop_handle); return status; Loading
arch/x86/boot/compressed/eboot.h +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) #define EFI_READ_CHUNK_SIZE (1024 * 1024) #define EFI_CONSOLE_OUT_DEVICE_GUID \ EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x0, 0x90, 0x27, \ 0x3f, 0xc1, 0x4d) #define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0 #define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1 #define PIXEL_BIT_MASK 2 Loading
arch/x86/platform/efi/efi.c +1 −0 Original line number Diff line number Diff line Loading @@ -890,6 +890,7 @@ void __init efi_enter_virtual_mode(void) * * Call EFI services through wrapper functions. */ efi.runtime_version = efi_systab.fw_revision; efi.get_time = virt_efi_get_time; efi.set_time = virt_efi_set_time; efi.get_wakeup_time = virt_efi_get_wakeup_time; Loading
drivers/video/efifb.c +3 −1 Original line number Diff line number Diff line Loading @@ -553,6 +553,8 @@ static int __init efifb_init(void) int ret; char *option = NULL; 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) Loading