|
@@ -19,6 +19,7 @@
|
|
|
#include <linux/mm_types.h>
|
|
|
#include <linux/of.h>
|
|
|
#include <linux/of_fdt.h>
|
|
|
+#include <linux/platform_device.h>
|
|
|
#include <linux/screen_info.h>
|
|
|
|
|
|
#include <asm/efi.h>
|
|
@@ -78,6 +79,10 @@ static void __init init_screen_info(void)
|
|
|
screen_info.orig_video_cols = 80;
|
|
|
screen_info.orig_video_lines = 25;
|
|
|
}
|
|
|
+
|
|
|
+ if (screen_info.orig_video_isVGA == VIDEO_TYPE_EFI &&
|
|
|
+ memblock_is_map_memory(screen_info.lfb_base))
|
|
|
+ memblock_mark_nomap(screen_info.lfb_base, screen_info.lfb_size);
|
|
|
}
|
|
|
|
|
|
static int __init uefi_init(void)
|
|
@@ -256,3 +261,16 @@ void __init efi_init(void)
|
|
|
|
|
|
init_screen_info();
|
|
|
}
|
|
|
+
|
|
|
+static int __init register_gop_device(void)
|
|
|
+{
|
|
|
+ void *pd;
|
|
|
+
|
|
|
+ if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ pd = platform_device_register_data(NULL, "efi-framebuffer", 0,
|
|
|
+ &screen_info, sizeof(screen_info));
|
|
|
+ return PTR_ERR_OR_ZERO(pd);
|
|
|
+}
|
|
|
+subsys_initcall(register_gop_device);
|