diff options
author | Aaron Durbin <adurbin@chromium.org> | 2013-01-22 13:22:02 -0600 |
---|---|---|
committer | Stefan Reinauer <stefan.reinauer@coreboot.org> | 2013-03-19 18:47:57 +0100 |
commit | 81108b90593e1c8a459c499307404955771c54f3 (patch) | |
tree | 77b23a07ede8eaba3510dd87ead29db07d09e977 | |
parent | 4063ede3fb571110c3e65c321049cc2687cc54fa (diff) |
cbfs: alternative support for cbfs_load_payload()
In certain situations boot speed can be increased by providing an
alternative implementation to cbfs_load_payload(). The
ALT_CBFS_LOAD_PAYLOAD option allows for the mainboard or chipset to
provide its own implementation.
Booted baskingridge board with alternative and regular
cbfs_load_payload().
Change-Id: I547ac9881a82bacbdb3bbdf38088dfcc22fd0c2c
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/2782
Tested-by: build bot (Jenkins)
Reviewed-by: Marc Jones <marc.jones@se-eng.com>
-rw-r--r-- | src/Kconfig | 9 | ||||
-rw-r--r-- | src/lib/cbfs.c | 2 | ||||
-rw-r--r-- | src/lib/selfboot.c | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/Kconfig b/src/Kconfig index 7206878b28..f6a83e8a85 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -47,6 +47,15 @@ config CBFS_PREFIX Select the prefix to all files put into the image. It's "fallback" by default, "normal" is a common alternative. +config ALT_CBFS_LOAD_PAYLOAD + bool "Use alternative cbfs_load_payload() implementation." + default n + help + Either board or southbridge provide an alternative cbfs_load_payload() + implementation. This may be used, for example, if accessing the ROM + through memory-mapped I/O is slow and a faster alternative can be + provided. + choice prompt "Compiler to use" default COMPILER_GCC diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index bfdab6c2ec..abb95abc3f 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -165,11 +165,13 @@ int cbfs_execute_stage(struct cbfs_media *media, const char *name) return run_address((void *)(uintptr_t)ntohll(stage->entry)); } +#if !CONFIG_ALT_CBFS_LOAD_PAYLOAD void *cbfs_load_payload(struct cbfs_media *media, const char *name) { return (struct cbfs_payload *)cbfs_get_file_content( media, name, CBFS_TYPE_PAYLOAD); } +#endif /* Simple buffer */ diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index d64ba4cb92..f32bb814fb 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -536,4 +536,3 @@ int selfboot(struct lb_memory *mem, struct cbfs_payload *payload) out: return 0; } - |