coreboot changelog Jan 5 – Jan 19

This changelog covers the 180 commits between January 5, 2016 and
January 19, 2016.  (af91b8b0 – 967881d0)

We’re preparing for the coreboot 4.3 release, expected to happen sometime in the next week, so there has been a lot of activity surrounding Intel’s Skylake chips, both in the mainboards and SOC directories. The Skylake and braswell platforms are finally being build-tested by jenkins, which will help keep the platforms working.

The changes in cbfstool are continuing to roll in, although this should be wrapping up before long as the merger of cbfs with FMAP is completed.

The effort to standardize coreboot’s license headers across all files is just starting, and will be going on for a few weeks as we verify that all source files have the correct headers.  We’ve added and improved the lint checkers for these so expect failures from jenkins if files with non-compliant headers are pushed.

A fair amount of work was done in the build system in the past couple of weeks.  This removed the warnings about cross compilers not existing unless that architecture is currently being built, fixed some dependency issues, and fixed several other minor issues. A make target to check the versions of the coreboot toolchain was also added.

We had a slight toolchain change, going to MPFR version 3.1.3 to fix some issues seen on the upcoming Power8 processor.

Additional changes added NetBSD support for various utilities, and update the intel/gm45 and intel/pineview northbridges.

Added 1 mainboard:
——————-
– google/guado

coreboot statistics
——————-
– Total commits: 180
– New authors: 13
– Total authors: 45
– Total reviewers: 19
– Total lines added: 9168
– Total lines removed: -2130
– Total difference: 7038

=== Authors – Number of commits ===
Martin Roth                  56 (31.111%)
David Wu                     15 (8.333%)
Aaron Durbin                 12 (6.667%)
Duncan Laurie                 9 (5.000%)
Subrata Banik                 8 (4.444%)
Rizwan Qureshi                7 (3.889%)
Nico Huber                    6 (3.333%)
Patrick Georgi                6 (3.333%)
Timothy Pearson               5 (2.778%)
Barnali Sarkar                5 (2.778%)
Total Authors: 45

=== Authors – Lines added ===
Martin Roth                2359 (25.731%)
Matt DeVillier             2243 (24.466%)
Aaron Durbin               1988 (21.684%)
Rizwan Qureshi              606 (6.610%)
Subrata Banik               292 (3.185%)
Barnali Sarkar              178 (1.942%)
robbie zhang                158 (1.723%)
Nico Huber                  144 (1.571%)
Andrey Korolyov             133 (1.451%)
David Wu                    128 (1.396%)

=== Authors – Lines removed ===
Martin Roth                1038 (48.732%)
Barnali Sarkar              173 (8.122%)
Aaron Durbin                144 (6.761%)
Nico Huber                  108 (5.070%)
Patrick Georgi               98 (4.601%)
Shaunak Saha                 81 (3.803%)
Paul Menzel                  69 (3.239%)
Patrick Rudolph              68 (3.192%)
Subrata Banik                64 (3.005%)
Duncan Laurie                61 (2.864%)

=== Reviewers – Number of patches reviewed ===
Martin Roth                  91 (50.556%)
Stefan Reinauer              43 (23.889%)
Patrick Georgi               43 (23.889%)
Paul Menzel                  23 (12.778%)
Alexandru Gagniuc            13 (7.222%)
Nico Huber                    7 (3.889%)
York Yang                     3 (1.667%)
Werner Zeh                    3 (1.667%)
Aaron Durbin                  3 (1.667%)
Total Reviewers: 19

=== Submitters – Number of patches submitted ===
Martin Roth                  89 (49.444%)
Patrick Georgi               73 (40.556%)
Aaron Durbin                  9 (5.000%)
Stefan Reinauer               4 (2.222%)
Vladimir Serbinenko           3 (1.667%)
Werner Zeh                    1 (0.556%)
Nico Huber                    1 (0.556%)
Total Submitters: 7

coreboot changelog

The week leading up to November 15th has seen 132 commits (8bd1c36..3ca4116).
The leading themes were the removal of support for old mainboards, and the integration of more non-AGESA AMD support code for Family 10h to 15h that spans everything from fixes to memory configuration to workarounds to problems in the SATA controller, to new feature development, enabling CC6 power-state support and everything in-between.

