diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2010-09-22 09:37:58 -0400 |
---|---|---|
committer | Borislav Petkov <borislav.petkov@amd.com> | 2011-01-07 05:54:20 -0500 |
commit | b8f85c477bdf1fec98ea7cbe952fdb5f40eb0aa7 (patch) | |
tree | b657c1b6bed836c19516401782ffc15d706ac6a0 /drivers/edac | |
parent | 8259a7e5724c42c89d927b92cda3e0ab15b9ade9 (diff) |
EDAC, MCE: Add F15h FP MCE decoder
Add decoder for FP MCEs.
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/mce_amd.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c index afda6de5d7e3..c14abe3e4074 100644 --- a/drivers/edac/mce_amd.c +++ b/drivers/edac/mce_amd.c | |||
@@ -692,6 +692,46 @@ wrong_fr_mce: | |||
692 | pr_emerg(HW_ERR "Corrupted FR MCE info?\n"); | 692 | pr_emerg(HW_ERR "Corrupted FR MCE info?\n"); |
693 | } | 693 | } |
694 | 694 | ||
695 | static void amd_decode_fp_mce(struct mce *m) | ||
696 | { | ||
697 | u8 xec = (m->status >> 16) & xec_mask; | ||
698 | |||
699 | pr_emerg(HW_ERR "Floating Point Unit Error: "); | ||
700 | |||
701 | switch (xec) { | ||
702 | case 0x1: | ||
703 | pr_cont("Free List"); | ||
704 | break; | ||
705 | |||
706 | case 0x2: | ||
707 | pr_cont("Physical Register File"); | ||
708 | break; | ||
709 | |||
710 | case 0x3: | ||
711 | pr_cont("Retire Queue"); | ||
712 | break; | ||
713 | |||
714 | case 0x4: | ||
715 | pr_cont("Scheduler table"); | ||
716 | break; | ||
717 | |||
718 | case 0x5: | ||
719 | pr_cont("Status Register File"); | ||
720 | break; | ||
721 | |||
722 | default: | ||
723 | goto wrong_fp_mce; | ||
724 | break; | ||
725 | } | ||
726 | |||
727 | pr_cont(" parity error.\n"); | ||
728 | |||
729 | return; | ||
730 | |||
731 | wrong_fp_mce: | ||
732 | pr_emerg(HW_ERR "Corrupted FP MCE info?\n"); | ||
733 | } | ||
734 | |||
695 | static inline void amd_decode_err_code(u16 ec) | 735 | static inline void amd_decode_err_code(u16 ec) |
696 | { | 736 | { |
697 | if (TLB_ERROR(ec)) { | 737 | if (TLB_ERROR(ec)) { |
@@ -777,6 +817,10 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data) | |||
777 | amd_decode_fr_mce(m); | 817 | amd_decode_fr_mce(m); |
778 | break; | 818 | break; |
779 | 819 | ||
820 | case 6: | ||
821 | amd_decode_fp_mce(m); | ||
822 | break; | ||
823 | |||
780 | default: | 824 | default: |
781 | break; | 825 | break; |
782 | } | 826 | } |