[U-Boot] [PATCH v2 3/4] ARM: use r9 for gd

Jeroen Hofstee
2013-08-21T16:22:59Z

Hello Simon,

On 08/19/2013 07:32 PM, Jeroen Hofstee wrote:
>
> On 08/19/2013 05:08 AM, Simon Glass wrote:
>> On Sat, Aug 17, 2013 at 3:40 AM, Jeroen Hofstee
>> <jeroen@myspectrum.nl> wrote:
>>>
>>> This patch assumes only crt0.S sets the register used for
>>> gd in asm. I just noticed cpu/armv7/lowlevel_init.S does set gd
>>> manually, so all users of the common board.c are likely
>>> bricked with the patch as is. Looking into it....
>> I may misunderstood what you are saying here,
>
> Likely, this is not about how to set reserve gd, but why gd
> is setup twice. The answer is because some more cleanup
> is needed (which deserves its own patch).
>

Right... Now I understand what you were talking about. Gd is actually
setup _three_ times in a row:

1) cpu/armv7/lowlevel_init.S
2) ./arch/arm/lib/crt0.S
3) common/board_f.c

>> but I believe that the
>> code in common/board_f.c which creates a global_data on the stack can
>> be removed for ARM now that Albert has tidied all this up with the
>> crt0.S changes, etc. So in common/board_f.c something like:
>>
>> void board_init_f(ulong boot_flags)
>> {
>> /* These two archs set up the global_data before board_init_f() */
>> #if !defined(CONFIG_X86) && !defined(CONFIG_ARM)
>> gd_t data;
>>
>> gd = &data;
>> #endif
>>
>> gd->flags = boot_flags;
>>
>

Yup understood now, this makes sense (but as part of a cleanup patchset)

Thanks, Regards,
Jeroen