Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for T420 and T430, enable FBWhiptail for X220. #539

Closed
wants to merge 24 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
662a1dd
Add support for the Lenovo ThinkPad T420.
snmcmillan Mar 20, 2019
94e6e09
Fix the autodetection of ifdtool and me_cleaner.
snmcmillan Mar 20, 2019
be21220
Whoops, added the entire directory!
snmcmillan Mar 20, 2019
d38190e
Actually point to the T420 coreboot config file...
snmcmillan Mar 20, 2019
f2bdd98
Merge branch 'master' of https://github.com/SebastianMcMillan/heads
snmcmillan Mar 20, 2019
62d6a6c
Enable FBWhiptail mode for X220 and T420
snmcmillan Mar 26, 2019
6fb0a9d
Don't use iommu settings because it breaks graphics after kexec.
snmcmillan Mar 27, 2019
41e5301
Remove sandybridge patches. Causes 50 second delay when booting up, r…
snmcmillan Mar 27, 2019
584690f
Fixed TPM romstage measurements.
snmcmillan Mar 27, 2019
04d7df7
Turn on iommu, but do not enable igfx-off
snmcmillan Mar 27, 2019
cb74314
Revert "Fixed TPM romstage measurements."
snmcmillan Mar 28, 2019
04b59d2
Revert "Remove sandybridge patches. Causes 50 second delay when booti…
snmcmillan Mar 28, 2019
fe03f79
One more thing: Add flash.sh definitions for X220 and T420.
snmcmillan Mar 28, 2019
f17c519
Required SPI flash chip option to flahs internally
tlaurion Apr 9, 2019
5a437ea
Temporary coreboot config required to debug through cbmem under heads
tlaurion Apr 9, 2019
f3c8a2d
Revert "Required SPI flash chip option to flahs internally"
tlaurion Apr 9, 2019
68e2c76
Merge pull request #2 from tlaurion/x220_cbmem_temp_debug_requirements
snmcmillan Apr 9, 2019
4b5c915
Add preliminary support for T430, use universal install-phase init to…
snmcmillan Apr 11, 2019
92e7a37
Remove debugging config options to ready the updated X220 config for …
snmcmillan Apr 17, 2019
3b0f2cf
Update X220 configs to prepare FBWhiptail X220 for merge.
snmcmillan Apr 17, 2019
472759b
fix T430 coreboot name for main config
snmcmillan Apr 22, 2019
c6ba34f
fix board name for t430
snmcmillan Apr 22, 2019
350a344
Fix X220 flash.sh support and add T430 support
snmcmillan Apr 22, 2019
1e500d8
Fixed typo in flash.sh
snmcmillan May 28, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions blobs/t420/extract.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/bin/bash

function printusage {
echo "Usage: $0 -f <romdump> -m <me_cleaner>(optional) -i <ifdtool>(optional)"
exit 0
}

BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ "$#" -eq 0 ]; then printusage; fi

while getopts ":f:m:i:" opt; do
case $opt in
f)
FILE="$OPTARG"
;;
m)
if [ -x "$OPTARG" ]; then
MECLEAN="$OPTARG"
fi
;;
i)
if [ -x "$OPTARG" ]; then
IFDTOOL="$OPTARG"
fi
;;
esac
done

if [ -z "$MECLEAN" ]; then
MECLEAN=`command -v $BLOBDIR/../../build/coreboot-*/util/me_cleaner/me_cleaner.py 2>&1`
if [ -z "$MECLEAN" ]; then
echo "me_cleaner.py required but not found or specified with -m. Aborting."
exit 1;
fi
fi

if [ -z "$IFDTOOL" ]; then
IFDTOOL=`command -v $BLOBDIR/../../build/coreboot-*/util/ifdtool/ifdtool 2>&1`
if [ -z "$IFDTOOL" ]; then
echo "ifdtool required but not found or specified with -m. Aborting."
exit 1;
fi
fi

echo "FILE: $FILE"
echo "ME: $MECLEAN"
echo "IFD: $IFDTOOL"

