[U-Boot] [PATCH v5 2/7] arm: relocation: clear .bss section with arch memset if defined
Lukasz Majewski
l.majewski at samsung.com
Tue Feb 24 15:32:34 CET 2015
Hi Przemyslaw,
> For ARM architecture, enable the CONFIG_USE_ARCH_MEMSET/MEMCPY,
> will highly increase the memset/memcpy performance. This is able
> thanks to the ARM multiple register instructions.
>
> Unfortunatelly the relocation is done without the cache enabled,
> so it takes some time, but zeroing the BSS memory takes much more
> longer, especially for the configs with big static buffers.
>
> A quick test confirms, that the boot time improvement after using
> the arch memcpy for relocation has no significant meaning.
> The same test confirms that enable the memset for zeroing BSS,
> reduces the boot time.
>
> So this patch enables the arch memset for zeroing the BSS after
> the relocation process. For ARM boards, this can be enabled
> in board configs by defining: 'CONFIG_USE_ARCH_MEMSET'.
>
> This was tested on Trats2.
> A quick test with trace. Boot time from start to main_loop() entry:
> - ~1384ms - before this change
> - ~888ms - after this change
>
> Signed-off-by: Przemyslaw Marczak <p.marczak at samsung.com>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> Cc: Albert Aribaud <albert.u.boot at aribaud.net>
> Cc: Tom Rini <trini at ti.com>
> ---
> Changes V3, V4, V5
> - none
> ---
> arch/arm/lib/crt0.S | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S
> index 22df3e5..fab3d2c 100644
> --- a/arch/arm/lib/crt0.S
> +++ b/arch/arm/lib/crt0.S
> @@ -115,14 +115,22 @@ here:
> bl c_runtime_cpu_setup /* we still call old
> routine here */
> ldr r0, =__bss_start /* this is
> auto-relocated! */
> - ldr r1, =__bss_end /* this is
> auto-relocated! */
> +#ifdef CONFIG_USE_ARCH_MEMSET
> + ldr r3, =__bss_end /* this is
> auto-relocated! */
> + mov r1, #0x00000000 /* prepare zero to
> clear BSS */ +
> + subs r2, r3, r0 /* r2 = memset len */
> + bl memset
> +#else
> + ldr r1, =__bss_end /* this is
> auto-relocated! */ mov r2, #0x00000000 /*
> prepare zero to clear BSS */
> clbss_l:cmp r0, r1 /* while not at end
> of BSS */ strlo r2, [r0] /* clear 32-bit BSS
> word */ addlo r0, r0, #4 /* move to next */
> blo clbss_l
> +#endif
>
> bl coloured_LED_init
> bl red_led_on
Acked-by: Lukasz Majewski <l.majewski at samsung.com>
--
Best regards,
Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
More information about the U-Boot
mailing list