aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2018-06-27 20:38:01 -0700
committerBin Meng <bmeng.cn@gmail.com>2018-07-02 09:23:28 +0800
commitabe47ca728f5b22d1ec9fcf609e00b331c4d5273 (patch)
tree2598d753ea1931a7d196da378f363712ed1a44d3 /arch/x86/lib
parent8199a145c40791f0bc272fc016494028cf250195 (diff)
downloadu-boot-abe47ca728f5b22d1ec9fcf609e00b331c4d5273.zip
u-boot-abe47ca728f5b22d1ec9fcf609e00b331c4d5273.tar.gz
u-boot-abe47ca728f5b22d1ec9fcf609e00b331c4d5273.tar.bz2
x86: efi_loader: Build EFI memory map per E820 table
On x86 traditional E820 table is used to pass the memory information to kernel. With EFI loader we can build the EFI memory map from it. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r--arch/x86/lib/e820.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/x86/lib/e820.c b/arch/x86/lib/e820.c
index 9a9ec99..8b34f67 100644
--- a/arch/x86/lib/e820.c
+++ b/arch/x86/lib/e820.c
@@ -4,6 +4,7 @@
*/
#include <common.h>
+#include <efi_loader.h>
#include <asm/e820.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -34,3 +35,41 @@ __weak unsigned int install_e820_map(unsigned int max_entries,
return 4;
}
+
+#if defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)
+void efi_add_known_memory(void)
+{
+ struct e820_entry e820[E820MAX];
+ unsigned int i, num;
+ u64 start, pages;
+ int type;
+
+ num = install_e820_map(ARRAY_SIZE(e820), e820);
+
+ for (i = 0; i < num; ++i) {
+ start = e820[i].addr;
+ pages = ALIGN(e820[i].size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT;
+
+ switch (e820[i].type) {
+ case E820_RAM:
+ type = EFI_CONVENTIONAL_MEMORY;
+ break;
+ case E820_RESERVED:
+ type = EFI_RESERVED_MEMORY_TYPE;
+ break;
+ case E820_ACPI:
+ type = EFI_ACPI_RECLAIM_MEMORY;
+ break;
+ case E820_NVS:
+ type = EFI_ACPI_MEMORY_NVS;
+ break;
+ case E820_UNUSABLE:
+ default:
+ type = EFI_UNUSABLE_MEMORY;
+ break;
+ }
+
+ efi_add_memory_map(start, pages, type, false);
+ }
+}
+#endif /* defined(EFI_LOADER) && !defined(CONFIG_SPL_BUILD) */