[U-Boot] [PATCH v2 2/9] arm: Set up global data before board_init_f()

Simon Glass sjg at chromium.org
Tue Jul 8 20:41:24 CEST 2014


Hi Jeroen,

On 8 July 2014 11:13, Jeroen Hofstee <jeroen at myspectrum.nl> wrote:
> Hello Simon,
>
>
> On 08-07-14 01:19, Simon Glass wrote:
>>
>> At present arm defines CONFIG_SYS_GENERIC_GLOBAL_DATA, meaning that
>> the global_data pointer is set up in board_init_f(). However it is
>> actually set up before this, it just isn't zeroed.
>>
>> If we zero the global data before calling board_init_f() then we
>> don't need to define CONFIG_SYS_GENERIC_GLOBAL_DATA.
>>
>> Make this change to simplify the init process.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>> Changes in v2: None
>>
>>   arch/arm/include/asm/config.h | 2 --
>>   arch/arm/lib/crt0.S           | 7 +++++++
>>   2 files changed, 7 insertions(+), 2 deletions(-)
>
>
> First of all, good idea.. I missed v1 apparently.
>
>
>> diff --git a/arch/arm/include/asm/config.h b/arch/arm/include/asm/config.h
>> index 2a20a77..abf79e5 100644
>> --- a/arch/arm/include/asm/config.h
>> +++ b/arch/arm/include/asm/config.h
>> @@ -7,8 +7,6 @@
>>   #ifndef _ASM_CONFIG_H_
>>   #define _ASM_CONFIG_H_
>>   -#define CONFIG_SYS_GENERIC_GLOBAL_DATA
>> -
>
>
> This bricks aarch64 I guess.

I'll see if I can add it there also.

>
>>   #define CONFIG_LMB
>>   #define CONFIG_SYS_BOOT_RAMDISK_HIGH
>>   diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S
>> index dfc2de9..bbf3e41 100644
>> --- a/arch/arm/lib/crt0.S
>> +++ b/arch/arm/lib/crt0.S
>> @@ -67,9 +67,16 @@ ENTRY(_main)
>>         ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
>>   #endif
>>         bic     sp, sp, #7      /* 8-byte alignment for ABI compliance */
>> +       mov     r2, sp
>>         sub     sp, sp, #GD_SIZE        /* allocate one GD above SP */
>>         bic     sp, sp, #7      /* 8-byte alignment for ABI compliance */
>>         mov     r9, sp          /* GD is above SP */
>> +       mov     r1, r9
>> +       mov     r0, #0
>> +clr_gd:        cmp     r1, r2                  /* while not at end of BSS
>> */
>> +       strlo   r0, [r1]                /* clear 32-bit BSS word */
>> +       addlo   r1, r1, #4              /* move to next */
>
>
> The comment should be updated, it is not BSS which is cleared.

Yes I have a new version which I'm testing and will send when ready.

>
>> +       blo     clr_gd
>>         mov     r0, #0
>>         bl      board_init_f
>>
>
>
> The mov r0, #0 for the argument could be removed, but at
> least deserves a comment if you do so.

OK, I'll add that too.

Regards,
Simon


More information about the U-Boot mailing list