aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2009-07-28 08:20:46 -0400
committerBorislav Petkov <borislav.petkov@amd.com>2009-09-14 13:01:37 -0400
commit53bd5fedca7d0c28b35b02cab5f4e27bf8d7fabe (patch)
tree10798765e935f772afe8b75494fb75bd9e46e82a /drivers/edac
parentf9350efd6f37ef60d2334739edb76ef1f8ee0183 (diff)
EDAC, AMD: decode FR MCEs
See Fam10h BKDG (31116, rev. 3.28), Table 101. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/edac_mce_amd.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/edac/edac_mce_amd.c b/drivers/edac/edac_mce_amd.c
index 228482855362..c8ca7136dacc 100644
--- a/drivers/edac/edac_mce_amd.c
+++ b/drivers/edac/edac_mce_amd.c
@@ -321,6 +321,15 @@ void amd_decode_nb_mce(int node_id, struct err_regs *regs, int handle_errors)
321} 321}
322EXPORT_SYMBOL_GPL(amd_decode_nb_mce); 322EXPORT_SYMBOL_GPL(amd_decode_nb_mce);
323 323
324static void amd_decode_fr_mce(u64 mc5_status)
325{
326 /* we have only one error signature so match all fields at once. */
327 if ((mc5_status & 0xffff) == 0x0f0f)
328 pr_emerg(" FR Error: CPU Watchdog timer expire.\n");
329 else
330 pr_warning("Corrupted FR MCE info?\n");
331}
332
324static inline void amd_decode_err_code(unsigned int ec) 333static inline void amd_decode_err_code(unsigned int ec)
325{ 334{
326 if (TLB_ERROR(ec)) { 335 if (TLB_ERROR(ec)) {
@@ -401,6 +410,10 @@ void decode_mce(struct mce *m)
401 amd_decode_nb_mce(node, &regs, 1); 410 amd_decode_nb_mce(node, &regs, 1);
402 break; 411 break;
403 412
413 case 5:
414 amd_decode_fr_mce(m->status);
415 break;
416
404 default: 417 default:
405 break; 418 break;
406 } 419 }