diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2010-09-16 17:08:14 +0400 |
---|---|---|
committer | Borislav Petkov <bp@amd64.org> | 2010-10-21 16:48:04 +0400 |
commit | 9be0bb1072e3544934e0ac20f184e50805aecf9c (patch) | |
tree | 88f026a249d3ec1f5ae51a0b8aa4a645864008f1 /drivers/edac | |
parent | f0157b3afd2ec6331245768a785487249a3c9734 (diff) | |
download | linux-9be0bb1072e3544934e0ac20f184e50805aecf9c.tar.xz |
EDAC, MCE: Add F12h DC MCE decoder
F12h DC MCE signatures are a subset of F10h's so reuse them.
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/mce_amd.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c index 9fa61ee2d743..1f895dfb756a 100644 --- a/drivers/edac/mce_amd.c +++ b/drivers/edac/mce_amd.c @@ -74,16 +74,10 @@ static const char *f10h_nb_mce_desc[] = { "ECC Error in the Probe Filter directory" }; -static bool f10h_dc_mce(u16 ec) +static bool f12h_dc_mce(u16 ec) { - u8 r4 = (ec >> 4) & 0xf; bool ret = false; - if (r4 == R4_GEN) { - pr_cont("during data scrub.\n"); - return true; - } - if (MEM_ERROR(ec)) { u8 ll = ec & 0x3; ret = true; @@ -98,6 +92,18 @@ static bool f10h_dc_mce(u16 ec) return ret; } +static bool f10h_dc_mce(u16 ec) +{ + u8 r4 = (ec >> 4) & 0xf; + u8 ll = ec & 0x3; + + if (r4 == R4_GEN && ll == LL_L1) { + pr_cont("during data scrub.\n"); + return true; + } + return f12h_dc_mce(ec); +} + static bool k8_dc_mce(u16 ec) { if (BUS_ERROR(ec)) { @@ -632,6 +638,10 @@ static int __init mce_amd_init(void) fam_ops->nb_mce = f10h_nb_mce; break; + case 0x12: + fam_ops->dc_mce = f12h_dc_mce; + break; + case 0x14: nb_err_cpumask = 0x3; fam_ops->dc_mce = f14h_dc_mce; |