Other chipset level contributions provided bug fixes to the drivers supporting Intel’s Skylake and AMD’s newer chipsets and mainboards (Kabini, Merlin Falcon, Mullins). Rockchip RK3288 now properly configures displays whether they’re connected through HDMI or DVI.

ARM/ARM64 saw some cleanup in its transition between stages to accommodate more processor configurations on ARM64 SoCs (that sometimes come with smaller 32bit cores for supporting purposes).

Also new is the Intel i8900 southbridge support that can be used with Sandy Bridge and Ivy Bridge, with an Intel reference board, the stargo2, and the SUNW Ultra40m2 board support.

The USB device mode driver for DesignWare’s USB2 controller (DWC2) in libpayload became more robust. The other notable field of work in libpayload is work with PDcurses’ upstream to synchronize their development and our copy.

In terms of the ongoing efforts to clean up old cruft across the entire tree, references to the getpir utility were dropped, after the tool was removed nearly two years ago. We also removed empty mainboard driver files that used to be required by the build system, even if the mainboard needed no special handling in its ramstage.
To help keep the quality bar high, automated testing now also covers intelvbttool. Another forward-looking addition is a clang-format specification of our coding style. It isn’t complete yet, but the hope is that we can eventually use it to simplify adhering to a consistent style and then enforce it.
The script to help organizing the commit log for release notes was pushed into util/release.

coreboot changelog

This changelog covers the week up to November 8th, spanning 63 commits (f6dc544..8bd1c36).

Last week’s code submissions gave us a lot of improvements pretty much everywhere, but the most user-visible change is probably the addition of ACPI S3 support to asrock/e350m1.

Speaking of ACPI, support for the DMAR tables used to report Intel IOMMU (VT-d) information to the operating system was significantly improved and is enabled on Sandy Bridge and Ivy Bridge.

Another user visible change is the rework of the fallback mechanism in our bootblock, making its CMOS-backed state handling more robust.

cbmem also saw some changes in that all its entries are now listed separately in cbtables (and util/cbmem uses that new structure) to cut down on what coreboot exposes as interface.

On the architectures side, ARM64 dropped its sec(urity) mon(itor) code in favor of using ARM Ltd’s Open Source arm-trusted-firmware, which we already import in 3rdparty.

The integration of commits to support AMD Fam15h CPUs with a non-AGESA implementation that integrates better with coreboot saw some progress. The AMD Binary PI side saw a number of bug fixes, too.

Boards based on Intel’s Skylake architecture also saw more development.

In addition to these targetted developments, there was also the usual set of bug fixes across the entire tree, providing some cleanups to the code and configuration system, some portability fixes for Windows and Mac OS X, deduplication of ACPI table generation on i945, and the removal of a Super IO that wasn’t used by any board (and thus isn’t even build tested).

The USB device mode driver in libpayload for the DesignWare USB2 controller works better under debugging, while the XHCI USB3 host controller driver gained a workaround for Intel XHCI controllers.

Finally, the board-status scripts that parse boot success reports into the list of supported motherboards on the wiki were modified to point out more clearly that the list on the wiki describes the current status. This became necessary because some users assumed that it’s outdated.
Since the i440bx mainboards that were at the top of the list may have contributed to that impression, desktop boards were moved down in favor of notebooks and server boards where most of the current development happens.

coreboot changelog

This changelog covers 2 weeks up to November 1st, during which coreboot-4.2 was released.
In that timeframe, the repository saw 214 commits spanning d98471c..f6dc544.

Before we get to the stuff that the tech media gets excited about, the first thing to report about is a bunch of efforts to improve the reliability of our tree and the automated testing we conduct.
abuild, the utility for automatically building the default configuration of every board in the tree, learned to deal with mainboard directories that cover multiple variants of a board. This brings back build test coverage for google/veyron.
Various programs in the util/ hierarchy of the tree are now automatically tested by our build test infrastructure, and the related code saw some refactoring to make testing more tools really simple. During that development, some Makefiles below util/ were also cleaned up.
Another area of clean ups was the conversion of `#ifdef` statements to using the `IS_ENABLED` macro. This ensures that even unused code paths are syntactically validated before the optimizer drops them, leading to the same binary output with better build test coverage.
In preparation of future improvements, we gained a lint tool for Kconfig files. It will be hooked up to the build system once the tree is clean, until then it provides a way to see what’s still missing. Check out `util/lint/kconfig_lint` if you’re curious.
As a proof of concept, util/fuzz-tests now provides an environment to test the jpeg decoder we ship for splash screens using afl-fuzz. The same approach can be applied to other coreboot components to find potential crash bugs (or worse).
Finally, several chip drivers were removed because they had no user in the tree anymore and thus saw no testing at all. Some of them will likely come back together with new mainboards that use them.
In addition to the code development to improve code quality, `util/scripts/maintainers.go` provides a way to query the MAINTAINERS database that we’re building, as one piece of a larger effort to improve code quality through formal submodule maintainership.
Another formal clean-up was the tree-wide removal of the last paragraph of the GPL license header in files, the one denoting where to obtain the license text. First, we ship it in the tree, second, it’s probably easier to get with a quick search engine request than by writing a letter to a US post address that may or may not be current.

