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 <device/pci_ops.h>
4 #include <bootstate.h>
5 #include <commonlib/helpers.h>
6 #include <console/console.h>
7 #include <device/pci.h>
8 #include <intelblocks/cse.h>
9 #include <soc/me.h>
10 #include <soc/pci_devs.h>
11 #include <stdint.h>
12 
13 /* Host Firmware Status Register 2 */
14 union me_hfsts2 {
15  uint32_t data;
16  struct {
21  uint32_t rsvd0 : 1;
27  uint32_t ipu_needed : 1;
29  uint32_t rsvd1 : 2;
33  uint32_t phase : 4;
35 };
36 
37 /* Host Firmware Status Register 4 */
38 union me_hfsts4 {
39  uint32_t data;
40  struct {
41  uint32_t rsvd0 : 9;
44  uint32_t rsvd1 : 1;
46  uint32_t rvsd2 : 1;
49  uint32_t rsvd3 : 16;
51 };
52 
53 /* Host Firmware Status Register 5 */
54 union me_hfsts5 {
55  uint32_t data;
56  struct {
57  uint32_t acm_active : 1;
58  uint32_t valid : 1;
67  uint32_t rsvd0 : 2;
70 };
71 
72 /* Host Firmware Status Register 6 */
73 union me_hfsts6 {
74  uint32_t data;
75  struct {
80  uint32_t rsvd0 : 2;
85  uint32_t kmsvn : 4;
86  uint32_t bpmsvn : 4;
89  uint32_t error : 1;
95 };
96 
97 void dump_me_status(void *unused)
98 {
99  union me_hfsts1 hfsts1;
100  union me_hfsts2 hfsts2;
101  union me_hfsts3 hfsts3;
102  union me_hfsts4 hfsts4;
103  union me_hfsts5 hfsts5;
104  union me_hfsts6 hfsts6;
105 
106  if (!is_cse_enabled())
107  return;
108 
115 
116  printk(BIOS_DEBUG, "ME: HFSTS1 : 0x%08X\n", hfsts1.data);
117  printk(BIOS_DEBUG, "ME: HFSTS2 : 0x%08X\n", hfsts2.data);
118  printk(BIOS_DEBUG, "ME: HFSTS3 : 0x%08X\n", hfsts3.data);
119  printk(BIOS_DEBUG, "ME: HFSTS4 : 0x%08X\n", hfsts4.data);
120  printk(BIOS_DEBUG, "ME: HFSTS5 : 0x%08X\n", hfsts5.data);
121  printk(BIOS_DEBUG, "ME: HFSTS6 : 0x%08X\n", hfsts6.data);
122 
123  printk(BIOS_DEBUG, "ME: Manufacturing Mode : %s\n",
124  hfsts1.fields.mfg_mode ? "YES" : "NO");
125  printk(BIOS_DEBUG, "ME: FW Partition Table : %s\n",
126  hfsts1.fields.fpt_bad ? "BAD" : "OK");
127  printk(BIOS_DEBUG, "ME: Bringup Loader Failure : %s\n",
128  hfsts1.fields.ft_bup_ld_flr ? "YES" : "NO");
129  printk(BIOS_DEBUG, "ME: Firmware Init Complete : %s\n",
130  hfsts1.fields.fw_init_complete ? "YES" : "NO");
131  printk(BIOS_DEBUG, "ME: Boot Options Present : %s\n",
132  hfsts1.fields.boot_options_present ? "YES" : "NO");
133  printk(BIOS_DEBUG, "ME: Update In Progress : %s\n",
134  hfsts1.fields.update_in_progress ? "YES" : "NO");
135  printk(BIOS_DEBUG, "ME: D0i3 Support : %s\n",
136  hfsts1.fields.d0i3_support_valid ? "YES" : "NO");
137  printk(BIOS_DEBUG, "ME: Low Power State Enabled : %s\n",
138  hfsts2.fields.low_power_state ? "YES" : "NO");
139  printk(BIOS_DEBUG, "ME: CPU Replaced : %s\n",
140  hfsts2.fields.cpu_replaced ? "YES" : "NO");
141  printk(BIOS_DEBUG, "ME: CPU Replacement Valid : %s\n",
142  hfsts2.fields.cpu_replaced_valid ? "YES" : "NO");
143  printk(BIOS_DEBUG, "ME: Current Working State : %u\n",
144  hfsts1.fields.working_state);
145  printk(BIOS_DEBUG, "ME: Current Operation State : %u\n",
146  hfsts1.fields.operation_state);
147  printk(BIOS_DEBUG, "ME: Current Operation Mode : %u\n",
148  hfsts1.fields.operation_mode);
149  printk(BIOS_DEBUG, "ME: Error Code : %u\n",
150  hfsts1.fields.error_code);
151  printk(BIOS_DEBUG, "ME: CPU Debug Disabled : %s\n",
152  hfsts6.fields.cpu_debug_disable ? "YES" : "NO");
153  printk(BIOS_DEBUG, "ME: TXT Support : %s\n",
154  hfsts6.fields.txt_support ? "YES" : "NO");
155 }
156 
@ 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 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