State of notebooks running coreboot Who am I

B.Sc. Electrical Engineering coreboot developer since 2015 privately motivated Maintaining Lenovo devices from day zero Working at 9eSec as Hardware- and Softwareengineer

Contact: [email protected] Why are Lenovo's so awesome?

Community driven Wide variety of platforms First class support Actively maintained by community BLOB free Cheap Easy to buy rugged case Good documentation Overview

Past Statistics Current state Future Significant changes over the last years Significant changes 2015

General TPM 1.2 support Fix infinite notification loop on shutdown ACPI warnings fixed X60/T60 Native graphics init Brightness control T400/T500 Hybrid graphic support T430s/x220/x230/T530 ACPI code for hybrid graphics ACPI Improved native raminit HDA verb fixes USB3 support X200 Enable PEG device Support disabled IGD Pen support in tablet mode Basic IOMMU support Fixed panel flickering

Picture by Infineon Press Photo, https://www.infineon.com/export/sites/default/media/press/Image/press_photo/TPM_SLB9635.jpg

Picture by http://www.usb.org, https://de.wikipedia.org/wiki/Universal_Serial_Bus#/media/Datei:SuperSpeed_USB.svg Significant changes 2016

General X200/T400 Don't configure EC on ACPI S3 Enable C4 CPU pstates Fix non working keyboard on boot C T430s/x220/x230/T530 Make use of common GPIO driver First version of shared hybrid graphics driver Allow the use of VGA option ROMs Initial support for dual GPU support Fixed eSATA port Split SandyBridge / IvyBridge native raminit X220/X201 Huge amount of native raminit fixes Postcar stage support Support "Yellow USB Always on" libgfxinit support libgfxinit support

T60/X60 Add HDA verb table C libgfxinit Improved docking code Ada SPARK

Pictures by Patrick Rudolph Significant changes 2017

General Improved thermal management through ACPI BDC detection support Support for "USB always on AC only" mode T400/T500 LED control for "thinkpad_acpi" Correctly report tabled mode Rewrite copy&pasted docking code Wait for keyboard in SeaBios Support dock button Fixed CMOS layout C Support dock LEDs Better panel & backlight detection

X201 X230/T420/T430/X220/T430s ThinkLight support USB Always On support

T500/T400/T420/T520/T430/T530

Share a single hybrid graphics driver

Pictures by Patrick Rudolph Significant changes 2018 C General T400/T500/W500 Remove unneeded includes Improved docking detection and initialisation Link c files instead of headers Unified variants in a single board folder Removed preprocessor guards Added various VBTs T430s/x220/x230/T530 Unified TPM stack More use of src//southbridge/common ACPI functions for "thinkpad_acpi" Support for "Dual Graphics" dGPU power handling in "Single Graphics" X201 mode Automatic WWAN detection Removed "C" native graphics init C

X200/X201/T500/T400/W500 C Libgfxinit support libgfxinit Ada SPARK

Picture by Infineon Press Photo: https://www.infineon.com/export/sites/default/media/press/Image/press_photo/TPM_SLB9635.jpg Significant changes 2019

General T400/X131e ACPI cleanups SMBIOS Got rid of unused headers Added VBT Set "Family" field in SMBIOS tables Add SMBIOS type 9 for "Express Card" slot T430s/x220/x230/T530 ACPI methods to set battery theshold Dual graphics fix Droped useless SMI handler code X201 Droped differentiation between Sandy / Ivy Bridge Removed unused C-states Disable unused devices to save power Removed duplicated HW init C Removed "C" native graphics init

X1 carbon(gen1) X60/z61/z61t Support USB always on Parallel MP init support (26msec less boot time) Deduplicate romstage.c / devicetree.cb Statistics Statistics supported boards

2015 2016 2017 2018 2019 now

11 boards 16 boards 30 boards 14 boards 22 boards 31 boards

R500 T430 T430s T500 s230u L520 T431s X201i T420 X1 W500

Pictures by Patrick Rudolph R500 W520 W530 Statistics commits in src/mainboard/lenovo

200

100

0

Pictures by Patrick Rudolph Statistics files in src/mainboard/lenovo

Picture by Patrick Rudolph Statistics source types in src/mainboard/lenovo

Mainboard source file type

ads asl c ASL cb default fmd h hex inc layout name h txt vbt C devicetree Work in Progress Verified Boot

Originally only used on ChromeBooks Ported to Lenovo

DONE Fn key as recovery boot switch FMAP/Kconfig on Lenovo "Sandy Bridge"

WIP Protect RO partition using SPI controller protected regions FMAP/Kconfig on Lenovo "Ivy Bridge"

TODO Gerrit change: Port to Intel Nehalem, Haswell, GM45, i945 #32617 Add vboot support to payloads

Pictures by Patrick Rudolph Nvidia Optimus

"Only" ACPI code No spec is available Lenovo uses SMM, difficult to reverse engineer Using "nouveau" as reference

DONE

Basic implementation works on T520

WIP

Needs tests on more platforms Gerrit change: Needs tests under regular use cases #28380

TODO

Port to Intel Nehalem and Intel Haswell

Picture by Nvidia, http://www.pcgameshardware.de/screenshots/medium/2010/02/Nvidia_Optimus-Logo.png Code deduplication C

Convert hardware configuration from C code to devicetree Share code between boards Some boards use the "variant" scheme, most do not

DONE Migrated LPC gendec code to devicetree.cb

WIP

Move complete MRC configuration into devicetree.cb Gerrit change: Needs tests on "MRC only" boards #32070

TODO Move GPIO config and HDA verbs to devicetree.cb Share "MRC configuration" with native raminit Merge old boards with new variant scheme Lenovo T440p

First Haswell board Last board without Intel BootGuard Not BLOB free, requires mrc.bin

DONE

Basic board support

WIP

Analysing new EC space Gerrit change: #34359 TODO #34639 Find the serial number in EC Dual Graphics support Optimus support Improved ACPI support Picture by Lenovo, https://www.lenovo.com/us/en/laptops/thinkpad/t-series/t440p/ Comparison

feature coreboot vendor

FOSS (BLOB free)

EOL firmware updates

Nvidia Optimus

Dual Graphics

Verified & Measured Boot debugging capabilities

EC firmware updates Possible Future Work T480 support Requires a device without "Intel Boot Guard" All devices have "Intel Boot Guard" enabled Uses Intel FSP 2.0 Thunderbolt and "Fn keys" doesn't work yet

Thinkpad E495 AMD ™ 3 3200U Processor Up to 32 GB DDR4 2400 MHz Picasso SoC support by Google for ChromeBooks 16 MiB flash

Picture by Lenovo, https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-e-series/E495/p/22TP2TEE495 Hardware-reduced ACPI

Aims to get rid of legacy hardware functionality Would allow to remove some (legacy) code Probably faster boot times Easier to maintain

Picture by UEFI, https://commons.wikimedia.org/wiki/File:Uefi_logo.svg FWUPd

automatic generation of coreboot builds FOSS platforms as license is compatible Starting with VBOOT enabled boards Requires libflashrom shiped by distros

fwupd firmware updater

Picture by FWUPd, https://github.com/fwupd/fwupd/blob/master/data/org.freedesktop.fwupd.svg support

Windows 10 needs additional ACPI quirks Thinkpad daemon expects certain ACPI functions Nvidia Optimus support?

Picture by Microsoft, https://www.microsoft.com/en-us/windows Questions?