Intel Management Engine Interface Information (Type 219)
Source: reverse engineered from the dumps of the data corpus. The layouts of
the firmware status registers are the ones coreboot describes in
src/soc/intel/common/block/include/intelblocks/cse.h and the me.h headers
of the systems on a chip.
Keeps the firmware status registers of the Host Embedded Controller
Interfaces (HECI) of the Intel Management Engine, as the firmware of the host
has read them at boot. Most tables hold a group association (type 14) named
$MEI, which is not a reliable way to find the structure: in about half of
the tables of the data corpus the group gives handle 0, and in some it refers
to Intel firmware version information (type 221) or to other structures.
The structures are found on Intel platforms whatever the vendor of the
firmware is. The reference code gives them type 219 by default, which some
vendors give to structures of their own: Dell places the structures at type
203 or 235, or keeps them at type 219 on some systems, e.g. XPS 13 9350, while
HP servers carry none. The structure is told by its version, 1, and by the
name of the first interface, MEI1, which every known structure holds, so
that the structures vendors give the same types are not taken for it.
| Offset | Version | Name | Length | Value | Description |
|---|---|---|---|---|---|
|
2.0+ |
Type |
|
|
Intel Management Engine Interface Information indicator, |
|
2.0+ |
Length |
|
Varies |
Length of the structure, |
|
2.0+ |
Handle |
|
Varies |
|
|
2.0+ |
Version |
|
|
|
|
2.0+ |
Interface Count |
|
|
Number of interfaces, 3 or 4 |
|
2.0+ |
Interfaces |
Varies |
Varies |
Interfaces, see Interfaces |
1. Intel Management Engine Interface Information — Interfaces
The interfaces are the PCI functions 0:16.0, 0:16.1, 0:16.4 and 0:16.5, named
MEI1 to MEI4. The registers are the ones of the PCI configuration space of
the function, at offsets 0x40, 0x48, 0x60, 0x64, 0x68 and 0x6C. An absent
function reads with all bits set. Interfaces whose registers are all zeroes
are not reported, e.g. MEI4 on most platforms of the data corpus.
| Offset | Name | Length | Value | Description |
|---|---|---|---|---|
|
Name |
|
|
Name of the interface, e.g. |
|
HFSTS1 |
|
|
Firmware status register 1, see HFSTS1 |
|
HFSTS2 |
|
|
Firmware status register 2: boot progress, which depends on the generation |
|
HFSTS3 |
|
|
Firmware status register 3, see HFSTS3 |
|
HFSTS4 |
|
|
Firmware status register 4, which depends on the generation |
|
HFSTS5 |
|
|
Firmware status register 5, which depends on the generation |
|
HFSTS6 |
|
|
Firmware status register 6, which depends on the generation. coreboot describes only bits 30 and 31 of it, for Skylake, as the commit state of the field programmable fuses (FPF) |
2. Intel Management Engine Interface Information — HFSTS1
The layout of the first register of the first interface is the same in all generations of the Management Engine.
| Bits | Name | Description |
|---|---|---|
0-3 |
Working State |
|
4 |
Manufacturing Mode |
Firmware is in the manufacturing mode, in which the platform is not locked down yet |
5 |
FPT Bad |
Flash partition table is corrupted |
6-8 |
Operation State |
Power state of the firmware: |
9 |
Initialization Complete |
Firmware has completed its initialization |
10 |
Bring-up Load Failure |
|
11 |
Update in Progress |
Firmware is being updated |
12-15 |
Error Code |
|
16-19 |
Operation Mode |
|
20-23 |
Reserved |
|
24 |
Boot Options Present |
|
25-29 |
Reserved |
|
30 |
D3 Support Valid |
|
31 |
D0i3 Support Valid |
The bits from 20 on are the ones coreboot gives for Skylake and later.
3. Intel Management Engine Interface Information — HFSTS3
| Bits | Name | Description |
|---|---|---|
0-3 |
Reserved |
|
4-6 |
Firmware SKU |
|
7-31 |
Reserved |
Depend on the generation |