video: meson: keep power domain up after booting
[oweals/u-boot.git] / lib / lmb.c
index 7aff2c248fe2942841d764833f925182aa196e0f..07b9308adf29ff4d5773b8a663ec6e0bdaedd6a9 100644 (file)
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -8,6 +8,7 @@
 
 #include <common.h>
 #include <lmb.h>
+#include <malloc.h>
 
 #define LMB_ALLOC_ANYWHERE     0
 
@@ -98,12 +99,8 @@ void lmb_init(struct lmb *lmb)
        lmb->reserved.size = 0;
 }
 
-/* Initialize the struct, add memory and call arch/board reserve functions */
-void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size,
-                         void *fdt_blob)
+static void lmb_reserve_common(struct lmb *lmb, void *fdt_blob)
 {
-       lmb_init(lmb);
-       lmb_add(lmb, base, size);
        arch_lmb_reserve(lmb);
        board_lmb_reserve(lmb);
 
@@ -111,6 +108,37 @@ void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size,
                boot_fdt_add_mem_rsv_regions(lmb, fdt_blob);
 }
 
+/* Initialize the struct, add memory and call arch/board reserve functions */
+void lmb_init_and_reserve(struct lmb *lmb, bd_t *bd, void *fdt_blob)
+{
+#ifdef CONFIG_NR_DRAM_BANKS
+       int i;
+#endif
+
+       lmb_init(lmb);
+#ifdef CONFIG_NR_DRAM_BANKS
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+               if (bd->bi_dram[i].size) {
+                       lmb_add(lmb, bd->bi_dram[i].start,
+                               bd->bi_dram[i].size);
+               }
+       }
+#else
+       if (bd->bi_memsize)
+               lmb_add(lmb, bd->bi_memstart, bd->bi_memsize);
+#endif
+       lmb_reserve_common(lmb, fdt_blob);
+}
+
+/* Initialize the struct, add memory and call arch/board reserve functions */
+void lmb_init_and_reserve_range(struct lmb *lmb, phys_addr_t base,
+                               phys_size_t size, void *fdt_blob)
+{
+       lmb_init(lmb);
+       lmb_add(lmb, base, size);
+       lmb_reserve_common(lmb, fdt_blob);
+}
+
 /* This routine called with relocation disabled. */
 static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t size)
 {