summaryrefslogtreecommitdiffstats
path: root/src/cpu/ti
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/ti
parent437a1e67a3e4c530292d947ef5e1adbf3cc7650a (diff)
downloadcoreboot-1ef5ff277085512a2d24bef0b5f6f185a952b3b7.tar.gz
coreboot-1ef5ff277085512a2d24bef0b5f6f185a952b3b7.tar.bz2
coreboot-1ef5ff277085512a2d24bef0b5f6f185a952b3b7.zip
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/ti')
-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 c1bbcf6ce7dd..7dcdf0f77a48 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 bd2f344fd445..5ed943edebf4 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
}
};