bioscopy=$(mktemp)
extractdir=$(mktemp -d)

cp "$FILE" $bioscopy

cd "$extractdir"
$IFDTOOL -x $bioscopy
cp "$extractdir/flashregion_3_gbe.bin" "$BLOBDIR/gbe.bin"
$MECLEAN -O "$BLOBDIR/me.bin" -r -t "$extractdir/flashregion_2_intel_me.bin"
$IFDTOOL -n "$BLOBDIR/layout.txt" $bioscopy
$IFDTOOL -x $bioscopy.new
cp "$extractdir/flashregion_0_flashdescriptor.bin" "$BLOBDIR/ifd.bin"

rm "$bioscopy"
rm "$bioscopy.new"
rm -r "$extractdir"
4 changes: 4 additions & 0 deletions blobs/t420/layout.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
00000000:00000fff fd
00018000:007fffff bios
00003000:00017fff me
00001000:00002fff gbe
29 changes: 29 additions & 0 deletions blobs/t420/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
To build for T420, we need to have the following files in this folder:
* `me.bin` - ME binary that has been stripped and truncated with me_cleaner
* `gbe.bin` - Network card blob from the original firmware
* `ifd.bin` - Flash layout file has been provided as text

To get the binaries, start with a copy of the original Lenovo firmware image.
If you do not have one already, you can read one out from the laptops SPI flash with flashrom

```
flashrom -p <programmer> -r original.bin
```

Set `<programmer>` to the flashrom programmer type that you will use (for example, `linux_spi:dev=/dev/spidev0.0` on a Raspberry Pi).

Once you have the image, the provided extraction script will extract the files needed.

```
./extract.sh -f <romdump>
```

Use the options '-m' and '-i' to provide me_cleaner and ifdtool if they can not be located automatically.

The flash layout will be automatically adjusted and the ME image cleaned and truncated.

You can now compile the image with:

```
make BOARD=t420
```
7 changes: 4 additions & 3 deletions blobs/x220/extract.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ function printusage {
exit 0
}

BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ "$#" -eq 0 ]; then printusage; fi

while getopts ":f:m:i:" opt; do
Expand All @@ -26,15 +28,15 @@ while getopts ":f:m:i:" opt; do
done

if [ -z "$MECLEAN" ]; then
MECLEAN=`command -v me_cleaner.py 2>&1`
MECLEAN=`command -v $BLOBDIR/../../build/coreboot-*/util/me_cleaner/me_cleaner.py 2>&1`
if [ -z "$MECLEAN" ]; then
echo "me_cleaner.py required but not found or specified with -m. Aborting."
exit 1;
fi
fi

if [ -z "$IFDTOOL" ]; then
IFDTOOL=`command -v ifdtool 2>&1`
IFDTOOL=`command -v $BLOBDIR/../../build/coreboot-*/util/ifdtool/ifdtool 2>&1`
if [ -z "$IFDTOOL" ]; then
echo "ifdtool required but not found or specified with -m. Aborting."
exit 1;
Expand All @@ -47,7 +49,6 @@ echo "IFD: $IFDTOOL"

bioscopy=$(mktemp)
extractdir=$(mktemp -d)
BLOBDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cp "$FILE" $bioscopy

Expand Down
36 changes: 36 additions & 0 deletions boards/t420/t420.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Configuration for a T420 running Qubes and other OS, T420 is identical to X230 on the Linux Side of things.
export CONFIG_COREBOOT=y
CONFIG_COREBOOT_CONFIG=config/coreboot-t420.config
CONFIG_LINUX_CONFIG=config/linux-x230.config

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
CONFIG_FLASHTOOLS=y
CONFIG_GPG2=y
CONFIG_KEXEC=y
CONFIG_UTIL_LINUX=y
CONFIG_LVM2=y
CONFIG_MBEDTLS=y
CONFIG_PCIUTILS=y
CONFIG_POPT=y
CONFIG_QRENCODE=y
CONFIG_TPMTOTP=y
CONFIG_DROPBEAR=y

