Attention is currently required from: Martin Roth. Raul Rangel has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/58982 )
Change subject: src/lib/prog_loaders: Add preload_ramstage ......................................................................
src/lib/prog_loaders: Add preload_ramstage
This will enable preloading ramstage. By preloading the file into cbfs_cache we reduce boot time.
BUG=b:179699789 TEST=Boot guybrush to OS and see 12ms reduction in boot time.
Signed-off-by: Raul E Rangel rrangel@chromium.org Change-Id: Ibe12de806449da25bc0033b02fcb97c3384eddc1 --- M Makefile.inc M src/include/program_loading.h M src/lib/prog_loaders.c 3 files changed, 19 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/82/58982/1
diff --git a/Makefile.inc b/Makefile.inc index b784f3e..f14bc1e 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -1214,6 +1214,10 @@ $(CONFIG_CBFS_PREFIX)/ramstage-file := $(RAMSTAGE) $(CONFIG_CBFS_PREFIX)/ramstage-type := stage $(CONFIG_CBFS_PREFIX)/ramstage-compression := $(CBFS_COMPRESS_FLAG) +# The AMD LPC SPI DMA controller requires source files to be 64 byte aligned. +ifeq ($(CONFIG_SOC_AMD_COMMON_BLOCK_LPC_SPI_DMA),y) +$(CONFIG_CBFS_PREFIX)/ramstage-align := 64 +endif
cbfs-files-$(CONFIG_HAVE_REFCODE_BLOB) += $(CONFIG_CBFS_PREFIX)/refcode $(CONFIG_CBFS_PREFIX)/refcode-file := $(REFCODE_BLOB) diff --git a/src/include/program_loading.h b/src/include/program_loading.h index 5b9a94d..ba42465 100644 --- a/src/include/program_loading.h +++ b/src/include/program_loading.h @@ -145,6 +145,13 @@ * RAMSTAGE LOADING * ************************/
+/* + * Asynchronously preloads ramstage. + * + * This should be called early on to allow ramstage to load before + * `run_ramstage` is called. + */ +void preload_ramstage(void); /* Run ramstage from romstage. */ void run_ramstage(void);
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c index 1a361ea..671cd8a 100644 --- a/src/lib/prog_loaders.c +++ b/src/lib/prog_loaders.c @@ -75,7 +75,15 @@
return rmodule_stage_load(&rmod_ram); } +void preload_ramstage(void) +{ + if (!CONFIG(CBFS_PRELOAD)) + return;
+ printk(BIOS_DEBUG, "Preloading ramstage\n"); + + cbfs_preload(CONFIG_CBFS_PREFIX "/ramstage"); +} void run_ramstage(void) { struct prog ramstage =