soc/amd: factor out check_mca to common code
Change-Id: I139d1fe41bad5213da8890c2867f275b6847e3e1
Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56281
Reviewed-by: Martin Roth <martinroth@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
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..0a37508
--- /dev/null
+++ b/src/soc/amd/common/block/cpu/mca/mca_common.c
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <amdblocks/mca.h>
+#include <cpu/x86/msr.h>
+
+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 b3e6682..cf3f3ac 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();
-}