coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
me.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <bootstate.h>
4 #include <intelblocks/cse.h>
5 #include <console/console.h>
6 #include <soc/me.h>
7 #include <stdint.h>
8 
9 /* Host Firmware Status Register 2 */
10 union me_hfsts2 {
11  uint32_t data;
12  struct {
17  uint32_t rsvd0 : 1;
23  uint32_t ipu_needed : 1;
25  uint32_t rsvd1 : 2;
29  uint32_t phase : 4;
31 };
32 
33 /* Host Firmware Status Register 4 */
34 union me_hfsts4 {
35  uint32_t data;
36  struct {
37  uint32_t rsvd0 : 9;
40  uint32_t rsvd1 : 1;
42  uint32_t rvsd2 : 1;
45  uint32_t rsvd3 : 16;
47 };
48 
49 /* Host Firmware Status Register 5 */
50 union me_hfsts5 {
51  uint32_t data;
52  struct {
53  uint32_t acm_active : 1;
54  uint32_t valid : 1;
63  uint32_t rsvd0 : 2;
66 };
67 
68 /* Host Firmware Status Register 6 */
69 union me_hfsts6 {
70  uint32_t data;
71  struct {
76  uint32_t rsvd0 : 2;
81  uint32_t kmsvn : 4;
82  uint32_t bpmsvn : 4;
85  uint32_t error : 1;
91 };
92 
93 static void dump_me_status(void *unused)
94 {
95  union me_hfsts1 hfsts1;
96  union me_hfsts2 hfsts2;
97  union me_hfsts3 hfsts3;
98  union me_hfsts4 hfsts4;
99  union me_hfsts5 hfsts5;
100  union me_hfsts6 hfsts6;
101 
102  if (!is_cse_enabled())
103  return;
104 
111 
112  printk(BIOS_DEBUG, "ME: HFSTS1 : 0x%08X\n", hfsts1.data);
113  printk(BIOS_DEBUG, "ME: HFSTS2 : 0x%08X\n", hfsts2.data);
114  printk(BIOS_DEBUG, "ME: HFSTS3 : 0x%08X\n", hfsts3.data);
115  printk(BIOS_DEBUG, "ME: HFSTS4 : 0x%08X\n", hfsts4.data);
116  printk(BIOS_DEBUG, "ME: HFSTS5 : 0x%08X\n", hfsts5.data);
117  printk(BIOS_DEBUG, "ME: HFSTS6 : 0x%08X\n", hfsts6.data);
118 
119  /*
120  * Lock Descriptor, and Fuses must be programmed on a
121  * production system to indicate ME Manufacturing mode is disabled.
122  */
123  printk(BIOS_DEBUG, "ME: Manufacturing Mode : %s\n",
124  ((hfsts1.fields.mfg_mode == 0) &&
125  (hfsts6.fields.fpf_soc_lock == 1)) ? "NO" : "YES");
126  /*
127  * The SPI Protection Mode bit reflects SPI descriptor
128  * locked(0) or unlocked(1).
129  */
130  printk(BIOS_DEBUG, "ME: SPI Protection Mode Enabled : %s\n",
131  hfsts1.fields.mfg_mode ? "NO" : "YES");
132  printk(BIOS_DEBUG, "ME: FW Partition Table : %s\n",
133  hfsts1.fields.fpt_bad ? "BAD" : "OK");
134  printk(BIOS_DEBUG, "ME: Bringup Loader Failure : %s\n",
135  hfsts1.fields.ft_bup_ld_flr ? "YES" : "NO");
136  printk(BIOS_DEBUG, "ME: Firmware Init Complete : %s\n",
137  hfsts1.fields.fw_init_complete ? "YES" : "NO");
138  printk(BIOS_DEBUG, "ME: Boot Options Present : %s\n",
139  hfsts1.fields.boot_options_present ? "YES" : "NO");
140  printk(BIOS_DEBUG, "ME: Update In Progress : %s\n",
141  hfsts1.fields.update_in_progress ? "YES" : "NO");
142  printk(BIOS_DEBUG, "ME: D0i3 Support : %s\n",
143  hfsts1.fields.d0i3_support_valid ? "YES" : "NO");
144  printk(BIOS_DEBUG, "ME: Low Power State Enabled : %s\n",
145  hfsts2.fields.low_power_state ? "YES" : "NO");
146  printk(BIOS_DEBUG, "ME: CPU Replaced : %s\n",
147  hfsts2.fields.cpu_replaced ? "YES" : "NO");
148  printk(BIOS_DEBUG, "ME: CPU Replacement Valid : %s\n",
149  hfsts2.fields.cpu_replaced_valid ? "YES" : "NO");
150  printk(BIOS_DEBUG, "ME: Current Working State : %u\n",
151  hfsts1.fields.working_state);
152  printk(BIOS_DEBUG, "ME: Current Operation State : %u\n",
153  hfsts1.fields.operation_state);
154  printk(BIOS_DEBUG, "ME: Current Operation Mode : %u\n",
155  hfsts1.fields.operation_mode);
156  printk(BIOS_DEBUG, "ME: Error Code : %u\n",
157  hfsts1.fields.error_code);
158  printk(BIOS_DEBUG, "ME: Enhanced Debug Mode : %s\n",
159  hfsts1.fields.invoke_enhance_dbg_mode ? "YES" : "NO");
160  printk(BIOS_DEBUG, "ME: CPU Debug Disabled : %s\n",
161  hfsts6.fields.cpu_debug_disable ? "YES" : "NO");
162  printk(BIOS_DEBUG, "ME: TXT Support : %s\n",
163  hfsts6.fields.txt_support ? "YES" : "NO");
164 }
165 
@ BS_OS_RESUME_CHECK
Definition: bootstate.h:85
@ BS_DEV_ENABLE
Definition: bootstate.h:82
@ BS_ON_EXIT
Definition: bootstate.h:96
void print_me_fw_version(void *unused)
Definition: cse.c:855
bool is_cse_enabled(void)
Definition: cse.c:640
uint32_t me_read_config32(int offset)
Definition: cse.c:645
#define printk(level,...)
Definition: stdlib.h:16
@ PCI_ME_HFSTS3
Definition: cse.h:73
@ PCI_ME_HFSTS4
Definition: cse.h:74
@ PCI_ME_HFSTS2
Definition: cse.h:72
@ PCI_ME_HFSTS6
Definition: cse.h:76
@ PCI_ME_HFSTS5
Definition: cse.h:75
@ PCI_ME_HFSTS1
Definition: cse.h:71
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
BOOT_STATE_INIT_ENTRY(BS_DEV_ENABLE, BS_ON_EXIT, print_me_fw_version, NULL)
void dump_me_status(void *unused)
Definition: me.c:97
#define NULL
Definition: stddef.h:19
unsigned int uint32_t
Definition: stdint.h:14
Definition: x86.c:23
Definition: me.h:9
u32 boot_options_present
Definition: me.h:22
u32 operation_state
Definition: me.h:15
u32 invoke_enhance_dbg_mode
Definition: me.h:23
u32 update_in_progress
Definition: me.h:18
u32 d0i3_support_valid
Definition: me.h:28
u32 fw_init_complete
Definition: me.h:16
u32 mfg_mode
Definition: me.h:13
u32 ft_bup_ld_flr
Definition: me.h:17
u32 operation_mode
Definition: me.h:20
u32 error_code
Definition: me.h:19
struct me_hfsts1::@464 fields
u32 data
Definition: me.h:10
u32 working_state
Definition: me.h:12
u32 fpt_bad
Definition: me.h:14
Definition: me.c:11
uint32_t status_data
Definition: me.c:28
uint32_t cpu_replaced_valid
Definition: me.c:21
uint32_t listener_change
Definition: me.c:27
uint32_t cpu_replaced
Definition: me.c:17
uint32_t phase
Definition: me.c:30
uint32_t icc_prog_status
Definition: me.c:15
uint32_t rsvd1
Definition: me.c:26
uint32_t low_power_state
Definition: me.c:22
uint32_t invoke_mebx
Definition: me.c:16
uint32_t data
Definition: me.c:12
uint32_t warm_reset_rqst
Definition: me.c:20
uint32_t current_pmevent
Definition: me.c:29
uint32_t me_power_gate
Definition: me.c:23
uint32_t ipu_needed
Definition: me.c:24
uint32_t rsvd0
Definition: me.c:18
uint32_t mfs_failure
Definition: me.c:19
uint32_t forced_safe_boot
Definition: me.c:25
uint32_t nftp_load_failure
Definition: me.c:14
struct me_hfsts2::@477 fields
Definition: me.h:33
u32 data
Definition: me.h:34
Definition: me.c:35
uint32_t data
Definition: me.c:36
uint32_t boot_guard_self_test
Definition: me.c:45
uint32_t fwsts_valid
Definition: me.c:44
uint32_t rsvd0
Definition: me.c:38
uint32_t enforcement_flow
Definition: me.c:39
uint32_t rvsd2
Definition: me.c:43
uint32_t tpms_disconnected
Definition: me.c:42
uint32_t sx_resume_type
Definition: me.c:40
uint32_t rsvd1
Definition: me.c:41
uint32_t rsvd3
Definition: me.c:46
struct me_hfsts4::@478 fields
Definition: me.c:51
uint32_t inc_key_manifest
Definition: me.c:62
uint32_t error_status_code
Definition: me.c:57
uint32_t inc_boot_policy
Definition: me.c:63
uint32_t result_code_source
Definition: me.c:56
uint32_t data
Definition: me.c:52
struct me_hfsts5::@479 fields
uint32_t valid
Definition: me.c:55
uint32_t scrtm_indicator
Definition: me.c:60
uint32_t start_enforcement
Definition: me.c:65
uint32_t timeout_count
Definition: me.c:59
uint32_t rsvd0
Definition: me.c:64
uint32_t acm_active
Definition: me.c:54
uint32_t acm_done_sts
Definition: me.c:58
uint32_t inc_boot_guard_acm
Definition: me.c:61
Definition: me.c:70
uint32_t verified_boot
Definition: me.c:80
uint32_t fpf_disable
Definition: me.c:88
uint32_t force_boot_guard_acm
Definition: me.c:73
uint32_t measured_boot
Definition: me.c:79
uint32_t bsp_init_disable
Definition: me.c:75
uint32_t protect_bios_env
Definition: me.c:76
uint32_t data
Definition: me.c:71
uint32_t error_enforce_policy
Definition: me.c:78
uint32_t error
Definition: me.c:86
uint32_t kmsvn
Definition: me.c:82
struct me_hfsts6::@480 fields
uint32_t rsvd0
Definition: me.c:77
uint32_t boot_policy_status
Definition: me.c:85
uint32_t cpu_debug_disable
Definition: me.c:74
uint32_t fpf_soc_lock
Definition: me.c:89
uint32_t bpmsvn
Definition: me.c:83
uint32_t txt_support
Definition: me.c:90
uint32_t boot_guard_acmsvn
Definition: me.c:81
uint32_t boot_guard_disable
Definition: me.c:87
uint32_t key_manifest_id
Definition: me.c:84