Firmware Interface Table

BIOS Specification October 2022 Revision 1.4

ID 599500
Date 10/01/2022
Intel Confidential
Document Table of Contents

Startup ACM (Type 2) Rules

There are two supported versions of Type entries legacy 0x100 and updated (modern) 0x200

Legacy Record

The following rules apply only to the record version 0x100

  1. One Startup ACM (Type 2) Entry in the FIT is required for FIT boot support.
  2. The address field must point to a Startup ACM. Specifically, the address field in the Type 2 record must point to the first byte of the ACM header.
  3. Type 2 entry must point to an address that is accessible by the processor at reset vector.
  4. Internal to the processor, one MTRR base/limit pair is used to map Startup AC module. This places alignment restrictions on the Startup ACM. The MTRR size (called MTRR_​Size) must be a power of 2 and the base (MTRR_​Base) must be a multiple of MTRR size. The following equation defines MTRR_​Size.
  5. MTRR_​Size = 2**(ceiling (log2 ( Startup_​ACM_​size )))

    Where ceiling (X) is a mathematical function returning the smallest integer Y larger than X

    image2.jpegExample: 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.
  6. 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.
  7. The C_​V bit in this entry should be clear.
  8. The Size field is not used. BIOS should set this field to 0.
  9. The Version field should be set to 0x0100.

Modern Record

Legacy definition of Type 2 record does not allow loading alternative ACMs via FIT table. Modern Type 2 record overcomes this limitation.

FIT table may contain multiple modern Type 2 records pointing to different ACMs.

Table 3 below contains layout of the new record

Table 3. Type 2 Record Version 0x200 Structure

Byte

Offsets

15

14

13:12

11

10

9

8

7:0

Meaning

Ext Family Mask

[7:4]

Ext Family

[3:0]

Bit 7 - C_​V Bits 6:0 - Type

0x200

Ext Model Mask

[7:4]

Type Mask

[3:0]

Family Mask

[7:4]

Model Mask

[3:0]

Ext Model

[7:4]

Type

[3:0]

 

 

Family[7:4]

Model

[3:0]

 

Address

The following rules apply only to the record version 0x200

  1. At least one Startup ACM (Type 2) Entry in the FIT is required for FIT boot support.
  2. The address field must point to a Startup ACM. Specifically, the address field in the type 2 record must point to the first byte of the ACM header.
  3. Type 2 entry must point to an address that is accessible by the processor at reset vector.
  4. Internal to the processor, one MTRR base/limit pair is used to map Startup AC module.
  5. ACM may be smaller than size of allocated Authenticated Code Execution Area (ACEA)
  6. The C_​V bit in this entry should be clear.
  7. The Version field should be set to 0x200.
  8. Checksum, Reserved, and size fields are redefined to deliver CPU FMS and CPU FMS Mask values as specified below.
  9. Extended Family byte 15 is split onto two nibbles. High order nibble contains Extended Family Mask, while low order nibble contains Extended Family value.
  10. Bytes 11 and 10 deliver in 4 consecutive nibbles Extended Model, Type, Family, and Model Mask value.
  11. Bytes 9 & 8 deliver in 4 consecutive nibbles Extended Model, Type, Family and Model values.
  12. FIT table may contain mixture of type 2 records version 0x100 and 0x200 but record version 0x100 must precede all records version 0x200

CPU processing rules

CPU will scan iteratively Type 2 records.

  1. Legacy CPU supporting only record version 0x100 will process it and will load ACM pointed by the address field.
  2. Modern CPU supporting only records version 0x200 will skip record version 0x100 and will continue scanning.
  3. CPU will read Extended Family, Extended Model, Type, Family and Model values from record version 0x200 and will construct full FMS_​Target value supported by this record. It will assume Stepping value equal 0.
  4. CPU will read Extended Family, Extended Model, Type, Family and Model Mask values from record version 0x200 and will construct full FMS_​Mask value supported by this record. It will assume Stepping_​Mask value equal 0
  5. CPU will read own FMS value and apply the check:

    IF (bitwise (FMS & FMS_​Mask) equals FMS_​Target)

    it will load ACM pointed to by the address field.

    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.