2.5 KiB
Blobs used in Intel Broadwell boards
All Broadwell boards supported by coreboot require two proprietary blobs.
In a coreboot image of a Broadwell board, the blobs are named mrc.bin
and
refcode
in CBFS.
mrc.bin
is run in romstage to initialize the memory. It is placed at a fixed
address in CBFS and is loaded at a fixed address in memory.
refcode
is run in ramstage to initialize the system agent and the PCH. It is
a relocatable ELF object.
Obtaining the blobs
Both mrc.bin
and refcode
can be obtained from a coreboot image of a Broadwell
board, for example a Purism Librem 13 v1 coreboot image from MrChromebox.
cbfstool coreboot_*.rom extract -f broadwell-mrc.bin -n mrc.bin
cbfstool coreboot_*.rom extract -m x86 -f broadwell-refcode.elf -n fallback/refcode
SPD Addresses
The SPD addresses in Broadwell pei_data
struct are similar to Haswell.
Intel GbE support
Unlike Haswell boards, the pei_data
struct of Broadwell doesn't have gbe_enable
field. For boards with an Intel GbE device, a modification of refcode
is needed,
otherwise refcode
will disable the Intel GbE device and the OS cannot find it
in the list of PCI devices.
For the refcode binary extracted from Purism Librem 13 v1 (SHA256: 8a919ffece61ba21664b1028b0ebbfabcd727d90c1ae2f72b48152b8774323a4, .program section starts at file offset 0x2040), we can see the following code sequence:
1e06b: c6 43 0c 00 movb $0x0,0xc(%ebx)
1e06f: c6 83 7e 03 00 00 00 movb $0x0,0x37e(%ebx)
1e076: c6 83 70 03 00 00 01 movb $0x1,0x370(%ebx)
1e07d: 66 89 43 0a mov %ax,0xa(%ebx)
1e081: c6 83 da 01 00 00 01 movb $0x1,0x1da(%ebx)
1e088: c6 83 86 03 00 00 01 movb $0x1,0x386(%ebx)
The code at 0x1e06f sets the field that is to enable the GbE to the hardcoded 0 value. Change the byte at 0x1e075 (file offset 0x200b5) to 0x01 to make the refcode support Intel GbE:
cp refcode.elf refcode_gbe.elf
printf '\x01' | dd of=refcode_gbe.elf bs=1 seek=131253 count=1 conv=notrunc
Use Broadwell SoC code for Haswell ULT boards
Haswell ULT boards can use Broadwell SoC code. To use Broadwell code for Haswell ULT
boards, devicetree.cb
file and pei_data
code need to be ported to Broadwell, and
build the code with Broadwell mrc.bin
and refcode
instead of using Haswell mrc.bin
.
Broadwell SoC code doesn't support non-ULT Haswell or non-ULT Broadwell boards.