diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2013-07-31 16:28:44 -0700 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2013-12-21 21:02:38 +0100 |
commit | fffbda5897059d642dd3d8facd2a14ada6da416b (patch) | |
tree | e897ded4549fed6281c7f1027d7f2285bbafd646 /src/arch | |
parent | 1f9f04e57117aea8e06be4fc49f3d7fa8b096389 (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/arch')
-rw-r--r-- | src/arch/armv7/romstage.ld | 37 |
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) |