[U-Boot] [PATCH] ARM: crt0: Pass malloc base address
Simon Glass
sjg at chromium.org
Wed Nov 11 21:26:40 CET 2015
Hi Fabio,
On 11 November 2015 at 13:23, Fabio Estevam <festevam at gmail.com> wrote:
> From: Fabio Estevam <fabio.estevam at freescale.com>
>
> Commit 5ba534d247d418 ("arm: Switch 32-bit ARM to using generic global_data
> setup") causes malloc() to fail in SPL.
>
> The reason is that the GD_MALLOC_BASE is not passed anymore.
>
> Restore the code that passes malloc base so that we can have
> malloc working in SPL code again.
>
> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
> ---
> arch/arm/lib/crt0.S | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S
> index 80548eb..d620126 100644
> --- a/arch/arm/lib/crt0.S
> +++ b/arch/arm/lib/crt0.S
> @@ -87,6 +87,10 @@ ENTRY(_main)
> mov sp, r0
>
> mov r0, #0
> +#if defined(CONFIG_SYS_MALLOC_F_LEN)
> + sub sp, sp, #CONFIG_SYS_MALLOC_F_LEN
> + str sp, [r9, #GD_MALLOC_BASE]
> +#endif
> bl board_init_f
>
> #if ! defined(CONFIG_SPL_BUILD)
> --
> 1.9.1
>
Thanks for digging into this. But this should be set up in board_init_f_mem():
#if defined(CONFIG_SYS_MALLOC_F) && \
(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SYS_SPL_MALLOC_START))
top -= CONFIG_SYS_MALLOC_F_LEN;
gd->malloc_base = top;
#endif
Is it possible that the #ifdef logic is wrong for your board?
Regardds,
Simon
More information about the U-Boot
mailing list