Rockchip’s RK3288 gained support for additional power/clock states and a more robust EDID handling.
The ongoing effort to support booting in long mode (64 bit) on AMD64 progressed by the integration of changes to make SMM handling and AMD chipset drivers 64bit clean.
Some ACPI for older Intel chipsets was consolidated and is now used for multiple chipset generations.
The Intel GMA driver has also seen improvements, allowing brightness levels for laptop panels to be configured per board, and to disable the graphics chip entirely.
In terms of drivers, the aspeed driver provides native VGA text, and there were improvements to superio and i2c chip drivers, supporting more of their features.
Sandybridge now initializes CPUs serially for robustness reasons, and Intel FSP supports loading microcode from coreboot.

cbfstool now extracts stages and rmodules as ELF files, including relocation information for the former, so that roundtrips of add-stage/extract/add-stage become possible. It now also compiles more reliably on Cygwin.

libpayload saw the additional of a graphics library to layout images on a framebuffer using framebuffer independent coordinates, and some bug fixes to its USB drivers.

In addition to all those cleanups and little new features, coreboot also provides support for a couple new boards, in particular two Intel Skylake based boards by Google (google/chell and google/lars) as well as Asus KFSN4-DRE with K8 CPUs and Asus KGPE-D16 with more recent AMD CPUs (Fam10h and Fam15h).
All related chipsets also saw significant improvements, of which the still ongoing effort to provide non-AGESA implementations for the Fam15h CPU, as well as a ton (metric, in case you’re curious) of bugfixes and feature developments (for example Suspend to RAM) for all AMD CPUs starting with K8 is particularly notable.

Besides those changes, and minor (but valuable) contributions to improve the code style, there’s a bucket list of improvements across the entire tree: more robust SMM entry on i945, fixes to our SMBIOS table generation, changes to the resource allocator to become more robust and IOMMU friendly and to measure the time it takes, and improvements to the robustness of our build process.

Announcing coreboot 4.2

Halloween 2015 release – just as scary as that sounds
Dear coreboot community,

today marks the release of coreboot 4.2, the second release on our time based release schedule.
Since 4.1 there were 936 commits by 90 authors, increasing the code base by approximately 17000 lines of code. We saw 35 new contributors – welcome to coreboot! More than 34 developers were active as reviewers in that period.
Thanks go to all contributors who helped shape this release.

As with 4.1, the release tarballs are available at http://www.coreboot.org/releases/. There’s also a 4.2 tag and branch in the git repository.

This marks the first release that features a changelog comparing it to the previous release. There was some limited testing to make sure that the code is usable, and it boots on some devices. A structured test plan will only become part of the release procedure of future versions.
I’m grateful to Martin for assembling this release’s changelog.

This is also the first release that will be followed by the removal of old, unused code. There will be a policy on how to announce deprecation and removal of mainboard and chipset code for future releases.

Regards,
Patrick

Log of commit d5e6618a4f076610e683b174c4dd5108d960c785 to
commit 439a527014fa0cb3e4ef60ba59e5c57c737b4444

Changes between 4.1 and 4.2
—————————
Build system:
– Store a minimized coreboot config file in cbfs instead of the full config
– Store the payload config and revision in CBFS when that info is available
– Add -compression option for cbfs-files-y. Valid entries are now -file,
-type, -align, and -compression
– Change Microcode inclusion method from building .h files to pre-built binaries
– Update Builder tests for each commit to test utilities and run lint tools
– Many other small makefile and build changes and fixes
– Remove expert mode as a Kconfig option

