summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kconfig10
-rw-r--r--common/spl/spl.c12
2 files changed, 22 insertions, 0 deletions
diff --git a/Kconfig b/Kconfig
index b4ad610f61..44b144f1c2 100644
--- a/Kconfig
+++ b/Kconfig
@@ -142,6 +142,16 @@ config SPL_STACK_R_ADDR
Specify the address in SDRAM for the SPL stack. This will be set up
before board_init_r() is called.
+config SPL_STACK_R_MALLOC_SIMPLE_LEN
+ depends on SPL_STACK_R && SPL_SYS_MALLOC_SIMPLE
+ hex "Size of malloc_simple heap after switching to DRAM SPL stack"
+ default 0x100000
+ help
+ Specify the amount of the stack to use as memory pool for
+ malloc_simple after switching the stack to DRAM. This may be set
+ to give board_init_r() a larger heap then the initial heap in
+ SRAM which is limited to SYS_MALLOC_F_LEN bytes.
+
config TPL
bool
depends on SPL && SUPPORT_TPL
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;