The x86 development process for coreboot is broken into the following components:
The development process has two main phases:
The combined steps below describe how to bring up a minimal coreboot for a system-on-a-chip (SoC) and a development board:
The initial coreboot steps are single threaded! The initial minimal FSP development is also single threaded. Progress can speed up by adding more developers after the minimal coreboot/FSP implementation reaches the payload. |
sudo apt-get install m4 bison flex libncurses5-dev
make crossgcc-i386
To use multiple processors for the toolchain build (which takes a long time), use:
make crossgcc-i386 CPUS=N
where N is the number of cores to use for the build.
Most of the coreboot development gets done in this phase. Implementation tasks in this phase are easily done in parallel.
Features |
||
---|---|---|
SoC | Where | Testing |
8254 Programmable Interval Timer | Legacy hardware support | CorebootPayloadPkg gets to shell prompt |
8259 Programmable Interrupt Controller | Legacy hardware support | CorebootPayloadPkg gets to shell prompt |
Cache-as-RAM |
Find
FSP binary:
cache_as_ram.inc Enable: FSP 1.1 TempRamInit called from cache_as_ram.inc Disable: FSP 1.1 TempRamExit called from after_raminit.S |
FindFSP: POST code 0x90
(POST_FSP_TEMP_RAM_INIT)
is displayed Enable: POST code 0x2A is displayed Disable: CONFIG_DISPLAY_MTRRS=y, MTRRs displayed after call to TempRamExit |
Memory Map | Implement a device driver for the north cluster | coreboot displays the memory map correctly during the BS_WRITE_TABLES state |
MTRRs |
Set values: src/drivers/intel/fsp1_1/stack.c/setup_stack_and_mtrrs Load values: src/drivers/intel/fsp1_1/after_raminit.S |
Set: Post code 0x91
(POST_FSP_TEMP_RAM_EXIT)
is displayed by
after_raminit.S Load: Post code 0x3C is displayed by after_raminit.S and CONFIG_DISPLAY_MTRRS=y displays the correct memory regions |
PCI Device Support | Implement a PCI device driver | The device is detected by coreboot and usable by the payload |
Ramstage state machine | Implement the chip and domain operations to start the device tree processing | During the BS_DEV_ENUMERATE state, ramstage now display the device IDs for the PCI devices on the bus. |
ROM Shadow 0x000E0000 - 0x000FFFFF |
Disable: src/soc/<Vendor>/<Chip Family>/romstage/romstage.c/soc_after_ram_init routine | Operates as RAM: Writes followed by a read to the 0x000E0000 - 0x000FFFFF region returns the value written |
Board | Where | Testing |
Device Tree |
List PCI vendor and device IDs by starting
the device tree processing Disable PCI devices Enable: Implement a PCI device driver |
List: BS_DEV_ENUMERATE state displays PCI vendor and device IDs Disable: BS_DEV_ENUMERATE state shows the devices as disabled Enable: BS_DEV_ENUMERATE state shows the device as on and the device works for the payload |
DRAM |
Load SPD data: src/soc/mainboard/<Vendor>/<Board>/spd/spd.c UPD Setup:
|
Select the following Kconfig values
|
Serial Port |
SoC Support Enable: src/soc/mainboard/<Board>/com_init.c/car_mainboard_pre_console_init |
Debug serial output works |
Payload | Where | Testing |
ACPI Tables |
SoC Support |
Verified by payload or OS |
FSP | Where | Testing |
TempRamInit | FSP TempRamInit | FSP binary found: POST code 0x90
(POST_FSP_TEMP_RAM_INIT)
is displayed TempRamInit successful: POST code 0x2A is displayed |
MemoryInit | SoC support Board support |
Select the following Kconfig values
|
TempRamExit | src/drivers/intel/fsp1_1/after_raminit.S | Post code 0x91
(POST_FSP_TEMP_RAM_EXIT)
is displayed before calling TempRamExit by
after_raminit.S,
CONFIG_DISPLAY_MTRRS=y displays the correct memory regions and
Post code 0x39 is displayed by
after_raminit.S |
SiliconInit | Implement the .init routine for the chip operations structure | During BS_DEV_INIT_CHIPS state, SiliconInit gets called and returns 0x00000000 |
FspNotify | The code which calls FspNotify is located in src/drivers/intel/fsp1_1/fsp_util.c. The fsp_notify_boot_state_callback routine is called three times as specified by the BOOT_STATE_INIT_ENTRY macros below the routine. |
The FspNotify routines are called during:
|
Modified: 4 March 2016