summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2021-11-05 10:29:24 -0600
committerRaul Rangel <rrangel@chromium.org>2021-11-08 20:20:01 +0000
commit159284606a761ea7f5574d9e8eb5cde20a1300ef (patch)
treeff913b3fd70eddc92d544026a4504d9de5d82208
parent82897c9c4f15880a7efa21c4e11a0929975384a1 (diff)
downloadcoreboot-159284606a761ea7f5574d9e8eb5cde20a1300ef.tar.gz
coreboot-159284606a761ea7f5574d9e8eb5cde20a1300ef.tar.bz2
coreboot-159284606a761ea7f5574d9e8eb5cde20a1300ef.zip
drivers/intel/fsp2_0: Add preload_fspm and preload_fsps
In the non-XIP world, FSP is normally memmapped and then decompressed. The AMD SPI DMA controller can actually read faster than mmap. So by reading the contents into a buffer and then decompressing we reduce boot time. BUG=b:179699789 TEST=Boot guybrush and see 30ms reduction in boot time Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: I28d7530ae9e50f743e3d6c86a5a29b1fa85cacb6 Reviewed-on: https://review.coreboot.org/c/coreboot/+/58987 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
-rw-r--r--src/drivers/intel/fsp2_0/include/fsp/api.h2
-rw-r--r--src/drivers/intel/fsp2_0/memory_init.c9
-rw-r--r--src/drivers/intel/fsp2_0/silicon_init.c9
3 files changed, 20 insertions, 0 deletions
diff --git a/src/drivers/intel/fsp2_0/include/fsp/api.h b/src/drivers/intel/fsp2_0/include/fsp/api.h
index 68b84703cad6..c035452e0540 100644
--- a/src/drivers/intel/fsp2_0/include/fsp/api.h
+++ b/src/drivers/intel/fsp2_0/include/fsp/api.h
@@ -32,7 +32,9 @@ enum fsp_notify_phase {
};
/* Main FSP stages */
+void preload_fspm(void);
void fsp_memory_init(bool s3wake);
+void preload_fsps(void);
void fsp_silicon_init(void);
/*
diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c
index 0c9fe9718861..c1a7377ed5c3 100644
--- a/src/drivers/intel/fsp2_0/memory_init.c
+++ b/src/drivers/intel/fsp2_0/memory_init.c
@@ -340,6 +340,15 @@ static void *fspm_allocator(void *arg, size_t size, const union cbfs_mdata *unus
return (void *)fspm_begin;
}
+void preload_fspm(void)
+{
+ if (!CONFIG(CBFS_PRELOAD))
+ return;
+
+ printk(BIOS_DEBUG, "Preloading %s\n", CONFIG_FSP_M_CBFS);
+ cbfs_preload(CONFIG_FSP_M_CBFS);
+}
+
void fsp_memory_init(bool s3wake)
{
struct range_entry prog_ranges[2];
diff --git a/src/drivers/intel/fsp2_0/silicon_init.c b/src/drivers/intel/fsp2_0/silicon_init.c
index b3e60c25c3b7..83d44b140fa3 100644
--- a/src/drivers/intel/fsp2_0/silicon_init.c
+++ b/src/drivers/intel/fsp2_0/silicon_init.c
@@ -230,6 +230,15 @@ void fsps_load(void)
load_done = 1;
}
+void preload_fsps(void)
+{
+ if (!CONFIG(CBFS_PRELOAD))
+ return;
+
+ printk(BIOS_DEBUG, "Preloading %s\n", CONFIG_FSP_S_CBFS);
+ cbfs_preload(CONFIG_FSP_S_CBFS);
+}
+
void fsp_silicon_init(void)
{
timestamp_add_now(TS_FSP_SILICON_INIT_LOAD);