diff options
Diffstat (limited to 'drivers/firmware/efi/arm-init.c')
-rw-r--r-- | drivers/firmware/efi/arm-init.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c index 909d974d35d9..ac95dd8b119f 100644 --- a/drivers/firmware/efi/arm-init.c +++ b/drivers/firmware/efi/arm-init.c | |||
@@ -11,12 +11,15 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #define pr_fmt(fmt) "efi: " fmt | ||
15 | |||
14 | #include <linux/efi.h> | 16 | #include <linux/efi.h> |
15 | #include <linux/init.h> | 17 | #include <linux/init.h> |
16 | #include <linux/memblock.h> | 18 | #include <linux/memblock.h> |
17 | #include <linux/mm_types.h> | 19 | #include <linux/mm_types.h> |
18 | #include <linux/of.h> | 20 | #include <linux/of.h> |
19 | #include <linux/of_fdt.h> | 21 | #include <linux/of_fdt.h> |
22 | #include <linux/screen_info.h> | ||
20 | 23 | ||
21 | #include <asm/efi.h> | 24 | #include <asm/efi.h> |
22 | 25 | ||
@@ -51,6 +54,32 @@ static phys_addr_t efi_to_phys(unsigned long addr) | |||
51 | return addr; | 54 | return addr; |
52 | } | 55 | } |
53 | 56 | ||
57 | static __initdata unsigned long screen_info_table = EFI_INVALID_TABLE_ADDR; | ||
58 | |||
59 | static __initdata efi_config_table_type_t arch_tables[] = { | ||
60 | {LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID, NULL, &screen_info_table}, | ||
61 | {NULL_GUID, NULL, NULL} | ||
62 | }; | ||
63 | |||
64 | static void __init init_screen_info(void) | ||
65 | { | ||
66 | struct screen_info *si; | ||
67 | |||
68 | if (screen_info_table != EFI_INVALID_TABLE_ADDR) { | ||
69 | si = early_memremap_ro(screen_info_table, sizeof(*si)); | ||
70 | if (!si) { | ||
71 | pr_err("Could not map screen_info config table\n"); | ||
72 | return; | ||
73 | } | ||
74 | screen_info = *si; | ||
75 | early_memunmap(si, sizeof(*si)); | ||
76 | |||
77 | /* dummycon on ARM needs non-zero values for columns/lines */ | ||
78 | screen_info.orig_video_cols = 80; | ||
79 | screen_info.orig_video_lines = 25; | ||
80 | } | ||
81 | } | ||
82 | |||
54 | static int __init uefi_init(void) | 83 | static int __init uefi_init(void) |
55 | { | 84 | { |
56 | efi_char16_t *c16; | 85 | efi_char16_t *c16; |
@@ -108,7 +137,8 @@ static int __init uefi_init(void) | |||
108 | goto out; | 137 | goto out; |
109 | } | 138 | } |
110 | retval = efi_config_parse_tables(config_tables, efi.systab->nr_tables, | 139 | retval = efi_config_parse_tables(config_tables, efi.systab->nr_tables, |
111 | sizeof(efi_config_table_t), NULL); | 140 | sizeof(efi_config_table_t), |
141 | arch_tables); | ||
112 | 142 | ||
113 | early_memunmap(config_tables, table_size); | 143 | early_memunmap(config_tables, table_size); |
114 | out: | 144 | out: |
@@ -223,4 +253,6 @@ void __init efi_init(void) | |||
223 | PAGE_ALIGN(params.mmap_size + | 253 | PAGE_ALIGN(params.mmap_size + |
224 | (params.mmap & ~PAGE_MASK))); | 254 | (params.mmap & ~PAGE_MASK))); |
225 | } | 255 | } |
256 | |||
257 | init_screen_info(); | ||
226 | } | 258 | } |