The next release is planned for the 19th of February, 2024
These notes cover the latest updates and improvements to coreboot over the past three months. A big thank you to the returning contributors as well as the 14 individuals who committed code for the first time. We greatly appreciate everyone's dedication and expertise. As with past releases, this one reflects a commitment to open source innovation, security enhancements, and expanding hardware support.
The week between tagging a release and announcing it publicly is used to test the tagged version and make sure everything is working as we expect. This is done instead of freezing the tree and doing release candidates before the release.
For the 4.22 release cycle we found an uninitialized variable error on the sandybridge/ivybridge platforms and rolled that into the 4.22.01 release package.
This release is the last release to use the incrementing 4.xx release name scheme. For future releases, coreboot is switching to a Year.Month.Sub-version naming scheme. As such, the next release, scheduled for February of 2024 will be numbered 24.02, with the sub-version of 00 implied. If we need to do a fix or future release of the 24.02 release, we'll append the values .01, .02 and so on to the initial release value.
Immediately after the 4.21 release, the coreboot project changed the default git branch from 'master' to 'main'. For the first couple of months after the change, The master branch was synced with the main branch several times a day, allowing people time to update any scripts. As of 2023-11-01, the sync rate has slowed to once a week. This will continue until the next release, at which time the master branch will be removed.
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 definitions.
Other platforms do not have that limitation. Hence, resolving it helps to align code and reduce compilation-based restrictions (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) rely 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) 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 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's 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 the 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.
Having a separate romstage is only desirable:
When this is not the case there is no need for the extra complexity that romstage brings. Including the romstage sources inside the bootblock substantially reduces the total code footprint. Often the resulting code is 10-20k smaller.
This is controlled via a Kconfig option.
This implements an API to report the presence of an external display on Intel silicon. The API uses information from the transcoder and framebuffer to determine if an external display is connected.
For example, if the transcoder is attached to any DDI ports other than DDI-A (eDP), and the framebuffer is initialized, then it is likely that an external display is present.
This information can be used by payloads to determine whether or not to power on the display, even if eDP is not initialized.
AMD's Windows display drivers validate the checksum of the VBIOS data in the VFCT table (which gets modified by the FSP GOP driver), so ensure it is set correctly after copying the VBIOS into the table if the FSP GOP driver was run. Without the correct checksum, the Windows GPU drivers will fail to load with a code 43 error in Device Manager.
Issues from the coreboot bugtracker: https://ticket.coreboot.org/
+-----+-----------------------------------------------------------------+ | # | Subject | +=====+=================================================================+ | 499 | edk2 boot fails with RESOURCE_ALLOCATION_TOP_DOWN enabled | +-----+-----------------------------------------------------------------+ | 496 | Missing malloc check in libpayload | +-----+-----------------------------------------------------------------+ | 484 | No USB keyboard support with secondary payloads | +-----+-----------------------------------------------------------------+ | 414 | X9SAE-V: No USB keyboard init on SeaBIOS using Radeon RX 6800XT | +-----+-----------------------------------------------------------------+
+-----+-----------------------------------------------------------------+ | # | Subject | +=====+=================================================================+ | 509 | SD Card hotplug not working on Apollo Lake | +-----+-----------------------------------------------------------------+ | 507 | Windows GPU driver fails on Google guybrush & skyrim boards | +-----+-----------------------------------------------------------------+ | 506 | APL/GML don't boot OS when CPU microcode included "from tree" | +-----+-----------------------------------------------------------------+ | 505 | Harcuvar CRB - 15 of 16 cores present in the operating system | +-----+-----------------------------------------------------------------+ | 499 | T440p - EDK2 fails with RESOURCE_ALLOCATION_TOP_DOWN enabled | +-----+-----------------------------------------------------------------+ | 495 | Stoney Chromebooks not booting PSPSecureOS | +-----+-----------------------------------------------------------------+ | 478 | X200 booting Linux takes a long time with TSC | +-----+-----------------------------------------------------------------+ | 474 | X200s crashes after graphic init with 8GB RAM | +-----+-----------------------------------------------------------------+ | 457 | Haswell (t440p): CAR mem region conflicts with CBFS_SIZE > 8mb | +-----+-----------------------------------------------------------------+ | 453 | Intel HDMI / DP Audio not present in Windows after libgfxinit | +-----+-----------------------------------------------------------------+ | 449 | ThinkPad T440p fail to start, continuous beeping & LED blinking | +-----+-----------------------------------------------------------------+ | 448 | Thinkpad T440P ACPI Battery Value Issues | +-----+-----------------------------------------------------------------+ | 446 | Optiplex 9010 No Post | +-----+-----------------------------------------------------------------+ | 439 | Lenovo X201 Turbo Boost not working (stuck on 2,4GHz) | +-----+-----------------------------------------------------------------+ | 427 | x200: Two battery charging issues | +-----+-----------------------------------------------------------------+ | 412 | x230 reboots on suspend | +-----+-----------------------------------------------------------------+ | 393 | T500 restarts rather than waking up from suspend | +-----+-----------------------------------------------------------------+ | 350 | I225 PCIe device not detected on Harcuvar | +-----+-----------------------------------------------------------------+