diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2010-09-16 09:08:14 -0400 |
---|---|---|
committer | Borislav Petkov <bp@amd64.org> | 2010-10-21 08:48:04 -0400 |
commit | 9be0bb1072e3544934e0ac20f184e50805aecf9c (patch) | |
tree | 88f026a249d3ec1f5ae51a0b8aa4a645864008f1 /drivers/edac/mce_amd.c | |
parent | f0157b3afd2ec6331245768a785487249a3c9734 (diff) |
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/mce_amd.c')
-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[] = { | |||
74 | "ECC Error in the Probe Filter directory" | 74 | "ECC Error in the Probe Filter directory" |
75 | }; | 75 | }; |
76 | 76 | ||
77 | static bool f10h_dc_mce(u16 ec) | 77 | static bool f12h_dc_mce(u16 ec) |
78 | { | 78 | { |
79 | u8 r4 = (ec >> 4) & 0xf; | ||
80 | bool ret = false; | 79 | bool ret = false; |
81 | 80 | ||
82 | if (r4 == R4_GEN) { | ||
83 | pr_cont("during data scrub.\n"); | ||
84 | return true; | ||
85 | } | ||
86 | |||
87 | if (MEM_ERROR(ec)) { | 81 | if (MEM_ERROR(ec)) { |
88 | u8 ll = ec & 0x3; | 82 | u8 ll = ec & 0x3; |
89 | ret = true; | 83 | ret = true; |
@@ -98,6 +92,18 @@ static bool f10h_dc_mce(u16 ec) | |||
98 | return ret; | 92 | return ret; |
99 | } | 93 | } |
100 | 94 | ||
95 | static bool f10h_dc_mce(u16 ec) | ||
96 | { | ||
97 | u8 r4 = (ec >> 4) & 0xf; | ||
98 | u8 ll = ec & 0x3; | ||
99 | |||
100 | if (r4 == R4_GEN && ll == LL_L1) { | ||
101 | pr_cont("during data scrub.\n"); | ||
102 | return true; | ||
103 | } | ||
104 | return f12h_dc_mce(ec); | ||
105 | } | ||
106 | |||
101 | static bool k8_dc_mce(u16 ec) | 107 | static bool k8_dc_mce(u16 ec) |
102 | { | 108 | { |
103 | if (BUS_ERROR(ec)) { | 109 | if (BUS_ERROR(ec)) { |
@@ -632,6 +638,10 @@ static int __init mce_amd_init(void) | |||
632 | fam_ops->nb_mce = f10h_nb_mce; | 638 | fam_ops->nb_mce = f10h_nb_mce; |
633 | break; | 639 | break; |
634 | 640 | ||
641 | case 0x12: | ||
642 | fam_ops->dc_mce = f12h_dc_mce; | ||
643 | break; | ||
644 | |||
635 | case 0x14: | 645 | case 0x14: |
636 | nb_err_cpumask = 0x3; | 646 | nb_err_cpumask = 0x3; |
637 | fam_ops->dc_mce = f14h_dc_mce; | 647 | fam_ops->dc_mce = f14h_dc_mce; |