Utilities:
– Many fixes and updates to many utilities (158 total commits)
– ifdtool: Update for skylake, handle region masks correctly
– crossgcc: Update to gcc 5.2.0
– kconfig: Add strict mode to fail on kconfig errors and warnings
– vgabios: Significant fixes to remove issues in linking into coreboot code
– Add script to parse MAINTAINERS file
– Add Kconfig lint tool
– Create a common library to share coreboot routines with utilities
– Significant changes and cleanup to cbfstool (81 commits). Major changes:
– Update cbfstool to change the internal location of FSP binaries when adding
them
– Decompress stage files on extraction and turn them into ELF binaries
– Header sizes are now variable, containing extended attributes
– Add compression tags to all cbfs headers so all cbfs files can be compressed
– Add and align CBFS components in one pass instead of two
– Add XIP support for X86 to relocate the romstage when it’s added
– Removed locate command as it’s no longer needed
– Add bootblock and cbfs_header file types so the master header knows about
them
– Prefer FMAP data to CBFS master header if FMAP data exists
– Add hashes to cbfs file metadata for verification of images

Payloads:
– SeaBIOS: update stable release from 1.7.5 to 1.8.2
– Libpayload had some significant changes (61 commits). Major changes:
– Add support for fmap tables
– Add support for SuperSpeed (3.0) USB hubs
– Updates and bugfixes for DesignWare OTG controller (DWC2)
– Add video_printf to print text with specified foreground & background
colors
– Updates to match changes to cbfs/cbfstool
– Add cbgfx, a library to show graphics and text on a display
– Read cbfs offset and size from sysinfo when available

Vendorcode:
– fsp_baytrail: Support Baytrail FSP Gold 4 release
– AMD binary PI: add support for fan control
– Work to get AMD AGESA to compile correctly as 64-bit code
– Add standalone (XIP) verstage support for x86 to verify romstage

Mainboards:
– New Mainboards:
– apple/macbookair4_2 – Sandy/Ivy Bridge with Panther / Cougar point
chipset
– asus/kgpe-d16 – AMD Family 10, SB700/SR5650 platform
– emulation/spike-riscv – RISCV virtualized platform
– google/chell – Intel Skylake chrome platform
– google/cyan – Intel Braswell chrome platform
– google/glados – Intel Skylake chrome platform
– google/lars – Intel Skylake chrome platform
– intel/kunimitsu – Intel Skylake chrome platform
– intel/sklrvp – Intel Skylake reference platform
– intel/strago – Intel Braswell chrome platform
– Cleanups of many mainboards – several patches each for:
– amd/bettong
– getac/p470
– google/auron, google/smaug and google/veyron_rialto
– pcengines/apu1
– siemens/mc_tcu3
– Combine the google/veyron_(jerry, mighty, minnie, pinkie, shark & speedy)
mainboards into the single google/veyron mainboard directory

Console:
– Add EM100 ‘hyper term’ spi console support in ramstage & smm
– Add console support for verstage

ARM:
– armv7: use asm coded memory operations for 32/16 bit read/write
– Many cleanups to the nvidia tegra chips (40 patches)

RISC-V:
– Add trap handling
– Add virtual Memory setup

X86:
– Remove and re-add Rangeley and Ivy Bridge / panther point FSP platforms
– Update microcode update parser to use stock AMD microcode blobs from CBFS
– ACPI: Align FACS to 64 byte boundary. Fixes FWTS error
– AMD/SB700: Init devices in early boot, restore power state after power
failure. Add IDE/SATA asl code
– Add initial support for AMD Socket G34 processors
– Add tick frequency to timestamp table to calculate boot times more accurately
– Unify X86 romstage / ramstage linking to match other platforms
– Start preparing X86 bootblock for non-memory-mapped BIOS media
– cpu/amd/car: Add Suspend to RAM (S3) support
– Native VGA init fixes on several platforms
– Significant updates to FSP 1.1 code for cleanup and cbfstool changes
– SMMhandler: on i945..nehalem, crash if LAPIC overlaps with ASEG to prevent
the memory sinkhole smm hack
Drivers:
– Add native text mode support for the Aspeed AST2050
– w83795: Add support for for fan control and voltage monitoring
– Intel GMA ACPI consolidation and improvements
– Set up the 8254 timer before running option ROMs
– Resource allocator: Page align memory mapped PCI resources

