[U-Boot] [RFC 03/10] board_r: only assign gd when requested

York Sun
2014-06-04T04:19:13Z

On Jun 3, 2014, at 8:52 PM, Stefan Roese wrote:

> Hi Jeroen,
>
> (added York to cc as he introduced CONFIG_SYS_GENERIC_GLOBAL_DATA with patch 2a1680e3 [common/board_f: Initialized global data for generic board])
>
> On 03.06.2014 22:52, Jeroen Hofstee wrote:
>> Hello Wolfgang / Stefan.
>>
>> On za, 2014-05-31 at 22:32 +0200, Jeroen Hofstee wrote:
>>> When CONFIG_SYS_GENERIC_GLOBAL_DATA is not set the arch handles
>>> the assignment of gd. At least in case of ARM/Aarch64 this means
>>> board_init_r is alteady called with the new gd. Therefore only
>>> assign gd if CONFIG_SYS_GENERIC_GLOBAL_DATA is defined.
>>> ---
>>> common/board_r.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/common/board_r.c b/common/board_r.c
>>> index 602a239..18bbe26 100644
>>> --- a/common/board_r.c
>>> +++ b/common/board_r.c
>>> @@ -927,7 +927,7 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
>>> int i;
>>> #endif
>>>
>>> -#ifndef CONFIG_X86
>>> +#ifdef CONFIG_SYS_GENERIC_GLOBAL_DATA
>>> gd = new_gd;
>>> #endif
>>>
>>
>> Can any of you confirm this change is fine for powerpc as well?
>
> powerpc doesn't define CONFIG_SYS_GENERIC_GLOBAL_DATA right now. And I'm not sure which powerpc boards use the common board_f/_r functions right now. Perhaps York knows?

I think this change is not right for powerpc. The idea of using CONFIG_SYS_GENERIC_GLOBAL_DATA is to use the stack for gd in board_init_f. PowerPC boards don't use this way. The gd is initialized and used before calling board_init_f.

PowerPC boards also use new_gd when calling board_init_r. If you add this macro, I don't think powerpc will continue to work.

This commit 15672c6dbd7e5a110773480ccfe47b98ba1dc6f8 converts some powerpc boards to use generic board.

York