The 4.22 release is planned for mid-November, 2023
Update this document with changes that should be in the release notes.
Add changes that need a full description here
This section should have full descriptions and can or should have a link to the referenced commits.
x86 pre-memory stages did not support the .data
section and as a result developers were required to include runtime initialization code instead of relying on C global variable definition.
Other platforms do not have that limitation. Hence, resolving it helps to align code and reduce compilation based restriction (cf. the use of ENV_HAS_DATA_SECTION
compilation flag in various places of coreboot code).
There were three types of binary to consider:
bootblock
stage is a bit different as it uses Cache-As-Ram but the memory mapping and its entry code differentCONFIG_NO_XIP_EARLY_STAGES
).eXecute-In-Place pre-memory stages (#1) relies on a new ELF segment as the code segment Virtual Memory Address and Load Memory Address are identical but the data needs to be linked in cache-As-RAM (VMA) but to be stored right after the code (LMA).
bootblock
(#2) also uses this new segment to store the data right after the code and it loads it to Cache-As-RAM at runtime. However, the code involved is different.
Not eXecute-In-Place pre-memory stages (#3) did not really need any special work other than enabling a .data section as the code and data VMA / LMA translation vector is the same.
Related important commits:
The CBFS cache scratchpad offers a generic way to decompress CBFS files through the cbfs_map() function without having to reserve a per-file specific memory region.
CBFS cache x86 support has been added to pre-memory stages and ramstage.
pre-memory stages: The new PRERAM_CBFS_CACHE_SIZE
Kconfig can be used to set the pre-memory stages CBFS cache size. A cache size of zero disables the CBFS cache feature for all pre-memory stages. The default value is 16 KiB which seems a reasonable minimal value enough to satisfy basic needs such as the decompression of a small configuration file. This setting can be adjusted depending on the platform needs and capabilities.
Note that we have set this size to zero for all the platforms without enough space in Cache-As-RAM to accommodate the default size.
ramstage: The new RAMSTAGE_CBFS_CACHE_SIZE
Kconfig can be used to set the ramstage CBFS cache size. A cache size of zero disables the CBFS cache feature for ramstage. Similarly to pre-memory stages support, the default size is 16 KiB.
As we want to support S3 suspend/resume use-case, the CBFS cache memory cannot be released to the operating system and therefore cannot be an unreserved memory region. The ramstage CBFS cache scratchpad is defined as a simple C static buffer as it allows us to keep the simple and robust design of the static initialization of the cbfs_cache
global variable (cf. src/lib/cbfs.c).
However, since some AMD SoCs (cf. SOC_AMD_COMMON_BLOCK_NONCAR
Kconfig) already define a _cbfs_cache
region we also introduced a POSTRAM_CBFS_CACHE_IN_BSS
Kconfig to gate the use of a static buffer as the CBFS cache scratchpad.
The following are changes across a number of patches, or changes worth noting, but not needing a full description.