diff options
Diffstat (limited to 'arch/arm64/kernel/efi.c')
-rw-r--r-- | arch/arm64/kernel/efi.c | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 95c49ebc660d..6fac253bc783 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c | |||
@@ -11,6 +11,7 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/dmi.h> | ||
14 | #include <linux/efi.h> | 15 | #include <linux/efi.h> |
15 | #include <linux/export.h> | 16 | #include <linux/export.h> |
16 | #include <linux/memblock.h> | 17 | #include <linux/memblock.h> |
@@ -112,8 +113,6 @@ static int __init uefi_init(void) | |||
112 | efi.systab->hdr.revision & 0xffff, vendor); | 113 | efi.systab->hdr.revision & 0xffff, vendor); |
113 | 114 | ||
114 | retval = efi_config_init(NULL); | 115 | retval = efi_config_init(NULL); |
115 | if (retval == 0) | ||
116 | set_bit(EFI_CONFIG_TABLES, &efi.flags); | ||
117 | 116 | ||
118 | out: | 117 | out: |
119 | early_memunmap(efi.systab, sizeof(efi_system_table_t)); | 118 | early_memunmap(efi.systab, sizeof(efi_system_table_t)); |
@@ -125,17 +124,17 @@ out: | |||
125 | */ | 124 | */ |
126 | static __init int is_reserve_region(efi_memory_desc_t *md) | 125 | static __init int is_reserve_region(efi_memory_desc_t *md) |
127 | { | 126 | { |
128 | if (!is_normal_ram(md)) | 127 | switch (md->type) { |
128 | case EFI_LOADER_CODE: | ||
129 | case EFI_LOADER_DATA: | ||
130 | case EFI_BOOT_SERVICES_CODE: | ||
131 | case EFI_BOOT_SERVICES_DATA: | ||
132 | case EFI_CONVENTIONAL_MEMORY: | ||
129 | return 0; | 133 | return 0; |
130 | 134 | default: | |
131 | if (md->attribute & EFI_MEMORY_RUNTIME) | 135 | break; |
132 | return 1; | 136 | } |
133 | 137 | return is_normal_ram(md); | |
134 | if (md->type == EFI_ACPI_RECLAIM_MEMORY || | ||
135 | md->type == EFI_RESERVED_TYPE) | ||
136 | return 1; | ||
137 | |||
138 | return 0; | ||
139 | } | 138 | } |
140 | 139 | ||
141 | static __init void reserve_regions(void) | 140 | static __init void reserve_regions(void) |
@@ -471,3 +470,17 @@ err_unmap: | |||
471 | return -1; | 470 | return -1; |
472 | } | 471 | } |
473 | early_initcall(arm64_enter_virtual_mode); | 472 | early_initcall(arm64_enter_virtual_mode); |
473 | |||
474 | static int __init arm64_dmi_init(void) | ||
475 | { | ||
476 | /* | ||
477 | * On arm64, DMI depends on UEFI, and dmi_scan_machine() needs to | ||
478 | * be called early because dmi_id_init(), which is an arch_initcall | ||
479 | * itself, depends on dmi_scan_machine() having been called already. | ||
480 | */ | ||
481 | dmi_scan_machine(); | ||
482 | if (dmi_available) | ||
483 | dmi_set_dump_stack_arch_desc(); | ||
484 | return 0; | ||
485 | } | ||
486 | core_initcall(arm64_dmi_init); | ||