From 345d202d662fae57ab7a13432f213cd4109e5e3c Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Mon, 15 Apr 2019 16:17:59 +0200 Subject: [PATCH] Documentation: Add FIT Describe the Firmware Interface Table and reference useful documentation. Change-Id: I00abc1fd13be7b48d56ba8cb65d2542ed07f9017 Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/coreboot/+/32325 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- Documentation/soc/intel/fit.dia | Bin 0 -> 3178 bytes Documentation/soc/intel/fit.md | 60 ++++++++++++++ Documentation/soc/intel/fit.svg | 132 +++++++++++++++++++++++++++++++ Documentation/soc/intel/index.md | 1 + 4 files changed, 193 insertions(+) create mode 100644 Documentation/soc/intel/fit.dia create mode 100644 Documentation/soc/intel/fit.md create mode 100644 Documentation/soc/intel/fit.svg diff --git a/Documentation/soc/intel/fit.dia b/Documentation/soc/intel/fit.dia new file mode 100644 index 0000000000000000000000000000000000000000..7e07978f710c125ab1f166f1d3a76a9d683e2472 GIT binary patch literal 3178 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 QS8reaAF88z640#x0JR4iH~;_u literal 0 HcmV?d00001 diff --git a/Documentation/soc/intel/fit.md b/Documentation/soc/intel/fit.md new file mode 100644 index 0000000000..8b638f0433 --- /dev/null +++ b/Documentation/soc/intel/fit.md @@ -0,0 +1,60 @@ +# Intel Firmware Interface Table + +The FIT allows to run code before the actual IA32 reset vector is executed +by the CPU. The FIT resides in the BIOS region (usually near the reset vector) +and is pointed to by the FIT pointer residing at `0xFFFFFFC0`. + +## Table layout +The table consists of blocks each 16 bytes in size. +The first is called *FIT header* the other are called *FIT entry*. + +![FIT in x86 memory map][fit] + +[fit]: fit.svg + +## Fit types + +Each entry has a *type* that give the other bits in the entry a different +meaning. The following types are known: + +```eval_rst ++-----------+------------------------------------------------------------------+ +| no. | Description | ++===========+==================================================================+ +| 0x0 | HEADER. | ++-----------+------------------------------------------------------------------+ +| 0x1 | MICROCODE. | ++-----------+------------------------------------------------------------------+ +| 0x2 | STARTUP_ACM. | ++-----------+------------------------------------------------------------------+ +| 0x7 | BIOS_STARTUP_MODULE. | ++-----------+------------------------------------------------------------------+ +| 0x8 | TPM_POLICY. | ++-----------+------------------------------------------------------------------+ +| 0x9 | BIOS_POLICY. | ++-----------+------------------------------------------------------------------+ +| 0xa | TXT_POLICY. | ++-----------+------------------------------------------------------------------+ +| 0xb | KEY_MANIFEST. | ++-----------+------------------------------------------------------------------+ +| 0xc | BOOT_POLICY_MANIFEST. | ++-----------+------------------------------------------------------------------+ +| 0x10 | CSE_SECURE_BOOT. | ++-----------+------------------------------------------------------------------+ +| 0x2d | TXTSX_POLICY. | ++-----------+------------------------------------------------------------------+ +| 0x2f | JMP_DEBUG_POLICY. | ++-----------+------------------------------------------------------------------+ +| 0x7f | SKIP. | ++-----------+------------------------------------------------------------------+ +``` + +## Usage in coreboot + +The most common usage of FIT is to use *Type1* to update microcode before +execution of the IA32 reset vector happens. + +## References + +* [Intel TXT LAB handout](https://downloadmirror.intel.com/18931/eng/Intel%20TXT%20LAB%20Handout.pdf) +* [FIT bios specification](https://www.intel.com/content/dam/www/public/us/en/documents/guides/fit-bios-specification.pdf) diff --git a/Documentation/soc/intel/fit.svg b/Documentation/soc/intel/fit.svg new file mode 100644 index 0000000000..eb6c696bb7 --- /dev/null +++ b/Documentation/soc/intel/fit.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + bootblock + + + + + + + + + + + + + + + 4 GiB + + + 4 GiB - 10h + + + 4 GiB - x + + + 4 GiB - 40 h + + + + FIT Ptr + + + IA32 reset vec + + + + + + + + + + + + 4 GiB - z + + + + + + + + + + + 4 GiB - y + + + ACM + + + BOOTBLOCK + CODE + + + uCode + + + + + + + + + + + + + + + + FIT header + + + Type1 entry + + + Type2 entry + + + Type7 entry + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/soc/intel/index.md b/Documentation/soc/intel/index.md index 4f6b4f21b6..86f4de7155 100644 --- a/Documentation/soc/intel/index.md +++ b/Documentation/soc/intel/index.md @@ -8,3 +8,4 @@ This section contains documentation about coreboot on specific Intel SOCs. - [FSP](fsp/index.md) - [Ice Lake/9th Gen Core-i series](icelake/index.md) - [MP Initialization](mp_init/mp_init.md) +- [Firmware Interface Table](fit.md)