diff options
author | Gabe Black <gabeblack@chromium.org> | 2013-06-10 02:07:17 -0400 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2013-06-11 00:03:10 +0200 |
commit | 1ef5ff277085512a2d24bef0b5f6f185a952b3b7 (patch) | |
tree | f2b1f16e2d54e8e4f2ed6144e1c2d7bf8f618aac | |
parent | 437a1e67a3e4c530292d947ef5e1adbf3cc7650a (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>
-rw-r--r-- | src/cpu/ti/am335x/Makefile.inc | 12 | ||||
-rw-r--r-- | src/cpu/ti/am335x/header.c | 5 |
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 } }; |