Flashing coreboot on ThinkPad T530/W530 without complete disassembly using custom IFD layout

The ThinkPad T530/W530 boards have two flash chips of 8M and 4M. To flash coreboot, you usually need to flash the 4M one. While on X230 it's very easy to access both chips by only removing keyboard and palmrest, it is not so on T530/W530 (on these models you can easily access 8M chip while the 4M stays covered by the magnesium frame).

In this article, I will show how to flash coreboot using only the 8M chip (the one that's easy to access) by changing flash chip layout. Basically, you need to change the bios region size in the flash descriptor so that it would not exceed 8M.

Dump this chip with flashrom:

# flashrom -p <YOUR_SPI_PROGRAMMER> -r 8M.bin

Extract layout to a file:

$ ifdtool -f layout.txt 8M.bin

See what's inside:

$ cat layout.txt 
00000000:00000fff fd
00500000:00bfffff bios
00003000:004fffff me
00001000:00002fff gbe

Change bios region to 00500000:007fffff and save the file.

Then update the layout in the dump. Unfortunately, ifdtool will segfault if you try to update your 8M.bin dump (apparently it expects 12M file), so make it 12M first:

$ dd if=/dev/zero of=4M.bin bs=1M count=4
$ cat 8M.bin 4M.bin > 12M.bin

And then:

$ ifdtool -n layout.txt 12M.bin

In the end of the output you should see: Writing new image to 12M.bin.new. The size of resulting 12M.bin.new file will actually be 8M, because ifdtool truncates it according to layout.

Extract the fd modules:

$ ifdtool -x 12M.bin.new 
File 12M.bin.new is 8388608 bytes
  Flash Region 0 (Flash Descriptor): 00000000 - 00000fff 
  Flash Region 1 (BIOS): 00500000 - 007fffff 
  Flash Region 2 (Intel ME): 00003000 - 004fffff 
  Flash Region 3 (GbE): 00001000 - 00002fff 
  Flash Region 4 (Platform Data): 00fff000 - 00000fff (unused)

As you can see 4 new files were created:

$ ls flash*
flashregion_0_flashdescriptor.bin  flashregion_1_bios.bin  flashregion_2_intel_me.bin  flashregion_3_gbe.bin

Now you need to alter the coreboot config.

Mainboard --->
    ROM chip size (8192 KB (8MB))

Chipset --->
    [*] Add Intel descriptor.bin file
    (FD_PATH) Path and filename of the descriptor.bin file
    [*]   Add Intel ME/TXE firmware
    (ME_PATH) Path to management engine firmware
    [*] Add gigabit ethernet configuration
    (GBE_PATH) Path to gigabit ethernet configuration

Replace FD_PATH with full path to the flashregion_0_flashdescriptor.bin file generated in a previous step. Do the same for ME_PATH (flashregion_2_intel_me.bin) and GBE_PATH (flashregion_3_gbe.bin).

Build and flash the build/coreboot.rom to the 8M chip. Done.

If you have any comments, contact me by email.