summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Held <felix-coreboot@felixheld.de>2021-07-14 00:05:39 +0200
committerFelix Held <felix-coreboot@felixheld.de>2021-07-14 23:10:46 +0000
commit1e1d490ff885206dfb30dbd7a3dfeffa818afdb6 (patch)
tree24f9036e33f77983c2089bbfc3f5c64736bf9aa4
parentdc970fc0399b96e42671770fad6a7da5a40de461 (diff)
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>
-rw-r--r--src/soc/amd/cezanne/Kconfig1
-rw-r--r--src/soc/amd/cezanne/mca.c12
-rw-r--r--src/soc/amd/common/block/cpu/Kconfig20
-rw-r--r--src/soc/amd/common/block/cpu/mca/Makefile.inc1
-rw-r--r--src/soc/amd/common/block/cpu/mca/mca_common.c12
-rw-r--r--src/soc/amd/common/block/include/amdblocks/mca.h1
-rw-r--r--src/soc/amd/picasso/Kconfig1
-rw-r--r--src/soc/amd/picasso/mca.c11
-rw-r--r--src/soc/amd/stoneyridge/Kconfig1
-rw-r--r--src/soc/amd/stoneyridge/mca.c8
10 files changed, 40 insertions, 28 deletions
diff --git a/src/soc/amd/cezanne/Kconfig b/src/soc/amd/cezanne/Kconfig
index 8f93512ea3..71cca6a11b 100644
--- a/src/soc/amd/cezanne/Kconfig
+++ b/src/soc/amd/cezanne/Kconfig
@@ -50,6 +50,7 @@ config SOC_SPECIFIC_OPTIONS
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 a8d97029f1..68fae29204 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 1437326f9d..79e011fadd 100644
--- a/src/soc/amd/common/block/cpu/Kconfig
+++ b/src/soc/amd/common/block/cpu/Kconfig
@@ -26,6 +26,26 @@ config MEMLAYOUT_LD_FILE
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 0000000000..0aa47e161c
--- /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 0000000000..0a375089f2
--- /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 9ea29e8ccc..16b016b4cb 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 42c3bfc029..88bff50179 100644
--- a/src/soc/amd/picasso/Kconfig
+++ b/src/soc/amd/picasso/Kconfig
@@ -41,6 +41,7 @@ config CPU_SPECIFIC_OPTIONS
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 24a921a7a6..97f5d0b819 100644
--- a/src/soc/amd/picasso/mca.c
+++ b/src/soc/amd/picasso/mca.c
@@ -192,7 +192,7 @@ static void mca_print_error(unsigned int bank)
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 @@ static void mca_check_all_banks(void)
}
}
}
-
-/* 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 821d1ee216..e799ea0b42 100644
--- a/src/soc/amd/stoneyridge/Kconfig
+++ b/src/soc/amd/stoneyridge/Kconfig
@@ -33,6 +33,7 @@ config CPU_SPECIFIC_OPTIONS
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 b3e6682074..cf3f3acc2d 100644
--- a/src/soc/amd/stoneyridge/mca.c
+++ b/src/soc/amd/stoneyridge/mca.c
@@ -179,7 +179,7 @@ static void mca_print_error(unsigned int bank)
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 @@ static void mca_check_all_banks(void)
}
}
}
-
-void check_mca(void)
-{
- mca_check_all_banks();
- mca_clear_status();
-}