CONFIG_CAIRO=y
CONFIG_FBWHIPTAIL=y

CONFIG_LINUX_USB=y
CONFIG_LINUX_E1000E=y

export CONFIG_TPM=y
export CONFIG_BOOTSCRIPT=/bin/gui-init
export CONFIG_BOOT_REQ_HASH=n
export CONFIG_BOOT_REQ_ROLLBACK=n
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on"
export CONFIG_BOOT_KERNEL_REMOVE="quiet"
export CONFIG_BOOT_DEV="/dev/sda1"
export CONFIG_BOOT_GUI_MENU_NAME="ThinkPad T420 Heads Boot Menu"
export CONFIG_USB_BOOT_DEV="/dev/sdb1"
export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0"
export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0"
28 changes: 28 additions & 0 deletions boards/t430-flash/t430-flash.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Minimal configuration for a t430 to support flashrom, USB and networking
BOARD=t430.flash

export CONFIG_COREBOOT=y
CONFIG_FLASHROM=y
#CONFIG_GPG=y
CONFIG_FLASHTOOLS=y
CONFIG_PCIUTILS=y
#CONFIG_MBEDTLS=y
#CONFIG_QRENCODE=y
#CONFIG_TPMTOTP=y
#CONFIG_DROPBEAR=y

CONFIG_LINUX_CONFIG=config/linux-x230-flash.config
CONFIG_LINUX_USB=y
CONFIG_LINUX_E1000E=y

export CONFIG_USB_BOOT_DEV="/dev/sdb1"
export CONFIG_BOOTSCRIPT=/bin/install.init

# This board is "special" in that we only want the top 4 MB of the ROM
# for flashing into SPI flash 1 on the mainboard. This is enough to
# allow the board to boot into a minimal Heads and read the full
# ROM from an external USB media.
all: $(build)/$(BOARD)/$(BOARD).rom
$(build)/$(BOARD)/$(BOARD).rom: $(build)/$(BOARD)/coreboot.rom
dd of=$@ if=$< bs=65536 count=64 skip=128
sha256sum $@
44 changes: 44 additions & 0 deletions boards/t430/t430.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Configuration for a t430 running Qubes and other OSes
export CONFIG_COREBOOT=y
CONFIG_COREBOOT_CONFIG=config/coreboot-t430.config
CONFIG_LINUX_CONFIG=config/linux-x230.config

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
CONFIG_FLASHTOOLS=y
CONFIG_GPG2=y
CONFIG_KEXEC=y
CONFIG_UTIL_LINUX=y
CONFIG_LVM2=y
CONFIG_MBEDTLS=y
CONFIG_PCIUTILS=y
CONFIG_POPT=y
CONFIG_QRENCODE=y
CONFIG_TPMTOTP=y
CONFIG_DROPBEAR=y

CONFIG_CAIRO=y
CONFIG_FBWHIPTAIL=y

CONFIG_LINUX_USB=y
CONFIG_LINUX_E1000E=y

export CONFIG_TPM=y
export CONFIG_BOOTSCRIPT=/bin/gui-init
export CONFIG_BOOT_REQ_HASH=n
export CONFIG_BOOT_REQ_ROLLBACK=n
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on intel_iommu=igfx_off"
export CONFIG_BOOT_KERNEL_REMOVE="quiet"
export CONFIG_BOOT_DEV="/dev/sda1"
export CONFIG_BOOT_GUI_MENU_NAME="Thinkpad T430 Heads Boot Menu"
export CONFIG_USB_BOOT_DEV="/dev/sdb1"
export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0"
export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0"

