[U-Boot] [PATCH v2 26/63] x86: board_r: Set the global data pointer	after relocation
    Simon Glass 
    sjg at chromium.org
       
    Sat Nov 19 21:25:15 CET 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>
---
Changes in v2: None
 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