xref: /aosp_15_r20/external/coreboot/src/soc/amd/common/block/cpu/mca/mca_common_bert.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <amdblocks/mca.h>
4 #include <cper.h>
5 #include <types.h>
6 #include "mca_common_defs.h"
7 
error_to_chktype(struct mca_bank_status * mci)8 enum cper_x86_check_type error_to_chktype(struct mca_bank_status *mci)
9 {
10 	int error = mca_err_type(mci->sts);
11 
12 	if (error == MCA_ERRTYPE_BUS)
13 		return X86_PROCESSOR_BUS_CHK;
14 	if (error == MCA_ERRTYPE_INT)
15 		return X86_PROCESSOR_MS_CHK;
16 	if (error == MCA_ERRTYPE_MEM)
17 		return X86_PROCESSOR_CACHE_CHK;
18 	if (error == MCA_ERRTYPE_TLB)
19 		return X86_PROCESSOR_TLB_CHK;
20 
21 	return X86_PROCESSOR_MS_CHK; /* unrecognized */
22 }
23 
24 /* Fill additional information in the Generic Processor Error Section. */
fill_generic_section(cper_proc_generic_error_section_t * sec,struct mca_bank_status * mci)25 void fill_generic_section(cper_proc_generic_error_section_t *sec,
26 		struct mca_bank_status *mci)
27 {
28 	int type = mca_err_type(mci->sts);
29 
30 	if (type == MCA_ERRTYPE_BUS) /* try to map MCA errors to CPER types */
31 		sec->error_type = GENPROC_ERRTYPE_BUS;
32 	else if (type == MCA_ERRTYPE_INT)
33 		sec->error_type = GENPROC_ERRTYPE_UARCH;
34 	else if (type == MCA_ERRTYPE_MEM)
35 		sec->error_type = GENPROC_ERRTYPE_CACHE;
36 	else if (type == MCA_ERRTYPE_TLB)
37 		sec->error_type = GENPROC_ERRTYPE_TLB;
38 	else
39 		sec->error_type = GENPROC_ERRTYPE_UNKNOWN;
40 	sec->validation |= GENPROC_VALID_PROC_ERR_TYPE;
41 }
42