[U-Boot] Using spi_alloc_slave() from SPL
Simon Glass
sjg at chromium.org
Thu Aug 6 21:31:05 CEST 2015
Hi,
On 6 August 2015 at 12:24, Fabio Estevam <festevam at gmail.com> wrote:
> On Thu, Aug 6, 2015 at 2:03 PM, Stefano Babic <sbabic at denx.de> wrote:
>
>> This is in RAM, of course. Increasing the size by 3KiB is not IMHO for
>> i.MX6 a problem, there is enough space in IRAM. But what is surprising
>> is that Fabio gets a Null pointer by malloc().
>
> Yes, so I did a simpler patch that shows the malloc() issue with SPL:
>
> --- a/board/freescale/mx6sabresd/mx6sabresd.c
> +++ b/board/freescale/mx6sabresd/mx6sabresd.c
> @@ -692,6 +692,7 @@ int checkboard(void)
> #ifdef CONFIG_SPL_BUILD
> #include <spl.h>
> #include <libfdt.h>
> +#include <malloc.h>
>
> const struct mx6dq_iomux_ddr_regs mx6_ddr_ioregs = {
> .dram_sdclk_0 = 0x00020030,
> @@ -822,6 +823,7 @@ static void spl_dram_init(void)
>
> void board_init_f(ulong dummy)
> {
> + void __iomem *ptr;
> /* setup AIPS and disable watchdog */
> arch_cpu_init();
>
> @@ -837,6 +839,10 @@ void board_init_f(ulong dummy)
> /* UART clocks enabled and gd valid - init serial console */
> preloader_console_init();
>
> + ptr = malloc(64);
> + if (!ptr)
> + puts("*** malloc returned NULL\n");
> +
> /* DDR initialization */
> spl_dram_init();
>
> when I run it:
>
> U-Boot SPL 2015.07-08201-gfb44bcd-dirty (Aug 06 2015 - 15:19:54)
> *** malloc returned NULL
>
> Even if I put the malloc() after spl_dram_init() it still returns NULL.
Please check the README about the SPL flow. From what I can see
malloc() is not available before board_init_r() in SPL.
However, if you add a call to spl_init() from your board_init_f(),
then early malloc would be available. Enable this with
CONFIG_SYS_MALLOC_F_... as people explained.
It would be nice if someone could tidy this up so there is only one
generic board_init_f(), and it calls board-specific code from there.
Regards,
Simon
More information about the U-Boot
mailing list