Lib:
– Derive fmap name from offset/size
– Several edid fixes
– Updates to cbfs matching changes in cbfstool

Submodules:
———–
3rdparty/blobs:
Total commits: 16
Log of commit 61d663e39bc96530900c3232ccea7365ab9dad0b to
commit aab093f0824b6d26b57a1ce220ba0d577e37ad49
– AMD Merlin Falcon: Update to CarrizoPI 1.1.0.0 (Binary PI 1.4)
– AMD Steppe Eagle: Update to MullinsPI 1.0.0.A (Binary PI 1.1)
– Update microcode to binary blobs. Remove old .h microcode files

3rdparty/arm-trusted-firmware:
– No Changes

3rdparty/vboot:
Total commits: 41
Log of commit fbf631c845c08299f0bcbae3f311c5807d34c0d6 to
commit d6723ed12b429834c2627c009aab58f0db20ce73
– Update the code to determine the write protect line gpio value
– Several updates to futility and image_signing scripts
– Update crossystem to accommodate Android mosys location
– Support reboot requested by secdata
– Add NV flag to default boot legacy OS

util/nvidia/cbootimage:
– No Changes

coreboot changelog

This report covers commits b66d673..d98471c, the week up to Sunday, 2015-10-18

This week has an interesting distribution in its commits: A few very large and impactful commits (and commit sets), but otherwise lots of tiny little things. The last months typically saw more cohesive changes each week, affecting a small number of subsystems or drivers – but not this week.

The biggest item in terms of code size was the reintroduction of Intel’s Rangeley SoC and related mainboard, which were found to still be requested by users after all.

The biggest item in terms of impact was probably the improvement of our automated build testing by adding our lint tests and build tests for various utilities to our build infrastructure, reporting any errors (and preventing them from creeping into the master branch). We don’t test all tools yet, but adding the others should be painless now. libpayload also gained a new test configuration so both libcurses implementations are now covered.

The vboot verstage concept was ported to x86 and added to FSP 1.1, allowing a separate verification stage to check romstage before executing it (from a potentially unsafe location).

AMD microcode can now be loaded from CBFS, and using their standard format instead of a custom layout that was used by coreboot until now.

Apart from these, changes happened all across the tree:
SMBIOS tables report memory vendors; ACPI was cleaned up to work better with new ACPI compiler versions; there’s better reporting for MTRR configurations, and related macros have more sensible names; the ARMv7 code avoids miscompilation with gcc-5.2, which is significant because that’s our standard compiler version; Intel GMA ACPI saw improvements; there were tons of style fixes in preparation to deal with the addition of lint tests to the automated tests; cbfstool can now add files after files of the same name were removed from an image; the coreinfo payload has the sense to reboot after it’s done; the cbmem utility is more robust, and several more cleanups and bugfixes.

coreboot changelog

This report covers commits b142b84afb to b66d673, up to Sunday, 2015-10-11
Last week saw the addition of the MacBookAir4,2 mainboard, which is especially notable because autoport did the largest part of the port – automatically, as the name implies.
In the course of this, autoport and some tools it relies on were improved.

Native VGA init saw some more bug fixes and better auto-configuration, so less values to configure by hand. Our other major reverse engineering effort, RAM init (and related functionality) for Sandy Bridge and Ivy Bridge, was also improved.

The ongoing vboot integration saw progress in adding support for a separate verification stage on x86 (not finished yet). In the course of these changes, the early x86 init code was refactored a bit to make moving Cache-as-RAM code to other stages easier. vboot also gained the first fixes to support CBFS as filesystem for the updateable flash regions, which still use a custom format.

There were also cleanups to the way the x86 bootblock is built, more closely matching our other stage build processes.

On the feature development side, Intel’s Skylake and Braswell chipsets as well as the related common Intel code saw numerous improvements and updates to new FSP interface versions.

The other notable feature was the addition of Dediprog EM100 “hyper term” support (ramstage only at this time) that allows using this SPI emulator as coreboot console output. Our em100 tool implementation also gained the ability to read this format.

libpayload gained the ability to deal with extended attributes containing hashes, which will be useful for payloads integrating with vboot.

Finally, Kconfig and the build system have seen a couple of cleanups, hiding items that aren’t user serviceable, as did buildgcc, our compiler toolchain generating script.

coreboot conference Bonn 2015 – trip report

