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
- One Startup ACM (Type 2) Entry in the FIT is required for FIT boot support.
- 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.
- Type 2 entry must point to an address that is accessible by the processor at reset vector.
- 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.
- 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.
- The C_V bit in this entry should be clear.
- The Size field is not used. BIOS should set this field to 0.
- The Version field should be set to 0x0100.
MTRR_Size = 2**(ceiling (log2 ( Startup_ACM_size )))
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).
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
- At least one Startup ACM (Type 2) Entry in the FIT is required for FIT boot support.
- 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.
- Type 2 entry must point to an address that is accessible by the processor at reset vector.
- Internal to the processor, one MTRR base/limit pair is used to map Startup AC module.
- ACM may be smaller than size of allocated Authenticated Code Execution Area (ACEA)
- The C_V bit in this entry should be clear.
- The Version field should be set to 0x200.
- Checksum, Reserved, and size fields are redefined to deliver CPU FMS and CPU FMS Mask values as specified below.
- Extended Family byte 15 is split onto two nibbles. High order nibble contains Extended Family Mask, while low order nibble contains Extended Family value.
- Bytes 11 and 10 deliver in 4 consecutive nibbles Extended Model, Type, Family, and Model Mask value.
- Bytes 9 & 8 deliver in 4 consecutive nibbles Extended Model, Type, Family and Model values.
- 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.
- Legacy CPU supporting only record version 0x100 will process it and will load ACM pointed by the address field.
- Modern CPU supporting only records version 0x200 will skip record version 0x100 and will continue scanning.
- 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.
- 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
- 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.