x86: board_r: Set the global data pointer after relocation
Since 'gd' is just a normal variable on 64-bit x86, it is relocated by the time we get to board_init_r(). The old 'gd' variable is passed in as parameter to board_init_r(), presumably for this situation. Assign it on 64-bit x86 so that gd points to the correct data. Options to improve this: - Make gd a fixed register and remove the board_init_r() parameter - Make all archs use this board_init_r() parameter The second has a TODO in the code. The first has a TODO in a future commit ('x86: Support global_data on x86_64') Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
4acff45247
commit
fb92308b98
1 changed files with 10 additions and 0 deletions
|
@ -947,6 +947,16 @@ static init_fnc_t init_sequence_r[] = {
|
|||
|
||||
void board_init_r(gd_t *new_gd, ulong dest_addr)
|
||||
{
|
||||
/*
|
||||
* Set up the new global data pointer. So far only x86 does this
|
||||
* here.
|
||||
* TODO(sjg@chromium.org): Consider doing this for all archs, or
|
||||
* dropping the new_gd parameter.
|
||||
*/
|
||||
#if CONFIG_IS_ENABLED(X86_64)
|
||||
arch_setup_gd(new_gd);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NEEDS_MANUAL_RELOC
|
||||
int i;
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue