summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-09-13 15:04:17 +0200
committerHans de Goede <hdegoede@redhat.com>2015-10-20 18:40:27 +0200
commitdcfcb8d49a291736623b630ae977e4184590f8fe (patch)
tree81f115b143c047a7f47037ce4de7ea875ef72aa5 /common
parent1eb0c03c2198a7ec9de456b83dacdc4831b96cbf (diff)
downloadtalos-obmc-uboot-dcfcb8d49a291736623b630ae977e4184590f8fe.tar.gz
talos-obmc-uboot-dcfcb8d49a291736623b630ae977e4184590f8fe.zip
malloc_simple: Add support for switching to DRAM heap
malloc_simple uses a part of the stack as heap, initially it uses SYS_MALLOC_F_LEN bytes which typically is quite small as the initial stacks sits in SRAM and we do not have that much SRAM to work with. When DRAM becomes available we may switch the stack from SRAM to DRAM to give use more room. This commit adds support for also switching to a new bigger malloc_simple heap located in the new stack. Note that this requires spl_init to be called before spl_relocate_stack_gd which in practice means that spl_init must be called from board_init_f. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Tom Rini <trini@konsulko.com> Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r--common/spl/spl.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/common/spl/spl.c b/common/spl/spl.c
index b09a6268e6..4b319d6739 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -347,6 +347,18 @@ ulong spl_relocate_stack_gd(void)
memcpy(new_gd, (void *)gd, sizeof(gd_t));
gd = new_gd;
+#ifdef CONFIG_SPL_SYS_MALLOC_SIMPLE
+ if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) {
+ if (!(gd->flags & GD_FLG_SPL_INIT))
+ panic("spl_init must be called before heap reloc");
+
+ ptr -= CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
+ gd->malloc_base = ptr;
+ gd->malloc_limit = CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
+ gd->malloc_ptr = 0;
+ }
+#endif
+
return ptr;
#else
return 0;
OpenPOWER on IntegriCloud