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...@gmail.com>
Reviewed-by: Simon Glass <s...@chromium.org>
---

Changes in v3: None
Changes in v2: None

 arch/x86/lib/e820.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

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) */
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to