Hi Tom, On 24 October 2014 12:59, Tom Rini <[email protected]> wrote: > > On Thu, Oct 23, 2014 at 01:16:01PM -0600, Simon Glass wrote: > > > Set up the simple malloc() implementation when requested, in preference to > > the full malloc(). > > > > Signed-off-by: Simon Glass <[email protected]> > > --- > > > > Changes in v2: None > > > > common/spl/spl.c | 11 ++++++++++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/common/spl/spl.c b/common/spl/spl.c > > index b16664f..7168854 100644 > > --- a/common/spl/spl.c > > +++ b/common/spl/spl.c > > @@ -134,9 +134,13 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > > u32 boot_device; > > debug(">>spl:board_init_r()\n"); > > > > -#ifdef CONFIG_SYS_SPL_MALLOC_START > > +#if defined(CONFIG_SYS_SPL_MALLOC_START) > > mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START, > > CONFIG_SYS_SPL_MALLOC_SIZE); > > + gd->flags |= GD_FLG_FULL_MALLOC_INIT; > > +#elif defined(CONFIG_SYS_MALLOC_F_LEN) > > + gd->malloc_limit = gd->malloc_base + CONFIG_SYS_MALLOC_F_LEN; > > + gd->malloc_ptr = 0; > > #endif > > > > #ifndef CONFIG_PPC > > @@ -233,6 +237,11 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > > default: > > debug("Unsupported OS image.. Jumping nevertheless..\n"); > > } > > +#if defined(CONFIG_SYS_MALLOC_F_LEN) && > > !defined(CONFIG_SYS_SPL_MALLOC_SIZE) > > + debug("SPL malloc() used %#lx bytes (%ld KB)\n", gd->malloc_ptr, > > + gd->malloc_ptr / 1024); > > +#endif > > + > > jump_to_image_no_args(&spl_image); > > } > > I don't know if this is right. Take the example of am335x + booting > from a FAT fs image. We'll need early malloc prior to DDR being > available, so the tiny space (1-2kb). But once DDR is up we need a more > complete malloc so that we can use FAT. I don't have the size handy but > I'm going to guess that (a) it's bigger than 1-2kb (b) bigger than we > can squeeze into SRAM.
Here's the malloc() approach I think we need for each stage: - SPL: full malloc() if enabled as with FAT support in SPL, else simple malloc() - U-Boot pre-reloc: simple malloc() - U-Boot post-reloc: full malloc() So I think that even in the case you raise we need the simple malloc(), not for SPL but for U-Boot pre-reloc. I have fiddled with the logic here a few times while figuring this out, and I suspect we will refine it. But the intent is to use full malloc() where available and simple malloc() where not. Regards, Simon _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