# This board has two SPI flash chips, an 8 MB that holds the IFD,
# the ME image and part of the coreboot image, and a 4 MB one that
# has the rest of the coreboot and the reset vector.
#
# Only flashing to the bios region is safe to do. The easiest is to
# flash internally when the IFD is unlocked for writing, and x230-flash
# is installed first.
16 changes: 11 additions & 5 deletions boards/x220/x220.config
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Configuration for a x220 running Qubes and other OS
# The Linux configuration is close enough to the x230
# Configuration for a x220 running Qubes and other OS, X220 is identical to X230 on the Linux Side of things.
export CONFIG_COREBOOT=y
CONFIG_COREBOOT_CONFIG=config/coreboot-x220.config
CONFIG_LINUX_CONFIG=config/linux-x230.config

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
CONFIG_GPG=y
CONFIG_FLASHTOOLS=y
CONFIG_GPG2=y
CONFIG_KEXEC=y
CONFIG_UTIL_LINUX=y
CONFIG_LVM2=y
Expand All @@ -17,14 +17,20 @@ CONFIG_QRENCODE=y
CONFIG_TPMTOTP=y
CONFIG_DROPBEAR=y

CONFIG_CAIRO=y
CONFIG_FBWHIPTAIL=y

CONFIG_LINUX_USB=y
CONFIG_LINUX_E1000E=y

export CONFIG_BOOTSCRIPT=/bin/generic-init
export CONFIG_TPM=y
export CONFIG_BOOTSCRIPT=/bin/gui-init
export CONFIG_BOOT_REQ_HASH=n
export CONFIG_BOOT_REQ_ROLLBACK=n
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on"
export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on intel_iommu=igfx_off"
export CONFIG_BOOT_KERNEL_REMOVE="quiet"
export CONFIG_BOOT_DEV="/dev/sda1"
export CONFIG_BOOT_GUI_MENU_NAME="ThinkPad X220 Heads Boot Menu"
export CONFIG_USB_BOOT_DEV="/dev/sdb1"
export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0"
export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0"
2 changes: 1 addition & 1 deletion boards/x230-flash/x230-flash.config
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ CONFIG_LINUX_USB=y
CONFIG_LINUX_E1000E=y

export CONFIG_USB_BOOT_DEV="/dev/sdb1"
export CONFIG_BOOTSCRIPT=/bin/x230-flash.init
export CONFIG_BOOTSCRIPT=/bin/install.init

