[PATCH 22/40] lmb: init: initialise the lmb data structures during board init

Sughosh Ganu sughosh.ganu at linaro.org
Wed Jul 24 08:02:06 CEST 2024


The memory map maintained by the LMB module is now persistent and
global. This memory map is being maintained through the alloced list
structure which can be extended at runtime -- there is one list for
the available memory, and one for the used memory. Allocate and
initialise these lists during the board init.

Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
---
Changes since rfc: None

 common/board_r.c |  4 ++++
 common/spl/spl.c |  3 +++
 include/lmb.h    | 11 +++++++++++
 lib/lmb.c        | 20 ++++++++++++++++++++
 4 files changed, 38 insertions(+)

diff --git a/common/board_r.c b/common/board_r.c
index d4ba245ac6..eaf9b40ec0 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -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>
@@ -610,6 +611,9 @@ static init_fnc_t init_sequence_r[] = {
 #ifdef CONFIG_CLOCKS
 	set_cpu_clk_info, /* Setup clock information */
 #endif
+#if CONFIG_IS_ENABLED(LMB)
+	initr_lmb,
+#endif
 #ifdef CONFIG_EFI_LOADER
 	efi_memory_init,
 #endif
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 7794ddccad..38ac0608bb 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -723,6 +723,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
 	    IS_ENABLED(CONFIG_SPL_ATF))
 		dram_init_banksize();
 
+	if (IS_ENABLED(CONFIG_SPL_LMB))
+		initr_lmb();
+
 	if (CONFIG_IS_ENABLED(PCI) && !(gd->flags & GD_FLG_DM_DEAD)) {
 		ret = pci_init();
 		if (ret)
diff --git a/include/lmb.h b/include/lmb.h
index 2d8f9a6b71..cc4cf9f3c8 100644
--- a/include/lmb.h
+++ b/include/lmb.h
@@ -37,6 +37,17 @@ struct lmb_region {
 	enum lmb_flags flags;
 };
 
+/**
+ * initr_lmb() - Initialise the LMB lists
+ *
+ * Initialise the LMB lists needed for keeping the memory map. There
+ * are two lists, in form of alloced list data structure. One for the
+ * available memory, and one for the used memory.
+ *
+ * Return: 0 on success, -ve on error
+ */
+int initr_lmb(void);
+
 /**
  * lmb_add_memory() - Add memory range for LMB allocations
  *
diff --git a/lib/lmb.c b/lib/lmb.c
index 5afdfc32fb..5baa5c4c52 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -783,3 +783,23 @@ int lmb_mem_regions_init(void)
 
 	return 0;
 }
+
+/**
+ * initr_lmb() - Initialise the LMB lists
+ *
+ * Initialise the LMB lists needed for keeping the memory map. There
+ * are two lists, in form of alloced list data structure. One for the
+ * available memory, and one for the used memory.
+ *
+ * Return: 0 on success, -ve on error
+ */
+int initr_lmb(void)
+{
+	int ret;
+
+	ret = lmb_mem_regions_init();
+	if (ret)
+		printf("Unable to initialise the LMB data structures\n");
+
+	return ret;
+}
-- 
2.34.1



More information about the U-Boot mailing list