[U-Boot] [PATCH] ARM: crt0: Pass malloc base address
Fabio Estevam
festevam at gmail.com
Wed Nov 11 21:49:11 CET 2015
Hi Albert,
On Wed, Nov 11, 2015 at 6:33 PM, Albert ARIBAUD
<albert.u.boot at aribaud.net> wrote:
>> +#if defined(CONFIG_SYS_MALLOC_F_LEN)
>> + sub sp, sp, #CONFIG_SYS_MALLOC_F_LEN
>> + str sp, [r9, #GD_MALLOC_BASE]
>> +#endif
>
> NAK, as this only papers over the actual issue. Board_init_f_mem should
> have set the malloc base in GD. Therefore, rather than doing it again
> later, we must determine why it was not properly done earlier.11111
>
> Can you give me the toolchain version, board name and commit ID that I
> could use to reproduce the *faulty* build and check the generated code?
Sure, I am testing top of head U-boot (cad049907). Target is
mx6sabresd_spl_defconfig.
Toolchain is: arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3
In order to reproduce the malloc failure, please apply this patch
against mainline:
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -30,6 +30,7 @@
#include "../common/pfuze.h"
#include <asm/arch/mx6-ddr.h>
#include <usb.h>
+#include <malloc.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -833,6 +834,8 @@ static void spl_dram_init(void)
void board_init_f(ulong dummy)
{
+ void __iomem *ptr;
+
/* setup AIPS and disable watchdog */
arch_cpu_init();
@@ -848,6 +851,12 @@ void board_init_f(ulong dummy)
/* UART clocks enabled and gd valid - init serial console */
preloader_console_init();
+ spl_init();
+
+ ptr = malloc(64);
+ if (!ptr)
+ puts("******* malloc returned NULL\n");
+
/* DDR initialization */
spl_dram_init();
Also, as I just explained to Simon if I remove the ifdefery like this:
--- a/common/init/board_init.c
+++ b/common/init/board_init.c
@@ -50,11 +50,8 @@ ulong board_init_f_mem(ulong top)
#endif
arch_setup_gd(gd_ptr);
-#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
return top;
}
Then malloc() works fine in SPL.
So it seems I need to find a way to make CONFIG_SPL_BUILD=n or
CONFIG_SYS_SPL_MALLOC_START=n.
Thanks,
Fabio Estevam
More information about the U-Boot
mailing list