@@ -22,6 +22,7 @@
#include <hang.h>
#include <image.h>
#include <irq_func.h>
+#include <lmb.h>
#include <log.h>
#include <net.h>
#include <asm/cache.h>
@@ -555,6 +556,17 @@ static int run_main_loop(void)
return 0;
}
+#if defined(CONFIG_LMB)
+static int initr_lmb(void)
+{
+ lmb_reserve_common((void *)gd->fdt_blob);
+
+ lmb_add_memory(gd->bd);
+
+ return 0;
+}
+#endif
+
/*
* Over time we hope to remove these functions with code fragments and
* stub functions, and instead call the relevant function directly.
@@ -613,6 +625,9 @@ static init_fnc_t init_sequence_r[] = {
#endif
#ifdef CONFIG_EFI_LOADER
efi_memory_init,
+#endif
+#if defined(CONFIG_LMB)
+ initr_lmb,
#endif
initr_binman,
#ifdef CONFIG_FSP_VERSION2
@@ -125,6 +125,20 @@ void board_lmb_reserve(void);
void arch_lmb_reserve(void);
void arch_lmb_reserve_generic(ulong sp, ulong end, ulong align);
+/**
+ * lmb_reserve_common() - Reserve memory region occupied by U-Boot image
+ * @fdt_blob: pointer to the FDT blob
+ *
+ * Reserve common areas of memory that are occupied by the U-Boot image.
+ * This function gets called once U-Boot has been relocated, so that any
+ * request for memory allocations would not touch memory region occupied
+ * by the U-Boot image, heap, bss etc.
+ *
+ * Return: None
+ *
+ */
+void lmb_reserve_common(void *fdt_blob);
+
#endif /* __KERNEL__ */
#endif /* _LINUX_LMB_H */
@@ -216,7 +216,19 @@ static __maybe_unused int efi_lmb_reserve(void)
return 0;
}
-static void lmb_reserve_common(void *fdt_blob)
+/**
+ * lmb_reserve_common() - Reserve memory region occupied by U-Boot image
+ * @fdt_blob: pointer to the FDT blob
+ *
+ * Reserve common areas of memory that are occupied by the U-Boot image.
+ * This function gets called once U-Boot has been relocated, so that any
+ * request for memory allocations would not touch memory region occupied
+ * by the U-Boot image, heap, bss etc.
+ *
+ * Return: None
+ *
+ */
+void lmb_reserve_common(void *fdt_blob)
{
arch_lmb_reserve();
board_lmb_reserve();
The LMB module provides API's for allocating chunks of memory. The LMB module should not be allocating memory regions that are in use, or that might be occupied by the U-Boot image. Prevent allocations of memory areas used by the U-Boot image by reserving these regions once U-Boot has been relocated. Also add the rest of the memory that is available for allocations to the LMB's memory map. Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org> --- common/board_r.c | 15 +++++++++++++++ include/lmb.h | 14 ++++++++++++++ lib/lmb.c | 14 +++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-)