# This board is "special" in that we only want the top 4 MB of the ROM
# for flashing into SPI flash 1 on the mainboard. This is enough to
Expand Down
25 changes: 25 additions & 0 deletions config/coreboot-t420.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
CONFIG_LOCALVERSION="heads"
# CONFIG_INCLUDE_CONFIG_FILE is not set
# CONFIG_COLLECT_TIMESTAMPS is not set
CONFIG_USE_BLOBS=y
CONFIG_MEASURED_BOOT=y
CONFIG_VENDOR_LENOVO=y
CONFIG_CBFS_SIZE=0x7e8000
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
CONFIG_HAVE_IFD_BIN=y
CONFIG_HAVE_ME_BIN=y
CONFIG_HAVE_GBE_BIN=y
CONFIG_IFD_BIN_PATH="../../blobs/t420/ifd.bin"
CONFIG_ME_BIN_PATH="../../blobs/t420/me.bin"
CONFIG_BOARD_LENOVO_T420=y
CONFIG_DRIVERS_PS2_KEYBOARD=y
CONFIG_NO_POST=y
CONFIG_CHECK_ME=y
CONFIG_GBE_BIN_PATH="../../blobs/t420/gbe.bin"
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5=y
CONFIG_PAYLOAD_LINUX=y
CONFIG_PAYLOAD_FILE="../../build/t420/bzImage"
CONFIG_LINUX_COMMAND_LINE="quiet"
CONFIG_LINUX_INITRD="../../build/t420/initrd.cpio.xz"
CONFIG_DEBUG_SMM_RELOCATION=y
18 changes: 18 additions & 0 deletions config/coreboot-t430-flash.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
CONFIG_LOCALVERSION="heads"
# CONFIG_INCLUDE_CONFIG_FILE is not set
# CONFIG_COLLECT_TIMESTAMPS is not set
CONFIG_USE_BLOBS=y
CONFIG_MEASURED_BOOT=y
CONFIG_VENDOR_LENOVO=y
CONFIG_CBFS_SIZE=0x400000
# CONFIG_POST_DEVICE is not set
CONFIG_DRIVERS_UART_8250IO=y
CONFIG_BOARD_LENOVO_THINKPAD_T430=y
CONFIG_DRIVERS_PS2_KEYBOARD=y
CONFIG_UART_PCI_ADDR=0
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_8=y
CONFIG_PAYLOAD_LINUX=y
CONFIG_PAYLOAD_FILE="../../build/t430-flash/bzImage"
CONFIG_LINUX_INITRD="../../build/t430-flash/initrd.cpio.xz"
CONFIG_DEBUG_SMM_RELOCATION=y
24 changes: 24 additions & 0 deletions config/coreboot-t430.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
CONFIG_LOCALVERSION="heads"
# CONFIG_INCLUDE_CONFIG_FILE is not set
# CONFIG_COLLECT_TIMESTAMPS is not set
CONFIG_USE_BLOBS=y
CONFIG_MEASURED_BOOT=y
CONFIG_VENDOR_LENOVO=y
CONFIG_CBFS_SIZE=0x700000
# CONFIG_POST_IO is not set
# CONFIG_POST_DEVICE is not set
CONFIG_DRIVERS_UART_8250IO=y
CONFIG_BOARD_LENOVO_THINKPAD_T430=y
CONFIG_DRIVERS_PS2_KEYBOARD=y
CONFIG_UART_PCI_ADDR=0
CONFIG_NO_GFX_INIT=y
# CONFIG_CONSOLE_SERIAL is not set
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5=y
CONFIG_PAYLOAD_LINUX=y
CONFIG_PAYLOAD_FILE="../../build/t430/bzImage"
CONFIG_PAYLOAD_OPTIONS=""
# CONFIG_PXE is not set
CONFIG_LINUX_COMMAND_LINE="intel_iommu=igfx_off quiet"
CONFIG_LINUX_INITRD="../../build/t430/initrd.cpio.xz"
CONFIG_DEBUG_SMM_RELOCATION=y
3 changes: 1 addition & 2 deletions config/coreboot-x220.config
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ CONFIG_NO_POST=y
CONFIG_CHECK_ME=y
CONFIG_GBE_BIN_PATH="../../blobs/x220/gbe.bin"
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x80000
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5=y
CONFIG_PAYLOAD_LINUX=y
CONFIG_PAYLOAD_FILE="../../build/x220/bzImage"
CONFIG_LINUX_COMMAND_LINE="quiet"
CONFIG_LINUX_COMMAND_LINE="intel_iommu=igfx_off quiet loglevel=3"
CONFIG_LINUX_INITRD="../../build/x220/initrd.cpio.xz"
CONFIG_DEBUG_SMM_RELOCATION=y
11 changes: 10 additions & 1 deletion initrd/bin/flash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,20 @@ case "$CONFIG_BOARD" in
x230* )
FLASHROM_OPTIONS='--force --noverify-all --programmer internal --ifd --image bios'
;;
t430* )
FLASHROM_OPTIONS='--force --noverify-all --programmer internal:laptop=force_I_want_a_brick --ifd --image bios'
;;
t420* )
FLASHROM_OPTIONS='--force --noverify-all -p internal:laptop=force_I_want_a_brick --ifd --image bios'
;;
x220* )
FLASHROM_OPTIONS='--force --noverify-all -p internal --ifd --image bios -c MX25L6405D'
;;
"kgpe-d16" )
FLASHROM_OPTIONS='--force --noverify --programmer internal'
;;
* )
die "ERROR: No board has been configured!\n\nEach board requires specific flashrom options and it's unsafe to flash without them.\n\nAborting."
die "ERROR: No board has been configured!\nEach board requires specific flashrom options and it's unsafe to flash without them.\nAborting."
;;
esac

Expand Down
Loading