summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorGabe Black <gabeblack@chromium.org>2013-06-10 02:07:17 -0400
committerRonald G. Minnich <rminnich@gmail.com>2013-06-11 00:03:10 +0200
commit1ef5ff277085512a2d24bef0b5f6f185a952b3b7 (patch)
treef2b1f16e2d54e8e4f2ed6144e1c2d7bf8f618aac /src/cpu
parent437a1e67a3e4c530292d947ef5e1adbf3cc7650a (diff)
am335x: Make the iROM load only the bootblock and ROM stage.
The bootblock and ROM stages are the only ones that are really required to be loaded in the quite limited on chip RAM during startup. Rather than load the whole image which requires everything to be small, load just the bootblock and the ROM stage, allowing the rest of the image to be arbitrarily large. Loading a minimal amount of stuff should also improve boot performance a little bit. Change-Id: I2fede63b8d3d8f0d880e4a692ae423021f8232b6 Signed-off-by: Gabe Black <gabeblack@chromium.org> Reviewed-on: http://review.coreboot.org/3421 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/ti/am335x/Makefile.inc12
-rw-r--r--src/cpu/ti/am335x/header.c5
2 files changed, 14 insertions, 3 deletions
diff --git a/src/cpu/ti/am335x/Makefile.inc b/src/cpu/ti/am335x/Makefile.inc
index c1bbcf6ce7..7dcdf0f77a 100644
--- a/src/cpu/ti/am335x/Makefile.inc
+++ b/src/cpu/ti/am335x/Makefile.inc
@@ -17,9 +17,17 @@ real-target: $(obj)/MLO
header_ld = $(src)/cpu/ti/am335x/header.ld
-$(obj)/omap-header.bin: $$(omap-header-objs) $$(header_ld)
+get_header_size=$(shell $(CBFSTOOL) $(1) print | grep $(2) | awk '{print $$2 + $$4}')
+
+$(obj)/omap-header.bin: $$(omap-header-objs) $$(header_ld) $(obj)/coreboot.rom
@printf " CC $(subst $(obj)/,,$(@))\n"
- $(CC) -nostdlib -nostartfiles -static -include $(obj)/config.h -o $@.tmp $< -T $(header_ld)
+ $(CC) -nostdlib -nostartfiles -static -include $(obj)/config.h \
+ -Wl,--defsym,header_load_size=$(strip \
+ $(call get_header_size,$(obj)/coreboot.rom, \
+ $(CONFIG_CBFS_PREFIX)/romstage \
+ ) \
+ ) \
+ -o $@.tmp $< -T $(header_ld)
$(OBJCOPY) --only-section=".header" -O binary $@.tmp $@
$(obj)/MLO: $(obj)/coreboot.rom $(obj)/omap-header.bin
diff --git a/src/cpu/ti/am335x/header.c b/src/cpu/ti/am335x/header.c
index bd2f344fd4..5ed943edeb 100644
--- a/src/cpu/ti/am335x/header.c
+++ b/src/cpu/ti/am335x/header.c
@@ -40,6 +40,9 @@ struct omap_image_headers {
struct gp_device_header image_header;
};
+// A symbol which defines how much of the image the iROM should load.
+extern char header_load_size;
+
struct omap_image_headers headers __attribute__((section(".header"))) = {
.config_headers = {
.toc_chsettings = {
@@ -66,7 +69,7 @@ struct omap_image_headers headers __attribute__((section(".header"))) = {
}
},
.image_header = {
- .size = CONFIG_ROM_SIZE,
+ .size = (uintptr_t)&header_load_size,
.destination = CONFIG_BOOTBLOCK_BASE
}
};