A question coreboot developers are commonly asked is this: “can you port coreboot to my board?”
For my first coreboot post I’d like to show some of the steps required to port coreboot to the Librem 13. In particular, this post is a good example of some of the challenges involved in such a port.
This post is also the first weekly progress update for the Librem 13. Please email me with questions or comments: larry.moberg@puri.sm.
LPC Bus
The Librem 13 has convenient test points for the LPC bus. This allows a bed-of-nails test setup to quickly diagnose problems during manufacturing. But it has the added bonus of facilitating coreboot development.
The earliest coreboot stages are the most important to get right. Debugging using port 0x80 writes on the Librem 13 is possible because port 0x80 writes are configured as LPC writes, which can be traced by connecting to the LPC pins.
And…It’s Gone
BIOS development is hard. I applied a little too much force on the SPI flash chip and tore the solder pads off the board.
I attached the LPC connection to a test setup and didn’t check using a multimeter before applying power. LAD2 was shorted to LAD3. This immediately bricked the laptop without even releasing any smoke. Remembering to double check for shorts is a tedious but important lesson.
The LPC bus wires go under the board. Don’t Cross The Streams!
Why It Matters
Imagine a laptop where the LPC bus is only available by soldering directly to the pins of the EC. Yes, they exist! That level of fine soldering is a significant barrier for future coreboot hackers. (The Librem 13’s external USB ports are all USB 3, which makes an EHCI debug port harder, but the LPC bus is a good substitute.)
Porting coreboot to a new laptop takes a lot of time and work. Even a good laptop design like the Librem 13 where the LPC pads are available still has a non-trivial level of engineering work to get to a Free Software BIOS.
Next week, I’ll document the engineering considerations around writing to the SPI flash chip, and how that affects coreboot development.