Hi Hans, On 17 August 2015 at 10:08, Hans de Goede <hdego...@redhat.com> wrote: > Before this patch malloc_simple would always allocate a chunk of RAM from > the stack. This commit adds a CONFIG_SYS_MALLOC_F_BASE define, which when > set directly specifies the memory address to use for the heap with > malloc_simple. > > Signed-off-by: Hans de Goede <hdego...@redhat.com> > Reviewed-by: Simon Glass <s...@chromium.org> > --- > arch/arm/lib/crt0.S | 2 +- > common/board_f.c | 4 ++++ > common/dlmalloc.c | 4 ++++ > common/spl/spl.c | 3 +++ > 4 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S > index afd4f10..5e6619f 100644 > --- a/arch/arm/lib/crt0.S > +++ b/arch/arm/lib/crt0.S > @@ -96,7 +96,7 @@ clr_gd: > strlo r0, [r1] /* clear 32-bit GD word */ > addlo r1, r1, #4 /* move to next */ > blo clr_gd > -#if defined(CONFIG_SYS_MALLOC_F_LEN) > +#if defined(CONFIG_SYS_MALLOC_F_LEN) && !defined(CONFIG_SYS_MALLOC_F_BASE) > sub sp, sp, #CONFIG_SYS_MALLOC_F_LEN > str sp, [r9, #GD_MALLOC_BASE] > #endif > diff --git a/common/board_f.c b/common/board_f.c > index c959774..7f3b96f 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -1050,9 +1050,13 @@ ulong board_init_f_mem(ulong top) > arch_setup_gd(gd_ptr); > > #ifdef CONFIG_SYS_MALLOC_F_LEN > +#if defined(CONFIG_SYS_MALLOC_F_BASE) > + gd->malloc_base = CONFIG_SYS_MALLOC_F_BASE; > +#else > top -= CONFIG_SYS_MALLOC_F_LEN; > gd->malloc_base = top; > #endif > +#endif > > return top; > } > diff --git a/common/dlmalloc.c b/common/dlmalloc.c > index b5bb051..9b14033 100644 > --- a/common/dlmalloc.c > +++ b/common/dlmalloc.c > @@ -3264,7 +3264,11 @@ int mALLOPt(param_number, value) int param_number; int > value; > int initf_malloc(void) > { > #ifdef CONFIG_SYS_MALLOC_F_LEN > +#if defined(CONFIG_SYS_MALLOC_F_BASE) > + gd->malloc_base = CONFIG_SYS_MALLOC_F_BASE; > +#else > assert(gd->malloc_base); /* Set up by crt0.S */ > +#endif > gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN; > gd->malloc_ptr = 0; > #endif > diff --git a/common/spl/spl.c b/common/spl/spl.c > index 94b01da..811452b 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -156,6 +156,9 @@ int spl_init(void) > #if defined(CONFIG_SYS_MALLOC_F_LEN) > gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN; > gd->malloc_ptr = 0; > +#if defined(CONFIG_SYS_MALLOC_F_BASE) > + gd->malloc_base = CONFIG_SYS_MALLOC_F_BASE; > +#endif > #endif > if (IS_ENABLED(CONFIG_OF_CONTROL) && > !IS_ENABLED(CONFIG_SPL_DISABLE_OF_CONTROL)) { > -- > 2.4.3 >
Why does this save memory? In general we should move away from hard-coding specific addresses I think, and just work out the memory from a single address, subtracting space for each area we need. Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot