]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: e820: use the lmb API for adding RAM memory
authorSughosh Ganu <sughosh.ganu@linaro.org>
Tue, 15 Oct 2024 15:37:13 +0000 (21:07 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 15 Oct 2024 19:45:30 +0000 (13:45 -0600)
The EFI_CONVENTIONAL_MEMORY type is now being managed through the LMB
module. Add a separate function, lmb_arch_add_memory() to add the RAM
memory to the LMB memory map. The efi_add_known_memory() function is
now used for adding any other memory type to the EFI memory map.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
arch/x86/lib/e820.c
lib/Kconfig

index 122b4f7ca01b61b15bfb4b1e20507652911fd59e..d478b7486e330cb261f1276119ac8c72e9a07a6f 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <efi_loader.h>
+#include <lmb.h>
 #include <asm/e820.h>
 #include <asm/global_data.h>
 
@@ -41,15 +42,11 @@ void efi_add_known_memory(void)
 {
        struct e820_entry e820[E820MAX];
        unsigned int i, num;
-       u64 start, ram_top;
+       u64 start;
        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;
 
@@ -72,13 +69,41 @@ void efi_add_known_memory(void)
                        break;
                }
 
-               if (type == EFI_CONVENTIONAL_MEMORY) {
-                       efi_add_conventional_memory_map(start,
-                                                       start + e820[i].size,
-                                                       ram_top);
-               } else {
+               if (type != EFI_CONVENTIONAL_MEMORY)
                        efi_add_memory_map(start, e820[i].size, type);
-               }
        }
 }
 #endif /* CONFIG_IS_ENABLED(EFI_LOADER) */
+
+#if CONFIG_IS_ENABLED(LMB_ARCH_MEM_MAP)
+void lmb_arch_add_memory(void)
+{
+       struct e820_entry e820[E820MAX];
+       unsigned int i, num;
+       u64 ram_top;
+
+       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) {
+               if (e820[i].type == E820_RAM) {
+                       u64 start, size, rgn_top;
+
+                       start = e820[i].addr;
+                       size = e820[i].size;
+                       rgn_top = start + size;
+
+                       if (start > ram_top)
+                               continue;
+
+                       if (rgn_top > ram_top)
+                               size -= rgn_top - ram_top;
+
+                       lmb_add(start, size);
+               }
+       }
+}
+#endif /* CONFIG_IS_ENABLED(LMB_ARCH_MEM_MAP) */
index b6b8b8d9c29af9472628c59d13bdffd7db3382d5..fc2db747dcc550105d901126ec9e0920ad36afc9 100644 (file)
@@ -1122,7 +1122,7 @@ config SPL_LMB
 config LMB_ARCH_MEM_MAP
        bool "Add an architecture specific memory map"
        depends on LMB
-       default y if FSL_LAYERSCAPE
+       default y if FSL_LAYERSCAPE || X86
        help
          Some architectures have special or unique aspects which need
          consideration when adding memory ranges to the list of available