cbfs: Skip mcache in post-RAM stages before CBMEM is online

There have been a few issues with the new CBFS mcache code in stages
after romstage, where the mcache resides in CBMEM. In a few special
cases the stage may be doing a CBFS lookup before calling
cbmem_initialize(). To avoid breaking those cases, this patch makes the
CBFS code fall back to a lookup from flash if CBMEM hasn't been
reinitialized yet in those stages.

Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: Icf6d1a1288cb243d0c4c893cc58251687e2873b0
Reviewed-on: https://review.coreboot.org/c/coreboot/+/48429
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Julius Werner 2020-12-07 15:00:07 -08:00
parent 364f9de149
commit b652aaef99
1 changed files with 2 additions and 1 deletions

View File

@ -27,7 +27,8 @@ cb_err_t cbfs_boot_lookup(const char *name, bool force_ro,
size_t data_offset; size_t data_offset;
cb_err_t err = CB_CBFS_CACHE_FULL; cb_err_t err = CB_CBFS_CACHE_FULL;
if (!CONFIG(NO_CBFS_MCACHE) && !ENV_SMM) if (!CONFIG(NO_CBFS_MCACHE) && !ENV_SMM &&
(ENV_ROMSTAGE_OR_BEFORE || cbmem_online()))
err = cbfs_mcache_lookup(cbd->mcache, cbd->mcache_size, err = cbfs_mcache_lookup(cbd->mcache, cbd->mcache_size,
name, mdata, &data_offset); name, mdata, &data_offset);
if (err == CB_CBFS_CACHE_FULL) { if (err == CB_CBFS_CACHE_FULL) {