[U-Boot] [PATCH 45/82] x86: board_r: Set the global data pointer after relocation
Simon Glass
sjg at chromium.org
Mon Sep 26 05:33:48 CEST 2016
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
Signed-off-by: Simon Glass <sjg at chromium.org>
---
common/board_r.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/common/board_r.c b/common/board_r.c
index d959ad3..02800ca 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -974,6 +974,11 @@ init_fnc_t init_sequence_r[] = {
void board_init_r(gd_t *new_gd, ulong dest_addr)
{
+ /* Set up the new global data pointer */
+#if CONFIG_IS_ENABLED(X86_64)
+ arch_setup_gd(new_gd);
+#endif
+
#ifdef CONFIG_NEEDS_MANUAL_RELOC
int i;
#endif
--
2.8.0.rc3.226.g39d4020
More information about the U-Boot
mailing list