aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2018-07-22 21:57:30 -0400
committerWill Deacon <will.deacon@arm.com>2018-07-23 10:33:18 -0400
commit3ea86495aef2f6de26b7cb1599ba350dd6a0c521 (patch)
tree9b74cb231baf0358ab06ce4afc7e40e24043bbb4
parent5bcd44083a082f314032969cd6db1eb8275ac77a (diff)
efi/arm: preserve early mapping of UEFI memory map longer for BGRT
The BGRT code validates the contents of the table against the UEFI memory map, and so it expects it to be mapped when the code runs. On ARM, this is currently not the case, since we tear down the early mapping after efi_init() completes, and only create the permanent mapping in arm_enable_runtime_services(), which executes as an early initcall, but still leaves a window where the UEFI memory map is not mapped. So move the call to efi_memmap_unmap() from efi_init() to arm_enable_runtime_services(). Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> [will: fold in EFI_MEMMAP attribute check from Ard] Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--drivers/firmware/efi/arm-init.c1
-rw-r--r--drivers/firmware/efi/arm-runtime.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
index b5214c143fee..388a929baf95 100644
--- a/drivers/firmware/efi/arm-init.c
+++ b/drivers/firmware/efi/arm-init.c
@@ -259,7 +259,6 @@ void __init efi_init(void)
259 259
260 reserve_regions(); 260 reserve_regions();
261 efi_esrt_init(); 261 efi_esrt_init();
262 efi_memmap_unmap();
263 262
264 memblock_reserve(params.mmap & PAGE_MASK, 263 memblock_reserve(params.mmap & PAGE_MASK,
265 PAGE_ALIGN(params.mmap_size + 264 PAGE_ALIGN(params.mmap_size +
diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c
index 5889cbea60b8..4712445c3213 100644
--- a/drivers/firmware/efi/arm-runtime.c
+++ b/drivers/firmware/efi/arm-runtime.c
@@ -110,11 +110,13 @@ static int __init arm_enable_runtime_services(void)
110{ 110{
111 u64 mapsize; 111 u64 mapsize;
112 112
113 if (!efi_enabled(EFI_BOOT)) { 113 if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
114 pr_info("EFI services will not be available.\n"); 114 pr_info("EFI services will not be available.\n");
115 return 0; 115 return 0;
116 } 116 }
117 117
118 efi_memmap_unmap();
119
118 if (efi_runtime_disabled()) { 120 if (efi_runtime_disabled()) {
119 pr_info("EFI runtime services will be disabled.\n"); 121 pr_info("EFI runtime services will be disabled.\n");
120 return 0; 122 return 0;