[U-Boot] [PATCH 4/7] malloc_simple: Add support for switching to DRAM heap

Simon Glass sjg at chromium.org
Tue Sep 22 06:00:21 CEST 2015


Hi Hans,

On 13 September 2015 at 09:42, Hans de Goede <hdegoede at redhat.com> wrote:
> malloc_simple uses a part of the stack as heap, initially it uses
> SYS_MALLOC_F_LEN bytes which typically is quite small as the initial
> stacks sits in SRAM and we do not have that much SRAM to work with.
>
> When DRAM becomes available we may switch the stack from SRAM to DRAM
> to give use more room. This commit adds support for also switching to
> a new bigger malloc_simple heap located in the new stack.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  Kconfig          | 10 ++++++++++
>  common/spl/spl.c |  9 +++++++++
>  2 files changed, 19 insertions(+)
>
> diff --git a/Kconfig b/Kconfig
> index 0ae4fab..86088bc 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -142,6 +142,16 @@ config SPL_STACK_R_ADDR
>           Specify the address in SDRAM for the SPL stack. This will be set up
>           before board_init_r() is called.
>
> +config SPL_STACK_R_MALLOC_SIMPLE_LEN
> +       depends on SPL_STACK_R && SPL_MALLOC_SIMPLE
> +       hex "Size of malloc_simple heap after switching to DRAM SPL stack"
> +       default 0x100000
> +       help
> +         Specify the amount of the stack to use as memory pool for
> +         malloc_simple after switching the stack to DRAM. This may be set
> +         to give board_init_r() a larger heap then the initial heap in
> +         SRAM which is limited to SYS_MALLOC_F_LEN bytes.
> +
>  config TPL
>         bool
>         depends on SPL && SUPPORT_TPL
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index b09a626..8c2d109 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -347,6 +347,15 @@ ulong spl_relocate_stack_gd(void)
>         memcpy(new_gd, (void *)gd, sizeof(gd_t));
>         gd = new_gd;
>
> +#ifdef CONFIG_SPL_MALLOC_SIMPLE
> +       if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) {

Do you think we could do:

if (IS_ENABLED(CONFIG_SPL_MALLOC_SIMPLE) &&
CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)

to avoid the #ifdef?

> +               ptr -= CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
> +               gd->malloc_base = ptr;
> +               gd->malloc_limit = CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN;
> +               gd->malloc_ptr = 0;
> +       }
> +#endif
> +
>         return ptr;
>  #else
>         return 0;
> --
> 2.4.3
>

I have to say I worry a little bit about combinatoric explosion with
this series. But I can't immediately see a better way.

Regards,
Simon


More information about the U-Boot mailing list