coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
crashlog.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef SOC_INTEL_COMMON_BLOCK_CRASHLOG_H
4 #define SOC_INTEL_COMMON_BLOCK_CRASHLOG_H
5 
6 #include <console/console.h>
7 #include <device/pci_ops.h>
8 #include <device/pci_def.h>
9 #include <device/mmio.h>
10 #include <fsp/util.h>
11 #include <intelblocks/pmc_ipc.h>
12 #include <types.h>
13 #include <arch/io.h>
14 
15 /* PMC CrashLog Command */
16 #define PMC_IPC_CMD_CRASHLOG 0xA6
17 #define PMC_IPC_CMD_ID_CRASHLOG_DISCOVERY 0x01
18 #define PMC_IPC_CMD_ID_CRASHLOG_DISABLE 0x02
19 #define PMC_IPC_CMD_ID_CRASHLOG_ERASE 0x04
20 #define PMC_IPC_CMD_ID_CRASHLOG_ON_RESET 0x05
21 #define PMC_IPC_CMD_ID_CRASHLOG_RE_ARM_ON_RESET 0x06
22 
23 /* CPU CrashLog Mailbox commands */
24 #define CPU_CRASHLOG_CMD_DISABLE 0
25 #define CPU_CRASHLOG_CMD_CLEAR 2
26 #define CPU_CRASHLOG_MAILBOX_WAIT_STALL 1
27 #define CPU_CRASHLOG_MAILBOX_WAIT_TIMEOUT 1000
28 #define CPU_CRASHLOG_DISC_TAB_GUID_VALID 0x1600
29 
30 #define CRASHLOG_SIZE_DEBUG_PURPOSE 0x640
31 
32 /* PMC crashlog discovery structs */
33 typedef union {
34  struct {
37  } bits;
39 } __packed pmc_crashlog_discov_region_t;
40 
41 typedef struct {
43  pmc_crashlog_discov_region_t regions[256];
44 } __packed pmc_crashlog_desc_table_t;
45 
46 typedef union {
47  struct {
49  u32 dis :1;
51  u32 size :12;
52  u32 base_offset :16; /* Start offset of CrashLog in PMC SSRAM */
53  u32 rsv :16;
54  u32 desc_tabl_offset :16; /* start offset of descriptor table */
55  } bits;
57 } __packed pmc_ipc_discovery_buf_t;
58 
59 
60 /* CPU/TELEMETRY crashlog discovery structs */
61 
62 typedef union {
63  struct {
67  } fields;
68  u32 data;
69 } __packed cap_data_t;
70 
71 typedef union {
72  struct {
77  u64 num_entries :8; /*Numb of telemetry aggregators in lookup table. */
78  u64 entries_size :8; /* Entry Size in DWORDS */
79  } fields;
81  u32 data_32[2];
82 } __packed devsc_data_t;
83 
84 typedef union {
85  struct {
86  u32 t_bir_q :3; /* tBIR, The BAR to be used */
88  } fields;
89  u32 data;
90 } __packed discovery_data_t;
91 
92 typedef struct {
93  cap_data_t cap_data;
94  devsc_data_t devsc_data;
95  discovery_data_t discovery_data;
96 } __packed tel_crashlog_devsc_cap_t;
97 
98 typedef union {
99  struct {
102  u64 count :8;
104  u64 guid :32;
105  } fields;
107 } __packed cpu_crashlog_header_t;
108 
109 
110 /* Structures for CPU CrashLog mailbox interface */
111 typedef union {
112  struct {
114  u32 param :8;
115  u32 reserved :15;
116  u32 busy :1;
117  } fields;
118  u32 data;
119 } __packed cpu_crashlog_mailbox_t;
120 
121 typedef union {
122  struct {
123  u32 offset :32;
124  u32 size :16;
125  u32 reserved :16;
126  } fields;
127  u64 data;
128 } __packed cpu_crashlog_buffer_info_t;
129 
130 typedef struct {
131  cpu_crashlog_header_t header;
132  cpu_crashlog_mailbox_t cmd_mailbox;
134  cpu_crashlog_buffer_info_t buffers[256];
135 } __packed cpu_crashlog_discovery_table_t;
136 
137 int cl_get_cpu_record_size(void);
138 int cl_get_pmc_record_size(void);
140 u32 cl_get_cpu_tmp_bar(void);
142 int cl_get_total_data_size(void);
143 bool cl_pmc_sram_has_mmio_access(void);
144 bool cpu_crashlog_support(void);
145 bool pmc_crashlog_support(void);
146 bool cl_cpu_data_present(void);
147 bool cl_pmc_data_present(void);
148 void cl_get_cpu_sram_data(void);
149 void cl_get_pmc_sram_data(void);
150 void reset_discovery_buffers(void);
151 void update_new_pmc_crashlog_size(u32 *pmc_crash_size);
152 void update_new_cpu_crashlog_size(u32 *cpu_crash_size);
153 pmc_ipc_discovery_buf_t cl_get_pmc_discovery_buf(void);
154 pmc_crashlog_desc_table_t cl_get_pmc_descriptor_table(void);
155 cpu_crashlog_discovery_table_t cl_get_cpu_discovery_table(void);
157 int cpu_cl_poll_mailbox_ready(u32 cl_mailbox_addr);
158 int cpu_cl_mailbox_cmd(u8 cmd, u8 param);
159 int cpu_cl_clear_data(void);
160 int pmc_cl_gen_descriptor_table(u32 desc_table_addr,
161  pmc_crashlog_desc_table_t *descriptor_table);
162 bool pmc_cl_discovery(void);
163 bool cpu_cl_discovery(void);
164 int cl_pmc_re_arm_after_reset(void);
165 int cl_pmc_clear(void);
167 bool discover_crashlog(void);
168 bool cl_copy_data_from_sram(u32 src_bar,
169  u32 offset,
170  u32 size,
171  u32 *dest_addr,
172  u32 buffer_index,
173  bool pmc_sram);
175 bool cl_fill_cpu_records(void *cl_record);
176 bool cl_fill_pmc_records(void *cl_record);
177 
178 static const EFI_GUID FW_ERR_SECTION_GUID = {
179  0x81212a96, 0x09ed, 0x4996,
180  { 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed }
181 };
182 
183 #endif /* SOC_INTEL_COMMON_BLOCK_CRASHLOG */
static pmc_crashlog_desc_table_t descriptor_table
Definition: crashlog.c:20
bool cl_fill_pmc_records(void *cl_record)
Definition: crashlog.c:487
bool cl_pmc_sram_has_mmio_access(void)
Definition: crashlog.c:117
void collect_pmc_and_cpu_crashlog_from_srams(void)
Definition: crashlog.c:445
bool cl_pmc_data_present(void)
Definition: crashlog.c:260
int cl_get_total_data_size(void)
Definition: crashlog.c:230
bool discover_crashlog(void)
Definition: crashlog.c:239
int cl_get_pmc_record_size(void)
Definition: crashlog.c:245
int cl_pmc_clear(void)
Definition: crashlog.c:193
int cpu_cl_clear_data(void)
Definition: crashlog.c:133
cpu_crashlog_discovery_table_t cl_get_cpu_discovery_table(void)
Definition: crashlog.c:280
int cl_pmc_re_arm_after_reset(void)
Definition: crashlog.c:170
bool cl_copy_data_from_sram(u32 src_bar, u32 offset, u32 size, u32 *dest_addr, u32 buffer_index, bool pmc_sram)
Definition: crashlog.c:254
int pmc_cl_gen_descriptor_table(u32 desc_table_addr, pmc_crashlog_desc_table_t *descriptor_table)
Definition: crashlog.c:138
pmc_ipc_discovery_buf_t cl_get_pmc_discovery_buf(void)
Definition: crashlog.c:235
void cl_get_cpu_sram_data(void)
Definition: crashlog.c:386
u32 cl_get_cpu_mb_int_addr(void)
Definition: crashlog.c:24
int cl_get_cpu_record_size(void)
Definition: crashlog.c:250
int cpu_cl_mailbox_cmd(u8 cmd, u8 param)
Definition: crashlog.c:112
bool cl_cpu_data_present(void)
Definition: crashlog.c:255
static const EFI_GUID FW_ERR_SECTION_GUID
Definition: crashlog.h:178
bool pmc_crashlog_support(void)
Definition: crashlog.c:270
void update_new_pmc_crashlog_size(u32 *pmc_crash_size)
Definition: crashlog.c:275
u32 cl_get_cpu_bar_addr(void)
Definition: crashlog.c:94
void update_new_cpu_crashlog_size(u32 *cpu_crash_size)
Definition: crashlog.c:285
pmc_crashlog_desc_table_t cl_get_pmc_descriptor_table(void)
Definition: crashlog.c:240
bool cpu_crashlog_support(void)
Definition: crashlog.c:265
bool cpu_cl_discovery(void)
Definition: crashlog.c:199
u32 cl_get_cpu_tmp_bar(void)
Definition: crashlog.c:112
bool cl_fill_cpu_records(void *cl_record)
Definition: crashlog.c:469
int cpu_cl_poll_mailbox_ready(u32 cl_mailbox_addr)
Definition: crashlog.c:91
int cl_pmc_en_gen_on_all_reboot(void)
Definition: crashlog.c:218
bool pmc_cl_discovery(void)
Definition: crashlog.c:29
void cl_get_pmc_sram_data(void)
Definition: crashlog.c:294
u32 cl_gen_cpu_bar_addr(void)
void reset_discovery_buffers(void)
Definition: crashlog.c:223
static size_t offset
Definition: flashconsole.c:16
uint8_t buffers[3][CACHE_LINE_SIZE]
Definition: qspi.c:61
uint64_t u64
Definition: stdint.h:54
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
u32 base_offset
Definition: crashlog.h:52
u32 discovery_table_offset
Definition: crashlog.h:87
u32 param
Definition: crashlog.h:114
u32 rsv
Definition: crashlog.h:53
u32 discov_mechanism
Definition: crashlog.h:50
u64 reserved
Definition: crashlog.h:103
discovery_data_t discovery_data
Definition: crashlog.h:95
u32 numb_regions
Definition: crashlog.h:42
u16 size
Definition: crashlog.h:36
u32 desc_tabl_offset
Definition: crashlog.h:54
u32 dis
Definition: crashlog.h:49
cpu_crashlog_mailbox_t cmd_mailbox
Definition: crashlog.h:132
u64 guid
Definition: crashlog.h:104
u64 count
Definition: crashlog.h:102
devsc_data_t devsc_data
Definition: crashlog.h:94
u64 devsc_ven_id
Definition: crashlog.h:73
u64 data_64
Definition: crashlog.h:80
u32 t_bir_q
Definition: crashlog.h:86
u64 devsc_ver
Definition: crashlog.h:74
u32 mailbox_data
Definition: crashlog.h:133
u64 num_entries
Definition: crashlog.h:77
u32 data
Definition: crashlog.h:38
u32 busy
Definition: crashlog.h:116
u64 access_type
Definition: crashlog.h:100
u32 next_cap_offset
Definition: crashlog.h:66
u64 crash_type
Definition: crashlog.h:101
u32 pcie_cap_id
Definition: crashlog.h:64
u32 command
Definition: crashlog.h:113
cpu_crashlog_header_t header
Definition: crashlog.h:131
u64 devsc_id
Definition: crashlog.h:76
u64 val_64_bits
Definition: crashlog.h:56
u16 offset
Definition: crashlog.h:35
u32 offset
Definition: crashlog.h:123
u64 entries_size
Definition: crashlog.h:78
u64 devsc_len
Definition: crashlog.h:75
u32 cap_ver
Definition: crashlog.h:65
u32 supported
Definition: crashlog.h:48
cap_data_t cap_data
Definition: crashlog.h:93