
Hi Jeroen,
On Wed, Aug 21, 2013 at 10:22 AM, Jeroen Hofstee jeroen@myspectrum.nl wrote:
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:
Yes.
- cpu/armv7/lowlevel_init.S
- ./arch/arm/lib/crt0.S
- 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)
Agreed, no suggestion it should be done here - I just wanted to make sure you are not working hard to preserve unnecessary code.
Regards, Simon