coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
me.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _BROADWELL_ME_H_
4 #define _BROADWELL_ME_H_
5 
6 #include <stdint.h>
7 
8 #define ME_RETRY 100000 /* 1 second */
9 #define ME_DELAY 10 /* 10 us */
10 
11 /*
12  * Management Engine PCI registers
13  */
14 
15 #define PCI_CPU_MEBASE_L 0x70 /* Set by MRC */
16 #define PCI_CPU_MEBASE_H 0x74 /* Set by MRC */
17 
18 #define PCI_ME_HFS 0x40
19 #define ME_HFS_CWS_RESET 0
20 #define ME_HFS_CWS_INIT 1
21 #define ME_HFS_CWS_REC 2
22 #define ME_HFS_CWS_NORMAL 5
23 #define ME_HFS_CWS_WAIT 6
24 #define ME_HFS_CWS_TRANS 7
25 #define ME_HFS_CWS_INVALID 8
26 #define ME_HFS_STATE_PREBOOT 0
27 #define ME_HFS_STATE_M0_UMA 1
28 #define ME_HFS_STATE_M3 4
29 #define ME_HFS_STATE_M0 5
30 #define ME_HFS_STATE_BRINGUP 6
31 #define ME_HFS_STATE_ERROR 7
32 #define ME_HFS_ERROR_NONE 0
33 #define ME_HFS_ERROR_UNCAT 1
34 #define ME_HFS_ERROR_IMAGE 3
35 #define ME_HFS_ERROR_DEBUG 4
36 #define ME_HFS_MODE_NORMAL 0
37 #define ME_HFS_MODE_DEBUG 2
38 #define ME_HFS_MODE_DIS 3
39 #define ME_HFS_MODE_OVER_JMPR 4
40 #define ME_HFS_MODE_OVER_MEI 5
41 #define ME_HFS_BIOS_DRAM_ACK 1
42 #define ME_HFS_ACK_NO_DID 0
43 #define ME_HFS_ACK_RESET 1
44 #define ME_HFS_ACK_PWR_CYCLE 2
45 #define ME_HFS_ACK_S3 3
46 #define ME_HFS_ACK_S4 4
47 #define ME_HFS_ACK_S5 5
48 #define ME_HFS_ACK_GBL_RESET 6
49 #define ME_HFS_ACK_CONTINUE 7
50 
51 struct me_hfs {
66 
67 #define PCI_ME_UMA 0x44
68 
69 struct me_uma {
70  u32 size: 6;
72  u32 valid: 1;
75 } __packed;
76 
77 #define PCI_ME_H_GS 0x4c
78 #define ME_INIT_DONE 1
79 #define ME_INIT_STATUS_SUCCESS 0
80 #define ME_INIT_STATUS_NOMEM 1
81 #define ME_INIT_STATUS_ERROR 2
82 #define ME_INIT_STATUS_SUCCESS_OTHER 3 /* SEE ME9 BWG */
83 
84 #define ME_HSIO_MESSAGE (7 << 28)
85 #define ME_HSIO_CMD_GETHSIOVER 1
86 #define ME_HSIO_CMD_CLOSE 0
87 
88 struct me_did {
92  u32 status: 4;
94 } __packed;
95 
96 /*
97  * Apparently the GMES register is renamed to HFS2 (or HFSTS2 according
98  * to ME9 BWG). Sadly the PCH EDS and the ME BWG do not match on nomenclature.
99  */
100 #define PCI_ME_HFS2 0x48
101 /* Infrastructure Progress Values */
102 #define ME_HFS2_PHASE_ROM 0
103 #define ME_HFS2_PHASE_BUP 1
104 #define ME_HFS2_PHASE_UKERNEL 2
105 #define ME_HFS2_PHASE_POLICY 3
106 #define ME_HFS2_PHASE_MODULE_LOAD 4
107 #define ME_HFS2_PHASE_UNKNOWN 5
108 #define ME_HFS2_PHASE_HOST_COMM 6
109 /* Current State - Based on Infra Progress values. */
110 /* ROM State */
111 #define ME_HFS2_STATE_ROM_BEGIN 0
112 #define ME_HFS2_STATE_ROM_DISABLE 6
113 /* BUP State */
114 #define ME_HFS2_STATE_BUP_INIT 0
115 #define ME_HFS2_STATE_BUP_DIS_HOST_WAKE 1
116 #define ME_HFS2_STATE_BUP_FLOW_DET 4
117 #define ME_HFS2_STATE_BUP_VSCC_ERR 8
118 #define ME_HFS2_STATE_BUP_CHECK_STRAP 0xa
119 #define ME_HFS2_STATE_BUP_PWR_OK_TIMEOUT 0xb
120 #define ME_HFS2_STATE_BUP_MANUF_OVRD_STRAP 0xd
121 #define ME_HFS2_STATE_BUP_M3 0x11
122 #define ME_HFS2_STATE_BUP_M0 0x12
123 #define ME_HFS2_STATE_BUP_FLOW_DET_ERR 0x13
124 #define ME_HFS2_STATE_BUP_M3_CLK_ERR 0x15
125 #define ME_HFS2_STATE_BUP_CPU_RESET_DID_TIMEOUT_MEM_MISSING 0x17
126 #define ME_HFS2_STATE_BUP_M3_KERN_LOAD 0x18
127 #define ME_HFS2_STATE_BUP_T32_MISSING 0x1c
128 #define ME_HFS2_STATE_BUP_WAIT_DID 0x1f
129 #define ME_HFS2_STATE_BUP_WAIT_DID_FAIL 0x20
130 #define ME_HFS2_STATE_BUP_DID_NO_FAIL 0x21
131 #define ME_HFS2_STATE_BUP_ENABLE_UMA 0x22
132 #define ME_HFS2_STATE_BUP_ENABLE_UMA_ERR 0x23
133 #define ME_HFS2_STATE_BUP_SEND_DID_ACK 0x24
134 #define ME_HFS2_STATE_BUP_SEND_DID_ACK_ERR 0x25
135 #define ME_HFS2_STATE_BUP_M0_CLK 0x26
136 #define ME_HFS2_STATE_BUP_M0_CLK_ERR 0x27
137 #define ME_HFS2_STATE_BUP_TEMP_DIS 0x28
138 #define ME_HFS2_STATE_BUP_M0_KERN_LOAD 0x32
139 /* Policy Module State */
140 #define ME_HFS2_STATE_POLICY_ENTRY 0
141 #define ME_HFS2_STATE_POLICY_RCVD_S3 3
142 #define ME_HFS2_STATE_POLICY_RCVD_S4 4
143 #define ME_HFS2_STATE_POLICY_RCVD_S5 5
144 #define ME_HFS2_STATE_POLICY_RCVD_UPD 6
145 #define ME_HFS2_STATE_POLICY_RCVD_PCR 7
146 #define ME_HFS2_STATE_POLICY_RCVD_NPCR 8
147 #define ME_HFS2_STATE_POLICY_RCVD_HOST_WAKE 9
148 #define ME_HFS2_STATE_POLICY_RCVD_AC_DC 0xa
149 #define ME_HFS2_STATE_POLICY_RCVD_DID 0xb
150 #define ME_HFS2_STATE_POLICY_VSCC_NOT_FOUND 0xc
151 #define ME_HFS2_STATE_POLICY_VSCC_INVALID 0xd
152 #define ME_HFS2_STATE_POLICY_FPB_ERR 0xe
153 #define ME_HFS2_STATE_POLICY_DESCRIPTOR_ERR 0xf
154 #define ME_HFS2_STATE_POLICY_VSCC_NO_MATCH 0x10
155 /* Current PM Event Values */
156 #define ME_HFS2_PMEVENT_CLEAN_MOFF_MX_WAKE 0
157 #define ME_HFS2_PMEVENT_MOFF_MX_WAKE_ERROR 1
158 #define ME_HFS2_PMEVENT_CLEAN_GLOBAL_RESET 2
159 #define ME_HFS2_PMEVENT_CLEAN_GLOBAL_RESET_ERROR 3
160 #define ME_HFS2_PMEVENT_CLEAN_ME_RESET 4
161 #define ME_HFS2_PMEVENT_ME_RESET_EXCEPTION 5
162 #define ME_HFS2_PMEVENT_PSEUDO_ME_RESET 6
163 #define ME_HFS2_PMEVENT_S0MO_SXM3 7
164 #define ME_HFS2_PMEVENT_SXM3_S0M0 8
165 #define ME_HFS2_PMEVENT_NON_PWR_CYCLE_RESET 9
166 #define ME_HFS2_PMEVENT_PWR_CYCLE_RESET_M3 0xa
167 #define ME_HFS2_PMEVENT_PWR_CYCLE_RESET_MOFF 0xb
168 #define ME_HFS2_PMEVENT_SXMX_SXMOFF 0xc
169 
170 struct me_hfs2 {
185 } __packed;
186 
187 #define PCI_ME_HFS5 0x68
188 
189 #define PCI_ME_H_GS2 0x70
190 #define PCI_ME_MBP_GIVE_UP 0x01
191 
192 #define PCI_ME_HERES 0xbc
193 #define PCI_ME_EXT_SHA1 0x00
194 #define PCI_ME_EXT_SHA256 0x02
195 #define PCI_ME_HER(x) (0xc0+(4*(x)))
196 
197 struct me_heres {
202 } __packed;
203 
204 /*
205  * Management Engine MEI registers
206  */
207 
208 #define MEI_H_CB_WW 0x00
209 #define MEI_H_CSR 0x04
210 #define MEI_ME_CB_RW 0x08
211 #define MEI_ME_CSR_HA 0x0c
212 
213 struct mei_csr {
217  u32 ready: 1;
218  u32 reset: 1;
223 } __packed;
224 
225 #define MEI_ADDRESS_CORE 0x01
226 #define MEI_ADDRESS_AMT 0x02
227 #define MEI_ADDRESS_RESERVED 0x03
228 #define MEI_ADDRESS_WDT 0x04
229 #define MEI_ADDRESS_MKHI 0x07
230 #define MEI_ADDRESS_ICC 0x08
231 #define MEI_ADDRESS_THERMAL 0x09
232 
233 #define MEI_HOST_ADDRESS 0
234 
235 struct mei_header {
241 } __packed;
242 
243 #define MKHI_GROUP_ID_CBM 0x00
244 #define MKHI_GLOBAL_RESET 0x0b
245 #define MKHI_GROUP_ID_FWCAPS 0x03
246 #define MKHI_FWCAPS_GET_RULE 0x02
247 #define MKHI_GROUP_ID_HMRFPO 0x05
248 #define MKHI_HMRFPO_LOCK 0x02
249 #define MKHI_HMRFPO_LOCK_NOACK 0x05
250 #define MKHI_GROUP_ID_MDES 0x08
251 #define MKHI_MDES_ENABLE 0x09
252 #define MKHI_GROUP_ID_GEN 0xff
253 #define MKHI_GET_FW_VERSION 0x02
254 #define MKHI_END_OF_POST 0x0c
255 #define MKHI_FEATURE_OVERRIDE 0x14
256 #define MKHI_END_OF_POST_NOACK 0x1a
257 
258 struct mkhi_header {
264 } __packed;
265 
275 } __packed;
276 
277 /* ICC Messages */
278 #define ICC_SET_CLOCK_ENABLES 0x3
279 #define ICC_API_VERSION_LYNXPOINT 0x00030000
280 
281 struct icc_header {
287 } __packed;
288 
294 } __packed;
295 
296 #define HECI_EOP_STATUS_SUCCESS 0x0
297 #define HECI_EOP_PERFORM_GLOBAL_RESET 0x1
298 
299 #define CBM_RR_GLOBAL_RESET 0x01
300 
301 #define GLOBAL_RESET_BIOS_MRC 0x01
302 #define GLOBAL_RESET_BIOS_POST 0x02
303 #define GLOBAL_RESET_MEBX 0x03
304 
308 } __packed;
309 
310 typedef enum {
317 } me_bios_path;
318 
319 /*
320  * ME to BIOS Payload Datastructures and definitions. The ordering of the
321  * structures follows the ordering in the ME9 BWG.
322  */
323 
324 #define MBP_APPID_KERNEL 1
325 #define MBP_APPID_INTEL_AT 3
326 #define MBP_APPID_HWA 4
327 #define MBP_APPID_ICC 5
328 #define MBP_APPID_NFC 6
329 /* Kernel items: */
330 #define MBP_KERNEL_FW_VER_ITEM 1
331 #define MBP_KERNEL_FW_CAP_ITEM 2
332 #define MBP_KERNEL_ROM_BIST_ITEM 3
333 #define MBP_KERNEL_PLAT_KEY_ITEM 4
334 #define MBP_KERNEL_FW_TYPE_ITEM 5
335 #define MBP_KERNEL_MFS_FAILURE_ITEM 6
336 #define MBP_KERNEL_PLAT_TIME_ITEM 7
337 /* Intel AT items: */
338 #define MBP_INTEL_AT_STATE_ITEM 1
339 /* ICC Items: */
340 #define MBP_ICC_PROFILE_ITEM 1
341 /* HWA Items: */
342 #define MBP_HWA_REQUEST_ITEM 1
343 /* NFC Items: */
344 #define MBP_NFC_SUPPORT_DATA_ITEM 1
345 
346 #define MBP_MAKE_IDENT(appid, item) ((appid << 8) | item)
347 #define MBP_IDENT(appid, item) \
348  MBP_MAKE_IDENT(MBP_APPID_##appid, MBP_##appid##_##item##_ITEM)
349 
350 typedef struct {
353  u32 rsvd : 16;
355 
356 typedef struct {
357  u32 app_id : 8;
359  u32 length : 8;
360  u32 rsvd : 8;
362 
363 typedef struct {
369 
370 typedef struct {
380  u32 pavp : 1;
382  u32 ipv6 : 1;
383  u32 kvm : 1;
384  u32 och : 1;
385  u32 vlan : 1;
386  u32 tls : 1;
388  u32 wlan : 1;
391 
392 typedef struct {
393  u16 device_id;
395  u32 umchid[4];
397 
398 typedef struct {
399  u32 key[8];
401 
402 typedef struct {
410  u32 rsvd: 1;
412  u32 brand: 4;
413  u32 rsvd1: 16;
415 
416 typedef struct {
419 } mbp_plat_type;
420 
421 typedef struct {
425 
426 typedef struct {
430  u8 reserved;
434 
435 typedef struct {
441  u16 reserved : 11;
443 
444 typedef struct {
449 
450 typedef struct {
455 
456 typedef struct {
458  u32 reserved : 30;
460 
461 typedef struct {
473 
474 struct me_fwcaps {
479 } __packed;
480 
482 
483 /* Defined in me_status.c for both romstage and ramstage */
484 void intel_me_status(void);
485 
486 #endif
static uint8_t checksum(uint8_t *data, int offset)
Definition: ipmi_fru.c:70
unsigned int version[2]
Definition: edid.c:55
struct me_hfs __packed
void intel_me_status(void)
Definition: me_status.c:194
void intel_me_hsio_version(uint16_t *version, uint16_t *checksum)
Definition: me_status.c:292
me_bios_path
Definition: me.h:310
@ ME_ERROR_BIOS_PATH
Definition: me.h:313
@ ME_RECOVERY_BIOS_PATH
Definition: me.h:314
@ ME_DISABLE_BIOS_PATH
Definition: me.h:315
@ ME_FIRMWARE_UPDATE_BIOS_PATH
Definition: me.h:316
@ ME_S3WAKE_BIOS_PATH
Definition: me.h:312
@ ME_NORMAL_BIOS_PATH
Definition: me.h:311
unsigned short uint16_t
Definition: stdint.h:11
uint32_t u32
Definition: stdint.h:51
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
Definition: x86.c:23
u8 icc_profile_soft_strap
Definition: me.h:428
u16 flash_variable_security
Definition: me.h:440
u32 och
Definition: me.h:384
u32 icc_reg_bundles
Definition: me.h:431
u32 intel_at
Definition: me.h:375
u32 item_id
Definition: me.h:358
u16 fuse_test_flags
Definition: me.h:394
u32 major_version
Definition: me.h:364
u32 pavp
Definition: me.h:380
u32 full_net
Definition: me.h:371
u32 corporate
Definition: me.h:407
u32 build_version
Definition: me.h:367
u32 server
Definition: me.h:405
u32 pltrst_cpurst_time_ms
Definition: me.h:453
u8 state
Definition: me.h:445
u32 device_type
Definition: me.h:457
u16 mask
Definition: me.h:423
u32 hotfix_version
Definition: me.h:366
u32 reserved_2
Definition: me.h:374
u32 num_entries
Definition: me.h:352
u32 regular_super_sku
Definition: me.h:409
u16 s3authentication
Definition: me.h:438
u32 mobile
Definition: me.h:403
u32 intel_mpc
Definition: me.h:378
u32 reserved_5
Definition: me.h:389
u32 workstation
Definition: me.h:406
u32 mrst_pltrst_time_ms
Definition: me.h:452
u32 std_net
Definition: me.h:372
u32 reserved_1
Definition: me.h:381
u8 icc_profile_index
Definition: me.h:429
u32 consumer
Definition: me.h:408
u32 kvm
Definition: me.h:383
u32 wlan
Definition: me.h:388
u32 vlan
Definition: me.h:385
u32 app_id
Definition: me.h:357
u32 reserved_4
Definition: me.h:387
u32 desktop
Definition: me.h:404
u32 manageability
Definition: me.h:373
u8 last_theft_trigger
Definition: me.h:446
u16 flash_wear_out
Definition: me.h:439
u32 mbp_size
Definition: me.h:351
u32 icc_over_clocking
Definition: me.h:379
u32 intel_cls
Definition: me.h:376
tdt_state_flag flags
Definition: me.h:447
u16 authenticate_module
Definition: me.h:437
u32 rsvd1
Definition: me.h:413
u16 icc_start_address
Definition: me.h:422
u16 lock_state
Definition: me.h:436
u32 length
Definition: me.h:359
u32 reserved
Definition: me.h:377
u32 rsvd
Definition: me.h:353
u32 ipv6
Definition: me.h:382
u32 brand
Definition: me.h:412
u32 tls
Definition: me.h:386
u32 wake_event_mrst_time_ms
Definition: me.h:451
u8 num_icc_profiles
Definition: me.h:427
u32 image_type
Definition: me.h:411
u32 minor_version
Definition: me.h:365
Definition: me.h:281
u32 reserved
Definition: me.h:286
u32 icc_command
Definition: me.h:283
u32 api_version
Definition: me.h:282
u32 icc_status
Definition: me.h:284
u32 length
Definition: me.h:285
u8 available
Definition: me.h:418
mbp_me_firmware_type rule_data
Definition: me.h:417
u32 * mfsintegrity
Definition: me.h:469
mbp_platform_key * platform_key
Definition: me.h:465
mbp_at_state * at_state
Definition: me.h:468
mbp_nfc_data * nfc_data
Definition: me.h:471
mbp_mefwcaps * fw_capabilities
Definition: me.h:463
mbp_rom_bist_data * rom_bist_data
Definition: me.h:464
mbp_plat_time * plat_time
Definition: me.h:470
mbp_plat_type * fw_plat_type
Definition: me.h:466
mbp_icc_profile * icc_profile
Definition: me.h:467
mbp_fw_version_name * fw_version_name
Definition: me.h:462
Definition: me.h:88
u32 init_done
Definition: me.h:93
u32 reserved
Definition: me.h:90
u32 rapid_start
Definition: me.h:91
u32 status
Definition: me.h:92
u32 uma_base
Definition: me.h:89
u16 recovery_build_number
Definition: me.h:273
u16 code_build_number
Definition: me.h:269
u16 recovery_minor
Definition: me.h:271
u16 code_major
Definition: me.h:268
u16 code_minor
Definition: me.h:267
u16 recovery_major
Definition: me.h:272
u16 recovery_hot_fix
Definition: me.h:274
u16 code_hot_fix
Definition: me.h:270
Definition: me.h:474
u8 length
Definition: me.h:476
mbp_mefwcaps caps_sku
Definition: me.h:477
u32 id
Definition: me.h:475
u8 reserved[3]
Definition: me.h:478
u8 reset_type
Definition: me.h:307
u8 request_origin
Definition: me.h:306
Definition: me.h:197
u32 extend_reg_valid
Definition: me.h:201
u32 reserved
Definition: me.h:199
u32 extend_reg_algorithm
Definition: me.h:198
u32 extend_feature_present
Definition: me.h:200
Definition: me.h:170
u32 current_state
Definition: me.h:182
u32 current_pmevent
Definition: me.h:183
u32 reserved1
Definition: me.h:172
u32 reserved3
Definition: me.h:181
u32 cpu_replaced_sts
Definition: me.h:174
u32 mbp_cleared
Definition: me.h:180
u32 progress_code
Definition: me.h:184
u32 cpu_replaced_valid
Definition: me.h:178
u32 bist_in_progress
Definition: me.h:171
u32 mfs_failure
Definition: me.h:176
u32 warm_reset_request
Definition: me.h:177
u32 invoke_mebx
Definition: me.h:173
u32 mbp_rdy
Definition: me.h:175
u32 reserved2
Definition: me.h:179
Definition: me.h:51
u32 reserved
Definition: me.h:61
u32 ack_data
Definition: me.h:63
u32 fpt_bad
Definition: me.h:54
u32 fw_init_complete
Definition: me.h:56
u32 operation_state
Definition: me.h:55
u32 working_state
Definition: me.h:52
u32 mfg_mode
Definition: me.h:53
u32 bios_msg_ack
Definition: me.h:64
u32 update_in_progress
Definition: me.h:58
u32 ft_bup_ld_flr
Definition: me.h:57
u32 operation_mode
Definition: me.h:60
u32 error_code
Definition: me.h:59
u32 boot_options_present
Definition: me.h:62
Definition: me.h:69
u32 set_to_one
Definition: me.h:74
u32 reserved_1
Definition: me.h:71
u32 reserved_0
Definition: me.h:73
u32 size
Definition: me.h:70
u32 valid
Definition: me.h:72
Definition: me.h:213
u32 interrupt_enable
Definition: me.h:214
u32 buffer_read_ptr
Definition: me.h:220
u32 interrupt_status
Definition: me.h:215
u32 buffer_depth
Definition: me.h:222
u32 reset
Definition: me.h:218
u32 reserved
Definition: me.h:219
u32 interrupt_generate
Definition: me.h:216
u32 ready
Definition: me.h:217
u32 buffer_write_ptr
Definition: me.h:221
Definition: me.h:235
u32 reserved
Definition: me.h:239
u32 is_complete
Definition: me.h:240
u32 length
Definition: me.h:238
u32 host_address
Definition: me.h:237
u32 client_address
Definition: me.h:236
u32 result
Definition: me.h:263
u32 is_response
Definition: me.h:261
u32 group_id
Definition: me.h:259
u32 reserved
Definition: me.h:262
u32 command
Definition: me.h:260
Definition: me.h:377