[U-Boot] [U-Boot, v3, 03/10] powerpc: spl and normal u-boot stage set SYS_MALLOC_F_LEN indepently

Philipp Tomsich philipp.tomsich at theobroma-systems.com
Thu Jul 27 10:48:13 UTC 2017



On Mon, 24 Jul 2017, Andy Yan wrote:

> Some platforms has very small sram to run spl code, so
> it may have no enough sapce for so much malloc pool before
> relocation in spl stage as the normal u-boot stage.
> Use CONFIG_VAL(SYS_MALLOC_F_LEN) to fit this condition.
>
> Signed-off-by: Andy Yan <andy.yan at rock-chips.com>
> Acked-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
> ---
>
> Changes in v3:
> - use CONFIG_VAL(), which suggested by Simon
>
> Changes in v2: None
>
> arch/powerpc/cpu/mpc83xx/start.S |  8 ++++----
> arch/powerpc/cpu/mpc85xx/start.S | 11 +++++------
> 2 files changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/arch/powerpc/cpu/mpc83xx/start.S b/arch/powerpc/cpu/mpc83xx/start.S
> index 2fed4a1..1c3c737 100644
> --- a/arch/powerpc/cpu/mpc83xx/start.S
> +++ b/arch/powerpc/cpu/mpc83xx/start.S
> @@ -274,14 +274,14 @@ in_flash:
> 	cmplw	r3, r4
> 	bne	1b
>
> -#ifdef CONFIG_SYS_MALLOC_F_LEN
> +#if CONFIG_VAL(SYS_MALLOC_F_LEN)
>
> -#if CONFIG_SYS_MALLOC_F_LEN + GENERATED_GBL_DATA_SIZE > CONFIG_SYS_INIT_RAM_SIZE
> -#error "CONFIG_SYS_MALLOC_F_LEN too large to fit into initial RAM."
> +#if CONFIG_VAL(SYS_MALLOC_F_LEN) + GENERATED_GBL_DATA_SIZE > CONFIG_SYS_INIT_RAM_SIZE
> +#error "SYS_MALLOC_F_LEN too large to fit into initial RAM."
> #endif
>
> 	/* r3 = new stack pointer / pre-reloc malloc area */
> -	subi    r3, r3, CONFIG_SYS_MALLOC_F_LEN
> +	subi    r3, r3, CONFIG_VAL(SYS_MALLOC_F_LEN)
>
> 	/* Set pointer to pre-reloc malloc area in GD */
> 	stw     r3, GD_MALLOC_BASE(r4)
> diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
> index 63fdffd..58cb9fc 100644
> --- a/arch/powerpc/cpu/mpc85xx/start.S
> +++ b/arch/powerpc/cpu/mpc85xx/start.S
> @@ -1183,14 +1183,13 @@ _start_cont:
> 	lis	r3,(CONFIG_SYS_INIT_RAM_ADDR)@h
> 	ori	r3,r3,((CONFIG_SYS_INIT_SP_OFFSET-16)&~0xf)@l /* Align to 16 */
>
> -#ifdef CONFIG_SYS_MALLOC_F_LEN
> -
> -#if CONFIG_SYS_MALLOC_F_LEN + GENERATED_GBL_DATA_SIZE > CONFIG_SYS_INIT_RAM_SIZE
> -#error "CONFIG_SYS_MALLOC_F_LEN too large to fit into initial RAM."
> +#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> +#if CONFIG_VAL(SYS_MALLOC_F_LEN) + GENERATED_GBL_DATA_SIZE > CONFIG_SYS_INIT_RAM_SIZE
> +#error "SYS_MALLOC_F_LEN too large to fit into initial RAM."
> #endif
>
> 	/* Leave 16+ byte for back chain termination and NULL return address */
> -	subi	r3,r3,((CONFIG_SYS_MALLOC_F_LEN+16+15)&~0xf)
> +	subi	r3,r3,((CONFIG_VAL(SYS_MALLOC_F_LEN)+16+15)&~0xf)
> #endif

Could we now just drop the outermost "#if CONFIG_VAL(SYS_MALLOC_F_LEN)" 
guard?

(And as a question to someone with knowledge of the history of this code:) 
Why are those 16 bytes ("for back chain termination and NULL return 
address") consumed only when CONFIG_SYS_MALLOC_F_LEN is defined? Shouldn't 
this be required both with SYS_MALLOC_F_LEN and without?

>
> 	/* End of RAM */
> @@ -1204,7 +1203,7 @@ _start_cont:
> 	cmplw 	r4,r3
> 	bne	1b
>
> -#ifdef CONFIG_SYS_MALLOC_F_LEN
> +#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> 	lis	r4,(CONFIG_SYS_INIT_RAM_ADDR)@h
> 	ori	r4,r4,(CONFIG_SYS_GBL_DATA_OFFSET)@l
>
>


More information about the U-Boot mailing list