Felix Held has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/56281 )
Change subject: soc/amd: factor out check_mca to common code ......................................................................
soc/amd: factor out check_mca to common code
Change-Id: I139d1fe41bad5213da8890c2867f275b6847e3e1 Signed-off-by: Felix Held felix-coreboot@felixheld.de --- M src/soc/amd/cezanne/Kconfig M src/soc/amd/cezanne/mca.c M src/soc/amd/common/block/cpu/Kconfig A src/soc/amd/common/block/cpu/mca/Makefile.inc A src/soc/amd/common/block/cpu/mca/mca_common.c M src/soc/amd/common/block/include/amdblocks/mca.h M src/soc/amd/picasso/Kconfig M src/soc/amd/picasso/mca.c M src/soc/amd/stoneyridge/Kconfig M src/soc/amd/stoneyridge/mca.c 10 files changed, 41 insertions(+), 28 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/81/56281/1
diff --git a/src/soc/amd/cezanne/Kconfig b/src/soc/amd/cezanne/Kconfig index 8f93512..71cca6a 100644 --- a/src/soc/amd/cezanne/Kconfig +++ b/src/soc/amd/cezanne/Kconfig @@ -50,6 +50,7 @@ select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC select SOC_AMD_COMMON_BLOCK_LPC_SPI_DMA + select SOC_AMD_COMMON_BLOCK_MCAX select SOC_AMD_COMMON_BLOCK_NONCAR select SOC_AMD_COMMON_BLOCK_PCI select SOC_AMD_COMMON_BLOCK_PCI_MMCONF diff --git a/src/soc/amd/cezanne/mca.c b/src/soc/amd/cezanne/mca.c index a8d9702..68fae29 100644 --- a/src/soc/amd/cezanne/mca.c +++ b/src/soc/amd/cezanne/mca.c @@ -1,18 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/mca.h> -#include <cpu/x86/msr.h>
-static void mca_check_all_banks(void) +void mca_check_all_banks(void) { /* TODO: Implement MCAX register checking and BERT table generation. */ } - -/* Check the Machine Check Architecture Extension registers */ -void check_mca(void) -{ - mca_check_all_banks(); - /* mca_clear_status uses the MCA registers and not the MCAX ones. Since they are - aliases, we can use either set of registers. */ - mca_clear_status(); -} diff --git a/src/soc/amd/common/block/cpu/Kconfig b/src/soc/amd/common/block/cpu/Kconfig index 1437326..79e011f 100644 --- a/src/soc/amd/common/block/cpu/Kconfig +++ b/src/soc/amd/common/block/cpu/Kconfig @@ -26,6 +26,26 @@
endif # SOC_AMD_COMMON_BLOCK_NONCAR
+config SOC_AMD_COMMON_BLOCK_MCA_COMMON + bool + help + Add common machine check architecture support. Do not select this + in the SoC's Kconfig; select either SOC_AMD_COMMON_BLOCK_MCA or + SOC_AMD_COMMON_BLOCK_MCAX which will select this one. + +config SOC_AMD_COMMON_BLOCK_MCA + bool + select SOC_AMD_COMMON_BLOCK_MCA_COMMON + help + Add IA32 machine check architecture (MCA) support for pre-Zen CPUs. + +config SOC_AMD_COMMON_BLOCK_MCAX + bool + select SOC_AMD_COMMON_BLOCK_MCA_COMMON + help + Add extended machine check architecture (MCAX) support for AMD family + 17h, 19h and possibly newer CPUs. + config SOC_AMD_COMMON_BLOCK_SMM bool help diff --git a/src/soc/amd/common/block/cpu/mca/Makefile.inc b/src/soc/amd/common/block/cpu/mca/Makefile.inc new file mode 100644 index 0000000..0aa47e1 --- /dev/null +++ b/src/soc/amd/common/block/cpu/mca/Makefile.inc @@ -0,0 +1 @@ +ramstage-$(CONFIG_SOC_AMD_COMMON_BLOCK_MCA_COMMON) += mca_common.c diff --git a/src/soc/amd/common/block/cpu/mca/mca_common.c b/src/soc/amd/common/block/cpu/mca/mca_common.c new file mode 100644 index 0000000..fa9a531 --- /dev/null +++ b/src/soc/amd/common/block/cpu/mca/mca_common.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <amdblocks/mca.h> +#include <cpu/x86/msr.h> + +/* Check the Machine Check Architecture Extension registers */ +void check_mca(void) +{ + mca_check_all_banks(); + /* mca_clear_status uses the MCA registers which can be used in both the MCA and MCAX + case */ + mca_clear_status(); +} diff --git a/src/soc/amd/common/block/include/amdblocks/mca.h b/src/soc/amd/common/block/include/amdblocks/mca.h index 9ea29e8..16b016b 100644 --- a/src/soc/amd/common/block/include/amdblocks/mca.h +++ b/src/soc/amd/common/block/include/amdblocks/mca.h @@ -4,5 +4,6 @@ #define AMD_BLOCK_MCA_H
void check_mca(void); +void mca_check_all_banks(void);
#endif /* AMD_BLOCK_MCA_H */ diff --git a/src/soc/amd/picasso/Kconfig b/src/soc/amd/picasso/Kconfig index 42c3bfc..88bff50 100644 --- a/src/soc/amd/picasso/Kconfig +++ b/src/soc/amd/picasso/Kconfig @@ -41,6 +41,7 @@ select SOC_AMD_COMMON_BLOCK_I2C select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC + select SOC_AMD_COMMON_BLOCK_MCAX select SOC_AMD_COMMON_BLOCK_NONCAR select SOC_AMD_COMMON_BLOCK_PCI select SOC_AMD_COMMON_BLOCK_PCIE_GPP_DRIVER diff --git a/src/soc/amd/picasso/mca.c b/src/soc/amd/picasso/mca.c index 24a921a..97f5d0b 100644 --- a/src/soc/amd/picasso/mca.c +++ b/src/soc/amd/picasso/mca.c @@ -192,7 +192,7 @@ printk(BIOS_WARNING, " MC%u_CTL_MASK = %08x_%08x\n", bank, msr.hi, msr.lo); }
-static void mca_check_all_banks(void) +void mca_check_all_banks(void) { struct mca_bank_status mci; const unsigned int num_banks = mca_get_bank_count(); @@ -214,12 +214,3 @@ } } } - -/* Check the Machine Check Architecture Extension registers */ -void check_mca(void) -{ - mca_check_all_banks(); - /* mca_clear_status uses the MCA registers and not the MCAX ones. Since they are - aliases, we can use either set of registers. */ - mca_clear_status(); -} diff --git a/src/soc/amd/stoneyridge/Kconfig b/src/soc/amd/stoneyridge/Kconfig index 821d1ee..e799ea0 100644 --- a/src/soc/amd/stoneyridge/Kconfig +++ b/src/soc/amd/stoneyridge/Kconfig @@ -33,6 +33,7 @@ select SOC_AMD_COMMON_BLOCK_I2C select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC + select SOC_AMD_COMMON_BLOCK_MCA select SOC_AMD_COMMON_BLOCK_PCI select SOC_AMD_COMMON_BLOCK_PI select SOC_AMD_COMMON_BLOCK_PM diff --git a/src/soc/amd/stoneyridge/mca.c b/src/soc/amd/stoneyridge/mca.c index 5971d44..67efdfd 100644 --- a/src/soc/amd/stoneyridge/mca.c +++ b/src/soc/amd/stoneyridge/mca.c @@ -179,7 +179,7 @@ printk(BIOS_WARNING, " MC%u_CTL_MASK = %08x_%08x\n", bank, msr.hi, msr.lo); }
-static void mca_check_all_banks(void) +void mca_check_all_banks(void) { struct mca_bank_status mci; const unsigned int num_banks = mca_get_bank_count(); @@ -201,9 +201,3 @@ } } } - -void check_mca(void) -{ - mca_check_all_banks(); - mca_clear_status(); -}