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.g...@linaro.org>
---
Changes since V1:
* Move the initr_lmb() function to board_r.c
* Call lmb_init() from spl.c instead of initr_lmb().

 common/board_r.c | 17 +++++++++++++++++
 common/spl/spl.c |  3 +++
 2 files changed, 20 insertions(+)

diff --git a/common/board_r.c b/common/board_r.c
index f445803d7a..0943ed3d01 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>
@@ -510,6 +511,21 @@ int initr_mem(void)
 }
 #endif
 
+static int initr_lmb(void)
+{
+#if CONFIG_IS_ENABLED(LMB)
+       int ret;
+
+       ret = lmb_init();
+       if (ret)
+               printf("Unable to initialise the LMB data structures\n");
+
+       return ret;
+#else
+       return 0;
+#endif
+}
+
 static int dm_announce(void)
 {
        int device_count;
@@ -612,6 +628,7 @@ static init_fnc_t init_sequence_r[] = {
 #ifdef CONFIG_CLOCKS
        set_cpu_clk_info, /* Setup clock information */
 #endif
+       initr_lmb,
 #ifdef CONFIG_EFI_LOADER
        efi_memory_init,
 #endif
diff --git a/common/spl/spl.c b/common/spl/spl.c
index d6a364de6e..4102e25115 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))
+               lmb_init();
+
        if (CONFIG_IS_ENABLED(PCI) && !(gd->flags & GD_FLG_DM_DEAD)) {
                ret = pci_init();
                if (ret)
-- 
2.34.1

Reply via email to