aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2009-10-16 07:48:28 -0400
committerBorislav Petkov <borislav.petkov@amd.com>2009-12-07 13:14:28 -0500
commit8566c4df1690f3862ae338a4c533f4bb5a863f9a (patch)
treed9d5f1ec9de8a9f6ba60babc82f22bf71b27c9a3 /drivers/edac
parent8de1d91e628c19c1154ca15b1ea1fcc0a098b793 (diff)
amd64_edac: dump DIMM sizes on K8 too
Extend f10_debug_display_dimm_sizes to dump the logical DIMMs configuration on K8 revF too. Remove the ganged arg since we print the DCT operating mode (ganged vs unganged) earlier. Also, DCT csrow configuration is relevant therefore dump it as KERN_DEBUG instead of only on debug builds. Remove misleading DIMM output since there's no reliable way of mapping of chip selects to actual physical DIMMs. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/amd64_edac.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index c65ad2d57e06..c6d1aed2943f 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -822,8 +822,7 @@ static enum edac_type amd64_determine_edac_cap(struct amd64_pvt *pvt)
822} 822}
823 823
824 824
825static void f10_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt, 825static void amd64_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt);
826 int ganged);
827 826
828static void amd64_dump_dramcfg_low(u32 dclr, int chan) 827static void amd64_dump_dramcfg_low(u32 dclr, int chan)
829{ 828{
@@ -875,8 +874,10 @@ static void amd64_dump_misc_regs(struct amd64_pvt *pvt)
875 (pvt->dhar & DHAR_VALID) ? "yes" : "no"); 874 (pvt->dhar & DHAR_VALID) ? "yes" : "no");
876 875
877 /* everything below this point is Fam10h and above */ 876 /* everything below this point is Fam10h and above */
878 if (boot_cpu_data.x86 == 0xf) 877 if (boot_cpu_data.x86 == 0xf) {
878 amd64_debug_display_dimm_sizes(0, pvt);
879 return; 879 return;
880 }
880 881
881 /* Only if NOT ganged does dclr1 have valid info */ 882 /* Only if NOT ganged does dclr1 have valid info */
882 if (!dct_ganging_enabled(pvt)) 883 if (!dct_ganging_enabled(pvt))
@@ -888,10 +889,10 @@ static void amd64_dump_misc_regs(struct amd64_pvt *pvt)
888 */ 889 */
889 ganged = dct_ganging_enabled(pvt); 890 ganged = dct_ganging_enabled(pvt);
890 891
891 f10_debug_display_dimm_sizes(0, pvt, ganged); 892 amd64_debug_display_dimm_sizes(0, pvt);
892 893
893 if (!ganged) 894 if (!ganged)
894 f10_debug_display_dimm_sizes(1, pvt, ganged); 895 amd64_debug_display_dimm_sizes(1, pvt);
895} 896}
896 897
897/* Read in both of DBAM registers */ 898/* Read in both of DBAM registers */
@@ -1726,23 +1727,31 @@ static int map_dbam_to_csrow_size(int index)
1726} 1727}
1727 1728
1728/* 1729/*
1729 * debug routine to display the memory sizes of a DIMM (ganged or not) and it 1730 * debug routine to display the memory sizes of all logical DIMMs and its
1730 * CSROWs as well 1731 * CSROWs as well
1731 */ 1732 */
1732static void f10_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt, 1733static void amd64_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt)
1733 int ganged)
1734{ 1734{
1735 int dimm, size0, size1; 1735 int dimm, size0, size1;
1736 u32 dbam; 1736 u32 dbam;
1737 u32 *dcsb; 1737 u32 *dcsb;
1738 1738
1739 debugf1(" dbam%d: 0x%8.08x CSROW is %s\n", ctrl, 1739 if (boot_cpu_data.x86 == 0xf) {
1740 ctrl ? pvt->dbam1 : pvt->dbam0, 1740 /* K8 families < revF not supported yet */
1741 ganged ? "GANGED - dbam1 not used" : "NON-GANGED"); 1741 if (pvt->ext_model < OPTERON_CPU_REV_F)
1742 return;
1743 else
1744 WARN_ON(ctrl != 0);
1745 }
1746
1747 debugf1("F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n",
1748 ctrl, ctrl ? pvt->dbam1 : pvt->dbam0);
1742 1749
1743 dbam = ctrl ? pvt->dbam1 : pvt->dbam0; 1750 dbam = ctrl ? pvt->dbam1 : pvt->dbam0;
1744 dcsb = ctrl ? pvt->dcsb1 : pvt->dcsb0; 1751 dcsb = ctrl ? pvt->dcsb1 : pvt->dcsb0;
1745 1752
1753 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl);
1754
1746 /* Dump memory sizes for DIMM and its CSROWs */ 1755 /* Dump memory sizes for DIMM and its CSROWs */
1747 for (dimm = 0; dimm < 4; dimm++) { 1756 for (dimm = 0; dimm < 4; dimm++) {
1748 1757
@@ -1754,15 +1763,8 @@ static void f10_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt,
1754 if (dcsb[dimm*2 + 1] & K8_DCSB_CS_ENABLE) 1763 if (dcsb[dimm*2 + 1] & K8_DCSB_CS_ENABLE)
1755 size1 = map_dbam_to_csrow_size(DBAM_DIMM(dimm, dbam)); 1764 size1 = map_dbam_to_csrow_size(DBAM_DIMM(dimm, dbam));
1756 1765
1757 debugf1(" CTRL-%d DIMM-%d=%5dMB CSROW-%d=%5dMB " 1766 edac_printk(KERN_DEBUG, EDAC_MC, " %d: %5dMB %d: %5dMB\n",
1758 "CSROW-%d=%5dMB\n", 1767 dimm * 2, size0, dimm * 2 + 1, size1);
1759 ctrl,
1760 dimm,
1761 size0 + size1,
1762 dimm * 2,
1763 size0,
1764 dimm * 2 + 1,
1765 size1);
1766 } 1768 }
1767} 1769}
1768 1770