Stefan Reinauer (stefan.reinauer@coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2642
-gerrit
commit 9dea7bca65516f5a3a994c86ba11ab0e6e4e9ec4 Author: Aaron Durbin adurbin@chromium.org Date: Mon Dec 3 16:17:40 2012 -0600
x86 intel: Add Firmware Interface Table support
Haswell CPUs require a FIT table in the firmware. This commit adds rudimentary support for a FIT table. The number of entries in the table is based on a configuration option. The code only generates a type 0 entry. A follow-on tool will need to be developed to populate the FIT entries as well as checksumming the table.
Verified image has a FIT pointer and table when option is selected.
Change-Id: I3a314016a09a1cc26bf1fb5d17aa50853d2ef4f8 Signed-off-by: Aaron Durbin adurbin@chromium.org --- src/arch/x86/Makefile.inc | 6 ++++++ src/cpu/intel/Kconfig | 2 ++ src/cpu/intel/fit/Kconfig | 12 ++++++++++++ src/cpu/intel/fit/fit.inc | 30 ++++++++++++++++++++++++++++++ src/cpu/intel/fit/fit.lds | 6 ++++++ src/cpu/intel/haswell/Kconfig | 1 + 6 files changed, 57 insertions(+)
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index 0892efd..cc7bfc2 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -299,12 +299,18 @@ bootblock_lds += $(src)/cpu/x86/16bit/entry16.lds bootblock_lds += $(src)/cpu/x86/16bit/reset16.lds bootblock_lds += $(src)/arch/x86/lib/id.lds bootblock_lds += $(chipset_bootblock_lds) +ifeq ($(CONFIG_CPU_INTEL_FIRMWARE_INTERFACE_TABLE),y) +bootblock_lds += $(src)/cpu/intel/fit/fit.lds +endif
bootblock_inc = $(src)/arch/x86/init/prologue.inc bootblock_inc += $(src)/cpu/x86/16bit/entry16.inc bootblock_inc += $(src)/cpu/x86/16bit/reset16.inc bootblock_inc += $(src)/cpu/x86/32bit/entry32.inc bootblock_inc += $(src)/arch/x86/lib/id.inc +ifeq ($(CONFIG_CPU_INTEL_FIRMWARE_INTERFACE_TABLE),y) +bootblock_inc += $(src)/cpu/intel/fit/fit.inc +endif bootblock_inc += $(chipset_bootblock_inc)
ifeq ($(CONFIG_SSE),y) diff --git a/src/cpu/intel/Kconfig b/src/cpu/intel/Kconfig index 45071d0..106ce1d 100644 --- a/src/cpu/intel/Kconfig +++ b/src/cpu/intel/Kconfig @@ -33,3 +33,5 @@ source src/cpu/intel/socket_441/Kconfig source src/cpu/intel/socket_LGA771/Kconfig source src/cpu/intel/socket_LGA775/Kconfig source src/cpu/intel/socket_rPGA989/Kconfig +# Architecture specific features +source src/cpu/intel/fit/Kconfig diff --git a/src/cpu/intel/fit/Kconfig b/src/cpu/intel/fit/Kconfig new file mode 100644 index 0000000..9b57556 --- /dev/null +++ b/src/cpu/intel/fit/Kconfig @@ -0,0 +1,12 @@ +config CPU_INTEL_FIRMWARE_INTERFACE_TABLE + def_bool n + help + This option selects building a Firmware Interface Table (FIT). + +config CPU_INTEL_NUM_FIT_ENTRIES + int + default 4 + depends on CPU_INTEL_FIRMWARE_INTERFACE_TABLE + help + This option selects the number of empty entries in the FIT table. + diff --git a/src/cpu/intel/fit/fit.inc b/src/cpu/intel/fit/fit.inc new file mode 100644 index 0000000..e4595c0 --- /dev/null +++ b/src/cpu/intel/fit/fit.inc @@ -0,0 +1,30 @@ +.section ".fit_pointer", "a", @progbits + .code32 +.global fit_pointer +fit_pointer: +.long fit_table +.long 0 +.previous + +.section ".rom.data", "a", @progbits +.align 16 +.global fit_table +.global fit_table_end +fit_table: +/* Address for type 0 is '_FIT_ ' */ +.long 0x5449465f +.long 0x2020205f +/* + * There is 1 entry in the table. Other tools will have to update the size + * and checksum when adding entries. + */ +.long 0x00000001 +/* Version */ +.word 0x0100 +/* Type 0 with checksum valid. */ +.byte 0x80 +/* Checksum byte - must add to zero. */ +.byte 0x7d +.fill CONFIG_CPU_INTEL_NUM_FIT_ENTRIES*16 +fit_table_end: +.previous diff --git a/src/cpu/intel/fit/fit.lds b/src/cpu/intel/fit/fit.lds new file mode 100644 index 0000000..9ccfe82 --- /dev/null +++ b/src/cpu/intel/fit/fit.lds @@ -0,0 +1,6 @@ +SECTIONS { + . = 0xffffffc0; + .fit_pointer (.): { + *(.fit_pointer) + } +} diff --git a/src/cpu/intel/haswell/Kconfig b/src/cpu/intel/haswell/Kconfig index 5b24a8b..460b497 100644 --- a/src/cpu/intel/haswell/Kconfig +++ b/src/cpu/intel/haswell/Kconfig @@ -13,6 +13,7 @@ config CPU_SPECIFIC_OPTIONS select CPU_MICROCODE_IN_CBFS #select AP_IN_SIPI_WAIT select TSC_SYNC_MFENCE + select CPU_INTEL_FIRMWARE_INTERFACE_TABLE
config BOOTBLOCK_CPU_INIT string