Wow, what a whirlwind the last few weeks has been. I have been in the road for several weeks and finally on the last flight before home. Travel is funny. It seems like a busy, hectic, whirlwind, but it is also a lot of time to sit and reflect with little interruption. Since leaving Bonn, I have been trying to put together my thoughts about all information, discussions, and ideas that took place over the three days.

My overall impression is: Damn! What a great group of individuals we have working on coreboot.  It takes a lot of work to put together an event and Carl-Daniel and the BSI hosted a great event.

Day1

I was really surprised how many people attended Friday. It was a little intimidating walking into a room full of about 40+ people (maybe Carl-Daniel can give us some official numbers). I settled in saying hi to a few familiar faces before we got started for the morning talks. The morning and early afternoon talks were very good I won’t cover them all here, please see the agenda. Most of the topics seemed to have bits of things that setup for the topics I wanted to cover later in the afternoon.

I had several talks prepared this year and my overarching theme was about scaling and growing coreboot. I’ve participated in numerous upstream efforts from vendors like Google, Intel, AMD, and Sage for the last year or more and have seen the number of contributors go from a few individuals to dozens of dozens.  The community has done a great job at digesting the huge amount of new code, members, and attention coreboot has received, but with the growth, we were starting to hit the limits of some of the current processes. Earlier in 2015, we’d made a number of changes to structure and organization, but we need to continue to formalize some processes and communication, so we can manage the influx of code and participation. Fortunately the community is very flexible and had already accepted most of this growth. I planned to discuss ways we can keep the flexibility, but add some light process to make community’s participation easier.

The topic of my first talk was the coreboot binary policy. What the community expects when contributing a binary to the separate 3rdparty/blobs repository. There seemed a general consensus that it was a good idea and discussion quickly went away from the policy and towards acceptance of a particular type of binary or if this policy would prevent vendors from pushing binaries. These were good points, but orthogonal to the need for instructing vendors what is expected by the community for binaries in the repository. The policy is still out for comment and review ( see post on the mailing list), but should be official shortly.

My second talk, with the help of Stefan and Patrick, was about working with vendors and some of the things we are doing to make the interaction easier. The main point was the coreboot versions and the quarterly release cycle, which had been announced in the spring. This cycle allows vendors and the community to plan feature releases and sync points to coordinate development.

The last talk of the day was presented by Stefan and me and was about the coreboot consortium and the progress is has made over the last year (which isn’t much). We are still stuck on it seeming like a good idea and vendors would like a consortium to exist, but we don’t have agreement on how and what should be done. This presentation was a call to action for the vendors that were present to engage the consortium and to get this ball moving for 2016.

It felt like I’d talked most of the day, but then it was off to dinner for some authentic regional German food and beer.

Day2

On the second day, we had a number of talks from David and Ron in California via Hangouts. I was impressed that it worked quiet well and kudos to those guys for staying up until 3am to present.

David’s talk on flashrom and the differences with the Chromium and flashrom source was really good. It seems that we may finally be able to re-merge the Chromium fork and that there will be some other changes to help flashrom get more participation. I think that it is moving to git and gerrit soon, and that there are just a few technical issues that should be sorted soon.

Ron like Go. That is all….  ;).

Actually, Ron’s talk on U-root was pretty cool. Read the paper: It U-root: A Go-based, Firmware Embeddable Root File System with On-demand Compilation  https://www.usenix.org/system/files/conference/atc15/atc15-paper-minnich.pdf

Besides the topics, the hacking room was starting to fill up and a lot of side discussions and ideas were being thrown around. One funny memory was seeing the building security person poke his head in and see all the hardware and soldering station covering the tables and walk away with a grin and shaking his head.

In the afternoon Card-Daniel had organized a trip to the The Government Bunker (Regierungsbunker). A cold war relic and now a museum. It is a massive structure and an impressive tour. https://en.wikipedia.org/wiki/Government_bunker_(Germany)

Day 3

The last day was a focused hacking day. Again, lots of discussion and ideas for improvements and devices to port and hack on. I had an interesting conversation about mesh networks, German WiFi access rules, and the influx of refugees that are now arriving in Bonn. The volunteer maintained mesh networks allow the refugees to call home, find family, get news, and access the internet for services etc. There are rules in Germany about liability and responsibility of the WiFi access, so the mesh VPN to hubs that allow the clearing of that data. I found this all super interesting.

