aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/include/asm/efi.h
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>2015-01-22 10:01:40 +0000
committerCatalin Marinas <catalin.marinas@arm.com>2015-01-22 14:59:25 +0000
commit60305db9884515ca063474e262b454f6da04e4e2 (patch)
treecbf4480285dd0e7fc8d13780bac7b50678dbf714 /arch/arm64/include/asm/efi.h
parentarm64: add better page protections to arm64 (diff)
downloadlinux-dev-60305db9884515ca063474e262b454f6da04e4e2.tar.xz
linux-dev-60305db9884515ca063474e262b454f6da04e4e2.zip
arm64/efi: move virtmap init to early initcall
Now that the create_mapping() code in mm/mmu.c is able to support setting up kernel page tables at initcall time, we can move the whole virtmap creation to arm64_enable_runtime_services() instead of having a distinct stage during early boot. This also allows us to drop the arm64-specific EFI_VIRTMAP flag. Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/include/asm/efi.h')
-rw-r--r--arch/arm64/include/asm/efi.h18
1 files changed, 5 insertions, 13 deletions
diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h
index 7baf2cc04e1e..ef572206f1c3 100644
--- a/arch/arm64/include/asm/efi.h
+++ b/arch/arm64/include/asm/efi.h
@@ -6,10 +6,8 @@
#ifdef CONFIG_EFI
extern void efi_init(void);
-extern void efi_virtmap_init(void);
#else
#define efi_init()
-#define efi_virtmap_init()
#endif
#define efi_call_virt(f, ...) \
@@ -53,23 +51,17 @@ extern void efi_virtmap_init(void);
#define EFI_ALLOC_ALIGN SZ_64K
/*
- * On ARM systems, virtually remapped UEFI runtime services are set up in three
+ * On ARM systems, virtually remapped UEFI runtime services are set up in two
* distinct stages:
* - The stub retrieves the final version of the memory map from UEFI, populates
* the virt_addr fields and calls the SetVirtualAddressMap() [SVAM] runtime
* service to communicate the new mapping to the firmware (Note that the new
* mapping is not live at this time)
- * - During early boot, the page tables are allocated and populated based on the
- * virt_addr fields in the memory map, but only if all descriptors with the
- * EFI_MEMORY_RUNTIME attribute have a non-zero value for virt_addr. If this
- * succeeds, the EFI_VIRTMAP flag is set to indicate that the virtual mappings
- * have been installed successfully.
- * - During an early initcall(), the UEFI Runtime Services are enabled and the
- * EFI_RUNTIME_SERVICES bit set if some conditions are met, i.e., we need a
- * non-early mapping of the UEFI system table, and we need to have the virtmap
- * installed.
+ * - During an early initcall(), the EFI system table is permanently remapped
+ * and the virtual remapping of the UEFI Runtime Services regions is loaded
+ * into a private set of page tables. If this all succeeds, the Runtime
+ * Services are enabled and the EFI_RUNTIME_SERVICES bit set.
*/
-#define EFI_VIRTMAP EFI_ARCH_1
void efi_virtmap_load(void);
void efi_virtmap_unload(void);