arm: mach-k3: Enable dcache in SPL
[oweals/u-boot.git] / arch / x86 / lib / e820.c
index c2595b1e61c4472a64370949746da57911ccbc13..1f20c5c8c6bbf87f31d19bba1849518e4304e632 100644 (file)
@@ -1,10 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
+#include <efi_loader.h>
 #include <asm/e820.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -18,7 +18,7 @@ DECLARE_GLOBAL_DATA_PTR;
  *     CONFIG_PCIE_ECAM_BASE   PCIe ECAM
  */
 __weak unsigned int install_e820_map(unsigned int max_entries,
-                                    struct e820entry *entries)
+                                    struct e820_entry *entries)
 {
        entries[0].addr = 0;
        entries[0].size = ISA_START_ADDRESS;
@@ -35,3 +35,50 @@ __weak unsigned int install_e820_map(unsigned int max_entries,
 
        return 4;
 }
+
+#if CONFIG_IS_ENABLED(EFI_LOADER)
+void efi_add_known_memory(void)
+{
+       struct e820_entry e820[E820MAX];
+       unsigned int i, num;
+       u64 start, ram_top;
+       int type;
+
+       num = install_e820_map(ARRAY_SIZE(e820), e820);
+
+       ram_top = (u64)gd->ram_top & ~EFI_PAGE_MASK;
+       if (!ram_top)
+               ram_top = 0x100000000ULL;
+
+       for (i = 0; i < num; ++i) {
+               start = e820[i].addr;
+
+               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;
+               }
+
+               if (type == EFI_CONVENTIONAL_MEMORY) {
+                       efi_add_conventional_memory_map(start,
+                                                       start + e820[i].size,
+                                                       ram_top);
+               } else {
+                       efi_add_memory_map(start, e820[i].size, type);
+               }
+       }
+}
+#endif /* CONFIG_IS_ENABLED(EFI_LOADER) */