At the end of the day, I lead a discussion on community building and how coreboot can improve in 2016. The discussion was really good and very frank about some of the problems we are having (most of which people had been discussing in smaller groups all weekend). We came out of it with some specific actions we would like to do in 2015-2016.

Have more meetups (number 1 comment all weekend):

  • Proposed hacker meetup in Paris around Fosdem
  • 2016 in Bonn is probable
  • Need a US meeting organizer, location, and date (San Jose, Boston, and Denver were mentioned)

Have more education:

  • Create slides, talks, videos
  • CCC hacker space talks and LUG talks
  • New user landing page (not for developers)
  • onboarding – coreboot install parties
  • better wiki management/cleanup (find owner for the wiki?)

Add more testing (the second most talked about side topic this year):

  • REACTS and  LAVA actively investigated/developed
  • Create a board-status disk image
  • Add additional test
  • gerrit/jenkins integration

Make an official gerrit policy:

  • guidelines
  • enforcement
  • workflow

Form a coreboot consortium entity

There are a lot of other attendees, so I hope that they chime in with their experience. I’m sure I missed lots of stuff. As for my talks, I hope that they were helpful and everyone should feel free to send me feedback.  Thanks again to Carl-Daniel and the BSI.

All the conference topics and other details are here: http://www.coreboot.org/Coreboot_conference_Bonn_2015

coreboot changelog

This report covers commits 2f953d3 to b142b84afb, up to early Monday, 2015-10-05

Last week has seen the removal of FSP support for Sandybridge and Ivy Bridge, in favor of the native raminit code and the originally supported MRC binary, with the native code path becoming the default code path on these chipsets.

The microcode handling was reworked further so that Intel microcode is now stored as binary files in 3rdparty/blobs, instead of being kept in the coreboot tree and processed by the compiler.

Development on cbfstool continued, adding the capability to relocate FSP binaries on add, and the capability to store hashes of file data to the file header, which can be a useful primitive for a verified boot process.
For this, the recently introduced commonlib was used to share code between coreboot and cbfstool.

The verstage code for Chrome OS’ vboot was refactored to allow this separate verification stage on x86. verstage was introduced to allow moving the romstage to updateable storage (that can be used only after verification which is what verstage is doing), and the idea is to make this also available on x86.
The change allowed code deduplication for several ARM chipsets, too.
For this, our Cache-as-RAM initialization code also became more independent from romstage code.

Kconfig’s strict mode (akin to gcc’s “warnings-as-errors”) is now available in more of its frontends. This should help fix Kconfig issues.

Several bug fixes also made it in, improving support for older gcc versions, for building on Mac OS X, to get native VGA init to build again for multiple Intel chipsets and more.

coreboot changelog, most-of-september edition

This report covers 410f9ad to 2f953d304e

The biweekly cadence messed up my timing so this report covers five weeks and for that reason gets to report more development (314 commits).

The biggest chunk (over one third of the commits) covers Intel Skylake development, where boards and chipset code saw misc improvements and tons of clean ups (eg. dropping ACPI code and fragments in the devicetrees that were inherited from older chipset development and aren’t appropriate anymore).
There also was a notable effort of unifying common code across the more recent Intel SoCs, removing lots of duplicated code all over the place.

As far as cleaning up the code base goes, we also got rid of a number of Kconfig definitions and uses across the tree (Intel, AMD, MIPS – something for everybody). Some definitions were booleans that were always enabled with no reason to ever disable, other symbols were selected even though they didn’t even exist anymore.

Another field of clean-up work was the EDID code used for native graphics init, which is the default on ARM SoCs (simply because there is nothing like VGABIOS there). Two structs that both defined standard fields of this “Extended Display Identification Data” standard were reworked to avoid the duplication, avoiding issues where a field is filled in for one representation but not the other.

On x86, the romstage is now relocated for its final location in CBFS by cbfstool, obsoleting the old approach that had us link it twice, once to determine its final size and then to the actual location it’s supposed to run from. This reused code from our rmodule support that already contained knowledge about relocation fields.
In the future this same approach may be extended to other files that need to be executed in place such as the FSP binary.
This effort also had x86’s linking setup become more similar to what all other architectures are doing, for romstage and ramstage, as well as some more clean-ups in the general area.
Finally, the way the romstage is linked together was simplified, resulting in less “magic” in the build system to collect the various pieces of initialization code.

