]> Git Repo - J-u-boot.git/blobdiff - arch/arm/mach-stm32mp/dram_init.c
stm32mp: stm32prog: Add support of ENV partition type
[J-u-boot.git] / arch / arm / mach-stm32mp / dram_init.c
index ecb4c988d201af0b40a10b17aa0a2f62441f66cb..80ba5c27741cc3fe511fb0611b5d561c09f821df 100644 (file)
@@ -1,12 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
 /*
  * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
- *
- * SPDX-License-Identifier:    GPL-2.0+        BSD-3-Clause
  */
 
+#define LOG_CATEGORY LOGC_ARCH
+
 #include <common.h>
 #include <dm.h>
+#include <image.h>
+#include <init.h>
+#include <lmb.h>
+#include <log.h>
 #include <ram.h>
+#include <asm/global_data.h>
+#include <asm/system.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -18,17 +25,44 @@ int dram_init(void)
 
        ret = uclass_get_device(UCLASS_RAM, 0, &dev);
        if (ret) {
-               debug("RAM init failed: %d\n", ret);
+               log_debug("RAM init failed: %d\n", ret);
                return ret;
        }
        ret = ram_get_info(dev, &ram);
        if (ret) {
-               debug("Cannot get RAM size: %d\n", ret);
+               log_debug("Cannot get RAM size: %d\n", ret);
                return ret;
        }
-       debug("RAM init base=%lx, size=%x\n", ram.base, ram.size);
+       log_debug("RAM init base=%lx, size=%x\n", ram.base, ram.size);
 
        gd->ram_size = ram.size;
 
        return 0;
 }
+
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
+{
+       phys_size_t size;
+       phys_addr_t reg;
+       struct lmb lmb;
+
+       if (!total_size)
+               return gd->ram_top;
+
+       /* found enough not-reserved memory to relocated U-Boot */
+       lmb_init(&lmb);
+       lmb_add(&lmb, gd->ram_base, get_effective_memsize());
+       boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
+       /* add 8M for reserved memory for display, fdt, gd,... */
+       size = ALIGN(SZ_8M + CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE),
+       reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
+
+       if (!reg)
+               reg = gd->ram_top - size;
+
+       /* before relocation, mark the U-Boot memory as cacheable by default */
+       if (!(gd->flags & GD_FLG_RELOC))
+               mmu_set_region_dcache_behaviour(reg, size, DCACHE_DEFAULT_OPTION);
+
+       return reg + size;
+}
This page took 0.026083 seconds and 4 git commands to generate.