summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Reinauer <reinauer@chromium.org>2013-07-31 16:28:44 -0700
committerPatrick Georgi <patrick@georgi-clan.de>2013-12-21 21:02:38 +0100
commitfffbda5897059d642dd3d8facd2a14ada6da416b (patch)
treee897ded4549fed6281c7f1027d7f2285bbafd646 /src
parent1f9f04e57117aea8e06be4fc49f3d7fa8b096389 (diff)
ARMv7: Fix location of CBMEM console in romstage
The CBMEM console pointer in romstage is actually a zero byte array. This means CBMEM area has to live at the end of the allocations or else CBMEM console will overwrite whatever comes after it. Change-Id: Icc59e982b724a2d396370c3a5abd8898e08baf26 Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: https://gerrit.chromium.org/gerrit/63997 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Commit-Queue: Stefan Reinauer <reinauer@chromium.org> Tested-by: Stefan Reinauer <reinauer@chromium.org> Reviewed-on: http://review.coreboot.org/4428 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'src')
-rw-r--r--src/arch/armv7/romstage.ld37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/arch/armv7/romstage.ld b/src/arch/armv7/romstage.ld
index 14c5bde3a6..11a91cf0af 100644
--- a/src/arch/armv7/romstage.ld
+++ b/src/arch/armv7/romstage.ld
@@ -60,9 +60,25 @@ SECTIONS
_erom = .;
}
+ /* bss does not contain data, it is just a space that should be zero
+ * initialized on startup. (typically uninitialized global variables)
+ * crt0.S fills between _bss and _ebss with zeroes.
+ */
+ .bss . : {
+ . = ALIGN(8);
+ _bss = .;
+ *(.bss)
+ *(.sbss)
+ *(COMMON)
+ }
+
+ _ebss = .;
+
.car.data . (NOLOAD) : {
+ . = ALIGN(8);
_car_data_start = .;
*(.car.global_data);
+ . = ALIGN(8);
/* The cbmem_console section comes last to take advantage of
* a zero-sized array to hold the memconsole contents that
* grows to a bound of CONFIG_CONSOLE_CAR_BUFFER_SIZE. However,
@@ -73,20 +89,17 @@ SECTIONS
_car_data_end = .;
}
- /* bss does not contain data, it is just a space that should be zero
- * initialized on startup. (typically uninitialized global variables)
- * crt0.S fills between _bss and _ebss with zeroes.
- */
- .bss . : {
- . = ALIGN(8);
- _bss = .;
- *(.bss)
- *(.sbss)
- *(COMMON)
- }
- _ebss = .;
_end = .;
+ /* TODO: check if we are running out of SRAM. Below check is not good
+ * enough though because SRAM has different size on different CPUs
+ * and not all SRAM is available to the romstage. On Exynos, some is
+ * used for BL1, the bootblock and the stack.
+ *
+ * _bogus = ASSERT((_end - _start + EXPECTED_CBMEM_CONSOLE_SIZE <= \
+ * 0x54000), "SRAM area is too full");
+ */
+
/* Discard the sections we don't need/want */
/DISCARD/ : {
*(.comment)