The romstage change eliminated the need for cbfstool’s “locate” command, and so it was removed. cbfstool also saw other extensions, the biggest one a compatible change to the format to allow for per-file attributes in CBFS. These attributes can contain additional information about a file, currently the compression method and uncompressed size of a file. cbfstool and the build system were extended to allow compressing files, libpayload is able to uncompress these files.
The libpayload change leads to a change in behavior for some specialized cbfs access routines (eg. cbfs_load_optionrom) in that they return malloc’d memory instead of a pointer into CBFS, which may lead to a memory leak in payloads.
cbfstool’s support for flashmap “partition tables” was also improved: It already could create flashmap partitioned images, and now can create a backward compatible CBFS master header, so an fmap-based image can still be used by older CBFS parsers (which right now means: pretty much all of them).
If an fmap is available, cbfstool will prefer it over a master header, but that should have no visible effect yet.
The changes also seeked to improve the internal structure of the cbfstool codebase, although much more work is necessary in that area.

libpayload saw the addition of a video_printf function to write colored text with support for text justification.
Its USB device controller driver for DeviceWare based controllers became more robust, too.
It also got back a POSIX-compatible ffs() implementation that was dropped for a while, got coreboot-compatible write8/16/32 implementations and saw a couple of bugfixes.

Another clean-up topic is the reduction of code that is #ifdef’d away for invidivual stages. To this end, we now expose declarations (but no definitions) for various functions even in romstage, so files compile. Use of ramstage-level functions like malloc in romstage still fail, but at link time. The linker is smart enough these days to pinpoint the error to a line in a source file, so no information is lost. The upside is that the code flow isn’t broken by preprocessor conditionals every few lines.
In a similar light, more #if CONFIG_FOO statements were replaced by if (IS_ENABLED(CONFIG_FOO)), exposing the guarded code to the compiler, which avoids errors from accumulating in non-standard configurations: Now the code needs to pass the compiler at least syntactically even in a standard configuration.
Finally, Chrome OS vboot related code was abstracted away in SoC code, to make it more useful in non-Chrome OS configurations more easily.

To reduce code duplication, we also started building a common library (src/commonlib/), containing things like CBFS data structure declarations or endianess handling functions that are useful in both coreboot and its utilities.

On the AMD side, there were various bugfixes both for new (merlin falcon) and old (Fam10) chipsets.

ARM64 and Tegra210 saw various bugfixes and improvements to power use. For the latter, coreboot also learned how to reserve memory for other functions than the main processor.
Rockchip’s RK3288 ARMv7 SoC also saw a number of bug fixes and the code was restructured to use a single mainboard directory for a large number of very similar Google Veyron mainboards based on that SoC.

Our RISCV support now boots on the Spike simulator which (besides supporting a wider variety of emulators) is notable because unlike the QEmu RISCV support, Spike supports RISCV’s revised ABI.
Speaking of emulators, recent versions of qemu-x86 expect the firmware to initialize the LAPIC, which we now do.

The timestamps recording code was extended to also store the timebase (ticks) so that the userspace tool in the OS doesn’t need to try to figure it out – probably wrongly because by the time the OS started, the clock changed and with it, on some CPUs, the tick duration.
cbmem also gained an option “-T” to display timestamps in a machine readable format.
During the course of that development, some timestamps code was simplified, relying more on generic code over per-chipset implementations.

The ongoing effort to move CPU microcode into CBFS (and to store these as binaries in 3rdparty/blobs instead of header files in the main sources) saw some progress.

Our crosscompiler generator script is more helpful on errors and learned building gcc (the “GNU compiler suite”) for non-C languages, including some extensions to support Ada in particular.
abuild now produces proper logs when building the tools (below util/), making it easier to track down issues in that area from error reports on our continuous build system.

The standard seabios released used by our build system is now 1.8.2, up from 1.7.5. In other payload related news, coreboot doesn’t initialize PS/2 keyboards by itself by default, but expects the payload to do so. The option to re-enable the initialization (as well as the code it controls) is still around.

The intel-related utilities saw some improvements, with ifdtool supporting the new IFD v2 better (as used on Skylake), and inteltool able to detect Intel’s 4-Series.

The tree also saw some improvements with regard to portability and should behave better when building on MinGW, Cygwin, Mac OS X and FreeBSD host.