TPM Policy Record (Type 8) Rules
Record Types 8 is used by legacy Intel® TXT FIT boot only and is not needed if latter is not used.
- There can be zero or one TPM Policy Record in the FIT.
- Type 8 entry address field must contain an address accessible by the processor at reset vector.
- The address field contains the TPM_POLICY_PTR structure (see section 4.8.1. This structure contains the address, where the TPM Policy information resided.
- The version field is set to 0, if TPM_POLICY_PTR describes an Indexed IO type pointer. The version field is set to 1, if TPM_POLICY_PTR describes a flat memory pointer.
- If indexed IO type pointer is used, the Address field holds a structure of the type INDEX_IO_ADDRESS. This structure contains the IO addresses of the index and data register, access width and position of the bit that holds the TPM policy.
- If flat memory type pointer is used, the Address field holds a 64-bit memory address. The memory address should be within the low 4 GB of address space. Bit 0 at this address holds the TPM Policy.
- The indexed IO location must be accessible at reset without any hardware initialization.
- The TPM policy says whether TPM should be enabled or disabled. If TPM Policy == 0 the TPM should be disabled. If TPM Policy == 1 the TPM should be enabled.
- The default setting is 1. In other words, if this structure is not present or is invalid, the Startup ACM will behave as if TPM Policy = 1.
- The C_V bit in this entry should be clear to 0.
- The Size field is not used. BIOS should set this field to 0.
Table 4. Type 8 Record Structure
Byte Offsets | 15 | 14 | 13:12 | 11 | 10:8 | 7:0 |
Meaning | Checksum Must be 0 | Bit 7 - C_V Must be 0 Bits 6:0 – Type Must be 8 | Version Must be 0 or | Reserved Must be 0 | Size Must be 0 | Address TPM_POLICY_PTR. Must be INDEX_IO_ADDRESS If Version == 0 or FlatMemoryAddress if Version == 1 |
TPM Enabling Policy
typedef struct {
UINT16 IndexRegisterAddress;
UINT16 DataRegisterAddress;
UINT8 AccessWidthInBytes; // = 1 - 1-byte access;
// = 2 - 2-byte access
UINT8 BitPosition; // e.g. = 15 - Bit15
UINT16 Index;
} INDEX_IO_ADDRESS;
typedef union {
UINT64 FlatMemoryAddress;
INDEX_IO_ADDRESS IndexIo;
} TPM_POLICY_PTR;