diff mbox

[U-Boot,v9,14/31] Add CONFIG_SYS_SYM_OFFSETS to support offset symbols

Message ID 1363021625-10250-15-git-send-email-sjg@chromium.org
State Accepted, archived
Delegated to: Tom Rini
Headers show

Commit Message

Simon Glass March 11, 2013, 5:06 p.m. UTC
Link symbols as created by the link script can either be absolute or
relative to the text start. This option switches between the two options
so that we can support both.

As we convert architectures over to generic board, we can see if this
option is actually needed, or whether it is possible to unify this feature
also.

Signed-off-by: Simon Glass <sjg@chromium.org>
---
Changes in v9:
- Rebase to master

Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5:
- Add offsets support for access to fdt that uses CONFIG_OF_SEPARATE

Changes in v4: None
Changes in v3: None
Changes in v2: None

 README           |  7 +++++++
 common/board_f.c | 14 ++++++++++++++
 2 files changed, 21 insertions(+)
diff mbox

Patch

diff --git a/README b/README
index 2c36e00..a106aaf 100644
--- a/README
+++ b/README
@@ -3221,6 +3221,13 @@  Configuration Settings:
 	its config.mk file). If you find problems enabling this option on
 	your board please report the problem and send patches!
 
+- CONFIG_SYS_SYM_OFFSETS
+	This is set by architectures that use offsets for link symbols
+	instead of absolute values. So bss_start is obtained using an
+	offset _bss_start_ofs from CONFIG_SYS_TEXT_BASE, rather than
+	directly. You should not need to touch this setting.
+
+
 The following definitions that deal with the placement and management
 of environment data (variable area); in general, we support the
 following configurations:
diff --git a/common/board_f.c b/common/board_f.c
index 42042cc..b625ccb 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -107,8 +107,13 @@  static int display_text_info(void)
 {
 	ulong bss_start, bss_end;
 
+#ifdef CONFIG_SYS_SYM_OFFSETS
 	bss_start = _bss_start_ofs + _TEXT_BASE;
 	bss_end = _bss_end_ofs + _TEXT_BASE;
+#else
+	bss_start = (ulong)&__bss_start;
+	bss_end = (ulong)&__bss_end;
+#endif
 	debug("U-Boot code: %08X -> %08lX  BSS: -> %08lX\n",
 	      CONFIG_SYS_TEXT_BASE, bss_start, bss_end);
 
@@ -174,7 +179,11 @@  static int zero_global_data(void)
 
 static int setup_mon_len(void)
 {
+#ifdef CONFIG_SYS_SYM_OFFSETS
 	gd->mon_len = _bss_end_ofs;
+#else
+	gd->mon_len = (ulong)&__bss_end - (ulong)&__text_start;
+#endif
 	return 0;
 }
 
@@ -190,7 +199,11 @@  static int setup_fdt(void)
 	gd->fdt_blob = _binary_dt_dtb_start;
 #elif defined CONFIG_OF_SEPARATE
 	/* FDT is at end of image */
+# ifdef CONFIG_SYS_SYM_OFFSETS
 	gd->fdt_blob = (void *)(_end_ofs + CONFIG_SYS_TEXT_BASE);
+# else
+	gd->fdt_blob = (ulong *)&_end;
+# endif
 #endif
 	/* Allow the early environment to override the fdt address */
 	gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
@@ -483,6 +496,7 @@  static int mark_bootstage(void)
 }
 
 static init_fnc_t init_sequence_f[] = {
+	zero_global_data,
 	setup_fdt,
 	setup_mon_len,
 	arch_cpu_init,		/* basic arch cpu dependent setup */