FW Interface Table BIOS Spec Rev1p6
FW Interface Table BIOS Spec Rev1p6
BIOS Specification
Revision 1.6
March 2025
2 599500
Contents
1 Firmware Interface Table Introduction .................................................................. 6
2 Summary Of Key Requirements ........................................................................... 7
Figures
Figure 2-1. FIT Layout in Flash / ROM .................................................................. 7
599500 3
Tables
Table 4-1: Generic FIT Entry Format .................................................................... 9
Table 4-2: Generic FIT Entry Format .................................................................... 9
Table 4-2: Type 2 Record Version 0x200 Structure .............................................. 13
Table 4-2: Type 8 Record Structure ................................................................... 17
Table 4-5: Type 0xA Address Field Content ......................................................... 19
Table 4-5: Type 0xA Record Structure ................................................................ 19
4 599500
Revision History
§§
599500 5
Firmware Interface Table Introduction
A Firmware Interface Table (FIT) is a data structure inside BIOS flash and consists of
multiple entries. Each entry defines the starting address and attributes of different
components in the BIOS. FIT resides in the BIOS Flash area and is located by a FIT
pointer at physical address (4GB - 40h), refer to Figure below. The FIT is generated at
build time, based on the size and location of the firmware components.
The CPU processes the FIT before executing the first BIOS instruction located at the
reset vector (0FFFFFFF0h). If a microcode update for the BSP is pointed by a FIT type
1 entry, it is loaded before executing the BIOS code at the reset vector and applied to
all threads within the package.
Refer to the CPU BIOS specification for model specific Microcode Update Loading
guidance.
The FIT boot is a method the processors use to establish a root of trust for the BIOS.
If a valid type 2 entry is found, then that startup ACM is executed.
For detailed information regarding the ACM, refer to the Intel® Trusted Execution
Technology BIOS Specification BIOS Writer's Guide.
§§
6 599500
Summary Of Key Requirements
§§
599500 7
FIT Pointer
3 FIT Pointer
The processor locates the FIT by following the FIT Pointer, which is located at the
fixed address 4 GB - 40h (i.e., 0FFFFFFC0h). The FIT pointer points to the first byte of
the Header (type 0) entry in the FIT.
§§
8 599500
Firmware Interface Table
Note: It is recommended to place FIT at a fixed address in the BIOS. This will help making
FIT Pointer static.
Bit 7 - C_V
Chksu
Meaning Bits 6:0 - Version Reserved Size Address
m
Type
ADDRESS - Address is the base address of the firmware component and must be
aligned on 16-byte boundary.
VERSION - Version contains the component's version number in binary coded decimal
(BCD) format. For the FIT header entry, the value in this field will indicate the revision
number of the FIT data structure. The upper byte of the revision field indicates the
major revision, and the lower byte indicates the minor revision. The format 0x1234
conveys the major number encoded in the first two digits and the minor number in the
last two with a fixed point assumed in between.
C_V - Checksum Valid bit. This is a 1-bit field that indicates whether component has a
valid checksum. CPU must ignore CHKSUM field if C_V bit is not set.
TYPE - 7-bit field containing the type code for the component registered in the FIT
table. The type field encoding is defined in Table below.
CHKSUM - 1-byte field containing the component's checksum. The modulo sum of all
the bytes in the component and the value in this field (CHKSUM) must add up to zero.
This field is only valid, if the C_V flag is non-zero. Support for checksum is optional.
Note: FIT Entries are not required to support the above generic format. Custom formats are
permitted and are intensively used. Custom formats are described in dedicated
sections.
599500 9
Firmware Interface Table
Platform Manufacturer Use Reserved Entries are reserved for Platform Manufacturer
specific usage. These entries are not checked by the processor.
Unused Entry (Type 0x7F) - FIT Type “0x7F” means “Unused entry”. “Unused entry”
refers to FIT entry that exists but has no meaningful contents. It serves as a
“reserved” or an “invalid” entry, which may be updated later or had been invalidated
without having to change the total number of FIT entries (like a deleted record).
The FIT processing code always skips the unused entry and moves on to the next
record.
10 599500
Firmware Interface Table
Note: The ACM is NOT required to check or ensure that the entry types are in order.
599500 11
Firmware Interface Table
9. The Size field is not used. BIOS should clear this field to 0.
Where ceiling (X) is a mathematical function returning the smallest integer Y larger
than X
Example: If the size of Startup ACM is 13 k, MTRR_Size is 16k (the next power of 2).
NOTE: Legacy processor logic for the above MTRR programming was: attempt to program
MTRR_Base equal to the ACM_Base. If attempt failed processor was failing ACM launch.
This logic required IFWI to place ACM on the boundary meeting the above requirements
for MTRR_Base. Recently for client processors requirement that MTRR_Base and
ACM+Base must coincide has been relaxed. ACM must be on 4KB boundary, and it may
“float” inside of MTRR covered window under condition that ACEA is completely covered
by an MTRR. Server processor are still enforcing MTRR_Base == ACM_Base
requirement.
12 599500
Firmware Interface Table
5. ACM may be smaller than size of allocated Authenticated Code Execution Area
(ACEA) computed by the above formula. ACEA completely obscures flash part
at addresses occupied by itself, therefore no objects that ACM needs to reach
must be in this obscured area. This includes FIT and all objects pointed to by
FIT records.
6. The C_V bit in this entry should be clear.
7. The Size field is not used. BIOS should set this field to 0.
8. The Version field should be set to 0x0100.
FIT table may contain multiple modern Type 2 records pointing to different ACMs.
Byte
15 14 13:12 11 10 9 8 7:0
Offsets
599500 13
Firmware Interface Table
ELSE
it will continue scanning.
Note: It might occur that one single ACM is designed to support two or more essentially
different CPU microarchitectures such that creation of a Mask value is onerous or even
impossible. In such a case BIOS shall create separate version 0x200 records each
supporting one CPU microarchitecture but pointing to the same ACM.
The address field points to a Diagnostic ACM. Specifically, the address field in the type
3 record points to the first byte of the ACM header:
1. Type 3 entry must point to an address that is accessible by the processor at
reset vector and should be 4Kb aligned.
2. The C_V bit in this entry should be clear.
3. The Size field is not used. BIOS should set this field to 0.
4. The Version field should be set to 0x0100.
14 599500
Firmware Interface Table
599500 15
Firmware Interface Table
4. The FIT reset state table pointed to by a type 6 entry must be aligned on a
16-byte address.
5. The FIT reset state table pointed to by a type 6 entry must not be
compressed, encoded, or encrypted by the BIOS.
6. The Size field is not used. BIOS should clear this field to 0.
7. The Version field should be set to 0x0100.
8. The C_V bit in this entry should be clear to 0.
16 599500
Firmware Interface Table
Byte
15 14 13:12 11 10:8 7:0
Offsets
UINT16 IndexRegisterAddress;
UINT16 DataRegisterAddress;
// = 2 - 2-byte access
UINT16 Index;
599500 17
Firmware Interface Table
} INDEX_IO_ADDRESS;
typedef union {
UINT64 FlatMemoryAddress;
INDEX_IO_ADDRESS IndexIo;
} TPM_POLICY_PTR;
18 599500
Firmware Interface Table
12. The default setting is 1. In other words, if this structure is not present or is
invalid, the Startup ACM will behave, as if TXT Configuration Policy == 1 but
this may create a mismatch between BIOS and ACM TXT processing.
13. The C_V bit in this entry should be cleared to 0.
14. The Size field is not used. BIOS should set this field to 0.
0 INDEX_IO_ADDRESS
1 FLAT_MEMORY_POINTER
2 INDEX_TPM_ADDRESS
Byte
15 14 13:12 11 10:8 7:0
Offsets
599500 19
Firmware Interface Table
// = 2 - 2-byte width
// e.g. = 50 – byte 50
FLAT_MEMORY_POINTER
// = 0 - disabled
INDEX_TPM_ADDRESS
// = 2 - 2-byte width
// e.g. = 1 - byte 1
20 599500
Firmware Interface Table
typedef union {
FLAT_MEMORY_POINTER FlatMemoryAddress;
INDEX_IO_ADDRESS IndexIo;
// see section 4.10.1
INDEX_TPM_ADDRESS
IndexTpm;
} TXT_CONFIG_POLICY_PTR;
FBM record 0xD must follow "Generic FIT Entry Format" as shown in Table 1:
599500 21
Firmware Interface Table
1. There can be more than one FBM record entry in the FIT. The ACM will only
use the first one found and will ignore subsequent entries of this type.
2. The entry must be located after the Boot Policy Manifest Entry (Type 0x0C).
3. The Version field should be set to 0x0100.
4. The C_V bit in this entry should be clear.
5. The Checksum field should be set to 0.
6. The Size field should be set to the value not less than the size of the FBM
Structure (the contiguous memory starting from the first byte of the FBM
Structure through the last byte of the FBM Signature Element).
The OEM SMIP, MRC Training Data and IBB Hash, are not present in the initial SRAM
map, but will be placed in the shared SRAM later (after Ring Buffer protocol is done) for
IBBL to consume. This use of the Reserved field does not interfere in any way with the
CPU microcode operation:
1. The Version field should be set to 0x0100.
2. The C_V bit in this entry should be clear.
3. The Checksum field is set to 0.
22 599500
Firmware Interface Table
599500 23
Firmware Interface Table
Boot Image Descriptors (Type 0x1D) entry in the FIT is required only for platforms
which support Vendor Authorized Boot. The Boot Image Descriptors Manifest is an
optional header only required on SPI flash for the BIOS as a structure to define
number of Image Descriptors that follow it. There can only be zero or one Type 0x1D
record present in the FIT:
1. The Version field should be set to 0x0100.
2. The C_V bit in this entry should be clear
3. The Checksum field is set to 0.
4. The entry must be 64 byte aligned.
5. Address + size must be under (4GB – 1) and above (4GB – 16MB).
24 599500
Firmware Interface Table
For legacy platforms, usage is documented in Intel (R) Trusted Execution Technology
and BootGuard Server BIOS specification, available here:
https://cdrdv2.intel.com/v1/dl/getContent/558294
ACM will verify the contents of this record only when an integrity error is found. If this
record cannot be verified, ACM will fall back to default PCR0 handling (not starting the
TPM at all):
1. There can be zero or one Granular SCRTM Error Records in the FIT. Additional
type 0x2E entries will be ignored by the ACM.
2. The address field points to the Backup IBB address. This address must be 16b
aligned, and within accessible range for ACM. Current allowed ranges are
(4GB-16MB) to (4GB – 1).
3. The size field indicates the size of the Backup IBB address. This size field must
be within reasonable values. Current allowed ranges as (4KB-16MB).
4. Address + size must be under (4GB –1) and above (4GB – 16MB).
5. The Version field should be set to 0x0100.
6. The C_V bit in this entry should be clear.
§§
599500 25