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> Reviewed-on: http://review.coreboot.org/2642 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
committed by
Ronald G. Minnich
parent
239c2e843f
commit
6dcceddff5
@@ -299,12 +299,18 @@ bootblock_lds += $(src)/cpu/x86/16bit/entry16.lds
|
|||||||
bootblock_lds += $(src)/cpu/x86/16bit/reset16.lds
|
bootblock_lds += $(src)/cpu/x86/16bit/reset16.lds
|
||||||
bootblock_lds += $(src)/arch/x86/lib/id.lds
|
bootblock_lds += $(src)/arch/x86/lib/id.lds
|
||||||
bootblock_lds += $(chipset_bootblock_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)/arch/x86/init/prologue.inc
|
||||||
bootblock_inc += $(src)/cpu/x86/16bit/entry16.inc
|
bootblock_inc += $(src)/cpu/x86/16bit/entry16.inc
|
||||||
bootblock_inc += $(src)/cpu/x86/16bit/reset16.inc
|
bootblock_inc += $(src)/cpu/x86/16bit/reset16.inc
|
||||||
bootblock_inc += $(src)/cpu/x86/32bit/entry32.inc
|
bootblock_inc += $(src)/cpu/x86/32bit/entry32.inc
|
||||||
bootblock_inc += $(src)/arch/x86/lib/id.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)
|
bootblock_inc += $(chipset_bootblock_inc)
|
||||||
|
|
||||||
ifeq ($(CONFIG_SSE),y)
|
ifeq ($(CONFIG_SSE),y)
|
||||||
|
@@ -33,3 +33,5 @@ source src/cpu/intel/socket_441/Kconfig
|
|||||||
source src/cpu/intel/socket_LGA771/Kconfig
|
source src/cpu/intel/socket_LGA771/Kconfig
|
||||||
source src/cpu/intel/socket_LGA775/Kconfig
|
source src/cpu/intel/socket_LGA775/Kconfig
|
||||||
source src/cpu/intel/socket_rPGA989/Kconfig
|
source src/cpu/intel/socket_rPGA989/Kconfig
|
||||||
|
# Architecture specific features
|
||||||
|
source src/cpu/intel/fit/Kconfig
|
||||||
|
12
src/cpu/intel/fit/Kconfig
Normal file
12
src/cpu/intel/fit/Kconfig
Normal file
@@ -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.
|
||||||
|
|
30
src/cpu/intel/fit/fit.inc
Normal file
30
src/cpu/intel/fit/fit.inc
Normal file
@@ -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
|
6
src/cpu/intel/fit/fit.lds
Normal file
6
src/cpu/intel/fit/fit.lds
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
SECTIONS {
|
||||||
|
. = 0xffffffc0;
|
||||||
|
.fit_pointer (.): {
|
||||||
|
*(.fit_pointer)
|
||||||
|
}
|
||||||
|
}
|
@@ -13,6 +13,7 @@ config CPU_SPECIFIC_OPTIONS
|
|||||||
select CPU_MICROCODE_IN_CBFS
|
select CPU_MICROCODE_IN_CBFS
|
||||||
#select AP_IN_SIPI_WAIT
|
#select AP_IN_SIPI_WAIT
|
||||||
select TSC_SYNC_MFENCE
|
select TSC_SYNC_MFENCE
|
||||||
|
select CPU_INTEL_FIRMWARE_INTERFACE_TABLE
|
||||||
|
|
||||||
config BOOTBLOCK_CPU_INIT
|
config BOOTBLOCK_CPU_INIT
|
||||||
string
|
string
|
||||||
|
Reference in New Issue
Block a user