coreboot 4.6 release notes
We are happy to announce the April 2017 release of coreboot, version 4.6.
The 4.6 release covers commit e74f5eaa to commit db508565
Since the last release in October 2016, the coreboot project had 1708 commits by 121 authors. The release tarballs and gpg signatures are available in the usual place at https://www.coreboot.org/downloads
There is a pgp signed 4.6 tag in the git repository, and a branch will be created as needed.
Changes: Past, ongoing, and future
CBMEM console development and the Linux Kernel
Our cbmem debug console was updated with some nice features. The cbmem console now persists between reboots and is able to be used on some platforms via late init. Also there is a new Linux kernel driver which removes the need for the old cbmem tool to read from the cbmem area. You can find the patch here https://patchwork.kernel.org/patch/9641997/ and it can be enabled via GOOGLE_MEMCONSOLE_COREBOOT kconfig option in your kernel - Note that this name may change going forward.
Critical bugs in TPM 1.2 support
coreboot currently has issues with the TPM 1.2 LPC driver implementation. This leads to a misbehavior in SeaBIOS where the TPM gets temporarily deactivated. We plan to publish the bugfix release 4.6.1 when we have these issues sorted out.
Native graphics and ram init improvements
The native graphics was reworked a while ago and should finally support Windows. Numerous bug fixes and EDID support is also now available. Finally, the native ram initialization for sandybridge/ivybridge platforms got patched and supports more RAM modules.
New and fresh payloads
SeaBIOS, FiLO, and iPXE were all recently updated to the latest versions. Https downloads are the default for all payloads now. We provide the libpayload project which is used for writing own payloads from scratch. The library is MOSTLY licensed under BSD and recently received new functionality in order to prepare for the upcoming replacement for the old nvramcui payload. This new payload is called cbui and is based on the nuklear graphics library including keyboard and mouse support. The cbui payload is currently expected to be merged into the main coreboot tree before the next release. The upstream repository is here: https://github.com/siro20/coreboot/tree/cbui/payloads/cbui
UEFI support: A long road to go
coreboot can be used with the edk2 UEFI implementation which is open source and available at Github. Sadly it is not currently integrated into the coreboot build. This has several reasons:
edk2 only supports GCC 4.8 profile. coreboot is now running on GCC 6.3.0.
Incompatibilities with code inside the edk2 which has not been updated.
We started to make progress with the integration into our sources and the hope is that by the end of the summer, we finally support the edk2 payload out-of-the- box. See the current patch state at http://review.coreboot.org/#/c/15057/
Fighting blobs and proprietary HW components
coreboot’s ultimate goal would be to replace any closed source firmware stack with free software components. Unfortunately this is not always possible due to signed binaries such as the Intel ME firmware, the AMD PSP and microcode. Recently, a way was discovered to let the Intel ME run in a functional error state and reduce it from 1.5/5MB to 80KB. It’s not perfect but it works from Nehalem up to Skylake based Intel systems. The tool is now integrated into the coreboot build system. The upstream repository is https://github.com/corna/me_cleaner
Another ongoing improvement is the new utility blobtool. It is currently used for generating the flash descriptor and GbE configuration data on older mainboard which are known to be free software. It can easily be extended for different binaries with well-defined specifications.
Did you say Ada?
coreboot now supports Ada, and a lot work was done integrating Ada into our toolchain. At the moment only the support for formal verification is missing and will be soon added. At that point, we can prove the absence of runtime errors in our Ada code. In short, everybody can start developing Ada code for our project.
The existing Ada code which can be used from now on is another native graphics initialization which will replace in the long term the current implementation. The native graphics code supports all Intel platforms up to skylake. We offer support for HDMI, VGA, DVI and DP external interfaces as well and is ready to be integrated into our mainboard implementations.
Toolchain updates
A new coreboot toolchain is out. The major toolchain change was going from GCC version 5.3.0 to 6.3.0. There were also minor version updates to GMP, MPFR, Binutils, GDB, IASL, and Clang.
Deprecation policy for boards
Starting with this release there will be a policy for deprecating unmaintained boards. See the end of this announcement for details.
Change Summary
Build system (20 commits)
Clean up Kconfig
Show more useful error messages
Codebase cleanup (94 commits)
Many fixes for files to pass checkpatch. Lots more to do here.
Remove commented out code
Updates to transition away from device_t
Work to get rid of included C files
Documentation (6 commits)
Start adding technotes/Design docs
Add Kconfig documentation
ACPI & acpigen library
Add GPIO macros
Clean up and add more functions to ACPIGEN library
EC (26 commits)
Add roda/it8518 embedded controller
TPM (41 commits)
Cleanup
Update ACPI ASL, Runtime generate ACPI table for TPM driver
Make SPI TPM driver CAR-safe
Update TPM init sequence
Devices (24 commits)
Add a new SPI device type
Allow devicetree accesses in postcar stage
PCIEXP_ASPM: Unify code with other PCI-e tuning
Lib (28 commits)
Add option to use Ada code in ramstage
bootstate: add arch specific hook at coreboot exit
cbfs: Add API to locate a file from specific region
Add library to handle SPD data in CBFS or DIMM
Add region file support
Turn CBMEM console into a ring buffer that can persist across reboots
Commonlib (11 commits)
Add xmalloc, xzmalloc and dma routines
Add input and output buffer helpers
Drivers (29 commits)
i2c: Pass in i2c_generic_config into i2c_generic_fill_ssdt
i2c/alps: Add support for ALPS Touchpad driver
i2c/generic: Add support for GPIO IRQ
i2c/generic: Enable support for adding PowerResource for device
i2c/hid: Add generic I2C HID driver
i2c/max98927: add i2c driver for Maxim 98927 codec
i2c/wacom_ts: Add support for WCOM touchscreen device driver
pc80/rtc: Check CMOS checksum BEFORE reading CMOS value
regulator: Add driver for handling GPIO-based fixed regulator
storage: Add SD/MMC/eMMC driver based upon depthcharge
SPI interface
Significant cleanup and refactoring
Include (17 commits)
cpu/intel: Add MSR to support enabling turbo frequency
elog: Add all EC event codes
SuperIO (12 commits)
Updates for ITE SIOs
Add 2 new chips
Consolidate code to use common routines
vboot (23 commits)
Add support for recovery hash space in TPM
RISC-V (25 commits)
Add lowRISC System On Chip support
Cbmem patches, move to common architectural code
ARM (16 commits)
Init new serial struct variables for samsung exynos5420 & allwinner a10
Fix verstage to use proper assembly versions of mem*()
RockChip RK3399 & platforms (46 commits)
Memory, I2C, USB, SD & Display fixes
X86 Intel (193 commits)
Broadwell/Sata: Add support for setting IOBP registers for Ports 2 and 3.
cpu/intel/common: Add/Use common function to set virtualization
drivers/intel/fsp1_1: Fix boot failure for non-verstage case
drivers/intel/fsp2_0: Reset on invalid stage cache.
drivers/intel/gma: Add textmode using libgfxinit & use scaling to simplify config
drivers/intel/mipi_camera: Add MIPI CSI camera SSDT generator
broadwell_de: Add SMM code
intelblocks/msr: Move intel x86 MSR definition into common location
intel/broadwell: Use the correct SATA port config for setting IOBP register
intel/wifi: Create ACPI objects for wifi SAR configuration
lynxpoint bd82x6x: Enable PCI-to-PCI bridge
mrc: Add support for separate training cache in recovery mode
nb/i945/early_init.c: Add FSB800 and 1067 to Egress Port Virtual Channel
nb/i945/raminit: Add fixes for 800MHz & 1067MHz FSB CPUs
nb/intel/gm45: Fix panel-power-sequence clock divisor
nb/intel/i945: Fix PEG port on 945gc & sdram_enhanced_addressing for channel1
nb/intel/pineview: Move to early cbmem
nb/pineview/raminit: Skip Jedec init on resume, fix hot reset path
nb/intel/sandybridge/gma: Always initialize DP buffer translation
sb/ich7: Use common/gpio.h to set up GPIOs
sb/intel/bd82x6x: Add TCO_Lock in finalize step
sb/intel/common/gpio: Support ICH9M and prior
sb/intel/i82801gx: Add i2c_block_read to smbus.h
sandybridge/raminit
Fix CAS Write Latency, disable_channel, normalize_training & odt stretch
Separate Sandybridge and Ivybridge
Reset internal state on fallback attempts
Find CMD rate per channel
soc/intel/common
Add common routines for HECI, ITSS, PCR, RTC, systemagent, UART, XHCI, & LPSS
Save Memory DIMM Information in SMBIOS table
Apollolake (183 commits)
Switch to common routines for LPSS, RTC, ITSS, UART, XHCI, & PCR
Enable turbo
Add save/restore variable MRC cache
Allow ApolloLake SoC to use FSP CAR Init
Allow USB2 eye pattern configuration in devicetree
Quark & platforms (14 commits)
Fix I2c & Serial port config
Add vboot support
ga-g41m-es2l, x4x northbridge & LGA775 (23 commits)
Memory fixes
Add S3 suspend/resume
Skylake / Kabylake (208 commits)
Add devicetree settings for acoustic noise mitigation
Perform CPU MP Init before FSP-S Init
Add support for GSPI controller & add GSPI controller get_config support
Enable Systemagent IMGU
Add USB Port Over Current support & Expand USB OC pins support PCH-H
Extract DIMM Information from FSP MEM INFO HOB
Add support for eSPI SMI events
Update ACPI & various methods
X86 amd (116 commits)
ACPI S3: Remove HIGH_MEMORY_SAVE where possible
AMD fam10 binaryPI: Remove invalid PCI ops on CPU domain
binaryPI platforms: Drop ACPI S3 support
sb/amd/sb700: Disable LPC ROM mapping when SPI Flash is used
southbridge/amd: Add LPC bridge acpi path for Family14 and SB800
arch/x86: remove CAR global migration when postcar stage is used
x86/acpi: Add VFCT table
AMD: vendorcode, AGESA, binaryPI (72 commits)
Cleanup & consolidate duplicate code
Fork for new cache-as-ram init code & Fix binaryPI cache-as-ram
Refactor S3 support functions and Delay ACPI S3 backup until ramstage loader
amd/mct:
Fix CsMux45 configuration, maximum read latency, & DQ mask calculation
Mainboards (198 commits)
asus/f2a85-m_le: Activate IOMMU support
lenovo/h8: Add USB Always On
google/oak: Enable dual DSI for rowan and the BOE 8-lane MIPI/DSI panel
google/parrot: Fix keyboard interrupts, DSDT
google/veyron: Work around RAM code strapping error
lenovo/t400: Rewrite dock from t60
intel/d510mo: enable ACPI resume from S3
intel/d945gclf: Fix resume from S3 suspend
lenovo/t400: Implement hybrid graphic in romstage
Enable libgfxinit on lenovo/t420 & x230, kontron/ktqm77, google/slippy
lenovo/x60,t60: Move EC CMOS parameters in checksummed space
mc_tcu3: Do not abort initialization of PTN3460 when HW-ID is missing
mc_tcu3: Swap LVDS even and odd lanes for a certain hardware
purism/librem13: Enable support for M.2 NVMe & Fix M.2 issues
Payloads (53 commits)
Update FILO, SeaBIOS, & iPXE versions
Many libpayload fixes and updates
Toolchain (19 commits)
Update GCC, Binutils, GMP, MPFR, GDB, IASL and LLVM
Utilities: (145 commits)
abuild: Build saved config files and print failed builds at the end
autoport: Create superiotool logs and fix romstage generator
board-status: Update bucketize script and add README file
cbfstool: Add cbfs-compression-tool and enable adding precompressed files
cbmem: Add custom aligned memcpy() implementation
ectool: Fix timeout on sending EC command and support OpenBSD
ifdtool: Fix ICH Gbe unlock
intelmetool: Add support for Wildcat Point LP, fix segfault on edge cases
inteltool: Add support for CH6-10, ICH10, Wildcat Point-LP and fix ICH SPIBAR
sconfig: Add a new SPI device type
superiotool: Add new chips - IT8783E/F, W83627DHG, W83627EHG, F71808A
Changes in chips
Added 1 processor & northbridge:
amd/pi/00670F00
Added 1 soc:
lowrisc/lowrisc
Removed 1 northbridge:
intel/e7501
Added 2 sios:
fintek/f71808a
ite/it8783ef
Mainboard changes
Added 52 mainboards and variants:
AMD Gardenia - AMD Stoney Ridge
Asus F2A85_M_PRO - AMD Family 15h Trinity
Asus P5GC_MX - Intel Socket LGA775
Gigabyte GA_945GCM_S2L & GA_945GCM_S2C variant - Intel Socket LGA775
Google Auron variants: Yuna, Gandof, Lulu - Intel Broadwell
Google Beltino variants: McCloud, Monroe, Tricky, Zako - Intel Haswell
Google Eve - Intel Kabylake
Google Fizz - Intel Kabylake
Google Gru variants: Bob, Scarlet - RockChip RK3399
Google Oak variants: Hana, Rowan - MediaTek MT8173
Google Poppy & Soraka variant - Intel Kabylake
Google Rambi variants: Banjo, Candy, Clapper, Glimmer, Gnawty, Heli, Kip, Orco, Quawks, Squawks, Sumo, Swanky, & Winky - Intel Baytrail
Google Reef variants: Sand, Snappy, Nasher - Intel Apollolake
Google Slippy variants: Leon, Wolf - Intel Haswell
Intel KBLRVP3 & KBLRVP7 - Intel Kabylake
Intel LEAFHILL - Intel Apollolake
Intel MINNOW3 - Intel Apollolake
Lenovo L520: Intel Sandybridge
Lenovo S230U: Intel Ivybridge
Lenovo X1 Carbon GEN1 - Intel Sandybridge
lowRISC NEXYS4DDR - RiscV
MSI MS7721 - AMD Bulldozer
PC Engines APU2 - AMD Jaguar
RODA RV11 & RW11 variant - Intel Ivybridge
Sapphire Pure Platinum H61 - Intel Socket LGA1155
Siemens MC_APL1 - Intel Apollolake
Removed 10 mainboard variants:
Google Auron (Still available as a base-board for variants)
Google Veyron Chromeboxes: Brain, Danger, Emile, Romy
Google Veyron Test Projects: Gus, Nicky, Pinky, Shark, Thea
Utilities
Added 2 new utilities:
blobtool
me_cleaner
Submodules
Updated 5 submodules
3rdparty/blobs (10 commits)
3rdparty/arm-trusted-firmware (172 commits)
3rdparty/vboot (158 commits)
3rdparty/chromeec/ (810 commits)
util/nvidia/cbootimage (2 commits)
Tested boards
The following boards were tested recently:
emulation qemu-q35 4.6-1
asus kgpe-d16 4.6-1
asus kfsn4-dre 4.6-1
asus p5gc-mx 4.6-1
lenovo x60 4.5-1681 / 4.6-7
lenovo x230 4.5-1674 / 4.6-27
asrock e350m1 4.5-1662 / 4.6-7
lenovo t420 4.5-1640
lenovo x200 4.5-1598 / 4.6-33
sapphire pureplatinumh61 4.5-1575
gigabyte ga-945gcm-s2l 4.5-1568
lenovo t400 4.5-1564
lenovo t60 4.5-1559
gigabyte m57sli 4.5-1526
purism librem13 4.5-1503
gigabyte ga-g41m-es2l 4.5-1444
google slippy 4.5-1441
intel d510mo 4.5-1341
coreboot statistics from e74f5eaa43 to db508565d2
Total Commits: 1708
Average Commits per day: 8.75
Total authors: 121
New authors: 34
Total Reviewers: 72
Total Submitters: 19
Total lines added: 177576
Total lines removed: - 107460
Total difference: 70116
Code removal after the 4.6 release
The only platform currently scheduled for removal is the bifferos/bifferboard & soc/rdc/r8610. This platform is one of two that still uses romcc to compile romstage and doesn’t have cache-as-ram in romstage - the others were all removed long ago. Additionally, it seems to be impossible to buy, so as far as it can be determined, no testing has been done recently.
Code removal after the 4.7 release
One of the things that the coreboot project has struggled with is how to maintain the older platforms while still moving the rest of the platforms forward. Currently there are numerous platforms in the codebase which have not been well maintained.
Starting with the 4.7 release in October, the coreboot leadership is going to set standards that platforms are expected to meet to remain in the active codebase. These will generally be announced 3 - 6 months in advance to give time to get changes in. The expectation is not necessarily even that all work to meet the goal will be completed, but it is expected that a reasonable effort has started to meet the goal at the time of the release. Regardless of the work that’s been done, platforms which have not met the goal by the following release will be removed.
The next expectation that will need to be met for all platforms is cbmem in romstage. This currently affects numerous platforms, including most, if not all of AMD’s platforms. Work to update many of these platforms has started, but there are others that have not made any progress towards this goal. A list of the platforms that are affected by this will be sent to the mailing list shortly.
Code removal after the 4.8 release
To further clean things up, starting with the 4.8 release, any platform that does not have a successful boot logged in the board_status repo in the previous year (that is, within the previous two releases) will be removed from the maintained coreboot codebase. Chips that do not have any associated boards will also be removed. These platforms will be announced before the release so that there is time for people to test if desired.
This is not meant to be a high bar, but as a measure to clean up the codebase and eliminate boards and chips that are actually no longer being used. The cleanup will happen just after the release, so the removed platforms will still be available in the release branch if desired. If there is still interest, developers can bring back old chips and boards by porting them to the new tree (and bringing them to current standards).
This gives everyone until April 2018 to get any boards that they care about tested before the first removal.
All the code removal information will also be sent to the mailing list along with additional details.