[U-Boot] [PATCH v3 26/62] x86: board_r: Set the global data pointer after relocation
Simon Glass
sjg at chromium.org
Mon Jan 16 15:03:51 CET 2017
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 at chromium.org>
---
Changes in v3:
- Add a TODO to board_init_r() regarding the use of the new_gd parameter
Changes in v2: None
common/board_r.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/common/board_r.c b/common/board_r.c
index 1bdd5a35366..ddfb1e1fcad 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -974,6 +974,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 at 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
--
2.11.0.483.g087da7b7c-goog
More information about the U-Boot
mailing list