summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorYork Sun <yorksun@freescale.com>2015-12-07 11:05:29 -0800
committerYork Sun <yorksun@freescale.com>2015-12-15 08:57:33 +0800
commitaabd7ddb889aec3c6c4139974f66a44e2ce46ba5 (patch)
tree994bb4cf82b7efd6c61866cfd551905859288d2f /common
parentc107c0c05c988ac6cfba6de60c90f105bbea0e1e (diff)
downloadblackbird-obmc-uboot-aabd7ddb889aec3c6c4139974f66a44e2ce46ba5.tar.gz
blackbird-obmc-uboot-aabd7ddb889aec3c6c4139974f66a44e2ce46ba5.zip
common: Rewrite hiding the end of memory
As the name may be confusing, the CONFIG_SYS_MEM_TOP_HIDE reserves some memory from the end of ram, tracked by gd->ram_size. It is not always the top of u-boot visible memory. Rewrite the macro with a weak function to provide flexibility for complex calcuation. Legacy use of this macro is still supported. Signed-off-by: York Sun <yorksun@freescale.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r--common/board_f.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/common/board_f.c b/common/board_f.c
index bd5a486248..8094ac4efe 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -317,6 +317,15 @@ __weak ulong board_get_usable_ram_top(ulong total_size)
return gd->ram_top;
}
+__weak phys_size_t board_reserve_ram_top(phys_size_t ram_size)
+{
+#ifdef CONFIG_SYS_MEM_TOP_HIDE
+ return ram_size - CONFIG_SYS_MEM_TOP_HIDE;
+#else
+ return ram_size;
+#endif
+}
+
static int setup_dest_addr(void)
{
debug("Monitor len: %08lX\n", gd->mon_len);
@@ -333,19 +342,17 @@ static int setup_dest_addr(void)
*/
gd->secure_ram = gd->ram_size;
#endif
-#if defined(CONFIG_SYS_MEM_TOP_HIDE)
/*
* Subtract specified amount of memory to hide so that it won't
* get "touched" at all by U-Boot. By fixing up gd->ram_size
* the Linux kernel should now get passed the now "corrected"
- * memory size and won't touch it either. This should work
- * for arch/ppc and arch/powerpc. Only Linux board ports in
- * arch/powerpc with bootwrapper support, that recalculate the
- * memory size from the SDRAM controller setup will have to
- * get fixed.
+ * memory size and won't touch it either. This has been used
+ * by arch/powerpc exclusively. Now ARMv8 takes advantage of
+ * thie mechanism. If memory is split into banks, addresses
+ * need to be calculated.
*/
- gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE;
-#endif
+ gd->ram_size = board_reserve_ram_top(gd->ram_size);
+
#ifdef CONFIG_SYS_SDRAM_BASE
gd->ram_top = CONFIG_SYS_SDRAM_BASE;
#endif
OpenPOWER on IntegriCloud