[U-Boot] [PATCH v2 04/13] dm: spl: Make simple malloc() available when enabled

Simon Glass sjg at chromium.org
Tue Oct 28 01:07:38 CET 2014


Hi Tom,

On 24 October 2014 12:59, Tom Rini <trini at ti.com> 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 <sjg at chromium.org>
> > ---
> >
> > 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


More information about the U-Boot mailing list