summaryrefslogtreecommitdiffstats
path: root/src/lib/Kconfig
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2021-11-01 13:40:14 -0600
committerRaul Rangel <rrangel@chromium.org>2021-11-04 17:10:31 +0000
commit4cfb862fb2bc9c9d95fd4f5d3026ec791fe485d6 (patch)
tree8b9f622e925831ad2cdcf788ca001c005af18baa /src/lib/Kconfig
parent58618c26a10632a98ee7f8be957ba5288a39af69 (diff)
downloadcoreboot-4cfb862fb2bc9c9d95fd4f5d3026ec791fe485d6.tar.gz
coreboot-4cfb862fb2bc9c9d95fd4f5d3026ec791fe485d6.tar.bz2
coreboot-4cfb862fb2bc9c9d95fd4f5d3026ec791fe485d6.zip
lib/cbfs: Add cbfs_preload()
This API will hide all the complexity of preloading a CBFS file. It makes it so the callers simply specify the file to preload and CBFS takes care of the rest. It will start a new thread to read the file into the cbfs_cache. When the file is actually required (i.e., cbfs_load, etc) it will wait for the preload thread to complete (if it hasn't already) and perform verification/decompression using the preloaded buffer. This design allows decompression/verification to happen in the main BSP thread so that timestamps are correctly reflected. BUG=b:179699789 TEST=Test with whole CL chain, verify VGA bios was preloaded and boot time was reduced by 12ms. Logs: Preloading VGA ROM CBFS DEBUG: _cbfs_preload(name='pci1002,1638.rom', force_ro=false) CBFS: Found 'pci1002,1638.rom' @0x20ac40 size 0xd800 in mcache @0xcb7dd0f0 spi_dma_readat_dma: start: dest: 0x021c0000, source: 0x51cc80, size: 55296 took 0 us to acquire mutex start_spi_dma_transaction: dest: 0x021c0000, source: 0x51cc80, remaining: 55296 ... spi_dma_readat_dma: end: dest: 0x021c0000, source: 0x51cc80, remaining: 0 ... CBFS DEBUG: _cbfs_alloc(name='pci1002,1638.rom', alloc=0x00000000(0x00000000), force_ro=false, type=-1) CBFS: Found 'pci1002,1638.rom' @0x20ac40 size 0xd800 in mcache @0xcb7dd0f0 waiting for thread took 0 us CBFS DEBUG: get_preload_rdev(name='pci1002,1638.rom', force_ro=false) preload successful In CBFS, ROM address for PCI: 03:00.0 = 0x021c0000 PCI expansion ROM, signature 0xaa55, INIT size 0xd800, data ptr 0x01b0 PCI ROM image, vendor ID 1002, device ID 1638, PCI ROM image, Class Code 030000, Code Type 00 Copying VGA ROM Image from 0x021c0000 to 0xc0000, 0xd800 bytes $ cbmem ... 40:device configuration 5,399,404 (8,575) 65:Option ROM initialization 5,403,474 (4,070) 66:Option ROM copy done 5,403,488 (14) ... Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: I879fc1316f97417a4b82483d353abdbd02b98a31 Reviewed-on: https://review.coreboot.org/c/coreboot/+/56491 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/lib/Kconfig')
-rw-r--r--src/lib/Kconfig10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/Kconfig b/src/lib/Kconfig
index 41a23b27c062..41df1f1c8916 100644
--- a/src/lib/Kconfig
+++ b/src/lib/Kconfig
@@ -105,6 +105,16 @@ config CBFS_CACHE_ALIGN
help
Sets the alignment of the buffers returned by the cbfs_cache.
+config CBFS_PRELOAD
+ bool
+ depends on COOP_MULTITASKING
+ help
+ When enabled it will be possible to preload CBFS files into the
+ cbfs_cache. This helps reduce boot time by loading the files
+ in the background before they are actually required. This feature
+ depends on the read-only boot_device having a DMA controller to
+ perform the background transfer.
+
config PAYLOAD_PRELOAD
bool
depends on COOP_MULTITASKING