This patch adds a new CBFS "mcache" (metadata cache) -- a memory buffer that stores the headers of all CBFS files. Similar to the existing FMAP cache, this cache should reduce the amount of SPI accesses we need to do every boot: rather than having to re-read all CBFS headers from SPI flash every time we're looking for a file, we can just walk the same list in this in-memory copy and finally use it to directly access the flash at the right position for the file data. This patch adds the code to support the cache but doesn't enable it on any platform. The next one will turn it on by default. Change-Id: I5b1084bfdad1c6ab0ee1b143ed8dd796827f4c65 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38423 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
85 lines
2.4 KiB
C
85 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef __SYMBOLS_H
|
|
#define __SYMBOLS_H
|
|
|
|
#include <types.h>
|
|
|
|
extern u8 _dram[];
|
|
|
|
#define REGION_SIZE(name) (_e##name - _##name)
|
|
|
|
#define DECLARE_REGION(name) \
|
|
extern u8 _##name[]; \
|
|
extern u8 _e##name[];
|
|
|
|
/*
|
|
* Regions can be declared optional if not all configurations provide them in
|
|
* memlayout and you want code to be able to check for their existence at
|
|
* runtime. Not every region that is architecture or platform-specific should
|
|
* use this -- only declare regions optional if the code *accessing* them runs
|
|
* both on configurations that have the region and those that don't. That code
|
|
* should then check (REGION_SIZE(name) != 0) before accessing it.
|
|
*/
|
|
#define DECLARE_OPTIONAL_REGION(name) \
|
|
__weak extern u8 _##name[]; \
|
|
__weak extern u8 _e##name[];
|
|
|
|
DECLARE_REGION(sram)
|
|
DECLARE_OPTIONAL_REGION(timestamp)
|
|
DECLARE_REGION(preram_cbmem_console)
|
|
DECLARE_REGION(cbmem_init_hooks)
|
|
DECLARE_REGION(stack)
|
|
DECLARE_REGION(preram_cbfs_cache)
|
|
DECLARE_REGION(postram_cbfs_cache)
|
|
DECLARE_REGION(cbfs_cache)
|
|
DECLARE_REGION(cbfs_mcache)
|
|
DECLARE_REGION(fmap_cache)
|
|
DECLARE_REGION(tpm_tcpa_log)
|
|
|
|
#if ENV_ROMSTAGE && CONFIG(ASAN_IN_ROMSTAGE)
|
|
DECLARE_REGION(bss)
|
|
DECLARE_REGION(asan_shadow)
|
|
#endif
|
|
|
|
#if ENV_RAMSTAGE && CONFIG(ASAN_IN_RAMSTAGE)
|
|
DECLARE_REGION(data)
|
|
DECLARE_REGION(heap)
|
|
DECLARE_REGION(asan_shadow)
|
|
#endif
|
|
|
|
/* Regions for execution units. */
|
|
|
|
DECLARE_REGION(payload)
|
|
/* "program" always refers to the current execution unit. */
|
|
DECLARE_REGION(program)
|
|
/* _<stage>_size is always the maximum amount allocated in memlayout, whereas
|
|
_program_size gives the actual memory footprint *used* by current stage. */
|
|
DECLARE_REGION(decompressor)
|
|
DECLARE_REGION(bootblock)
|
|
DECLARE_REGION(verstage)
|
|
DECLARE_REGION(romstage)
|
|
DECLARE_REGION(postcar)
|
|
DECLARE_REGION(ramstage)
|
|
|
|
/* Arch-specific, move to <arch/symbols.h> if they become too many. */
|
|
|
|
DECLARE_REGION(pagetables)
|
|
DECLARE_REGION(ttb)
|
|
DECLARE_OPTIONAL_REGION(ttb_subtables)
|
|
DECLARE_REGION(dma_coherent)
|
|
DECLARE_REGION(soc_registers)
|
|
DECLARE_REGION(framebuffer)
|
|
DECLARE_REGION(pdpt)
|
|
DECLARE_OPTIONAL_REGION(opensbi)
|
|
DECLARE_OPTIONAL_REGION(bl31)
|
|
DECLARE_REGION(transfer_buffer)
|
|
|
|
/* Returns true when pre-RAM symbols are known to the linker.
|
|
* (Does not necessarily mean that the memory is accessible.) */
|
|
static inline int preram_symbols_available(void)
|
|
{
|
|
return !ENV_X86 || ENV_ROMSTAGE_OR_BEFORE;
|
|
}
|
|
|
|
#endif /* __SYMBOLS_H */
|