diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2009-12-21 08:52:53 -0500 |
---|---|---|
committer | Borislav Petkov <borislav.petkov@amd.com> | 2009-12-24 05:07:07 -0500 |
commit | 603adaf6b3e37450235f0ddb5986b961b3146a79 (patch) | |
tree | ae6d7972c9393bdee919b8ef5ea70867eb2c0dca | |
parent | 2f99f5c8f05e02f3df1bb4d93b6704e6f5972872 (diff) |
amd64_edac: fix K8 chip select reporting
Fix the case when amd64_debug_display_dimm_sizes() reports only half the
amount of DRAM on it because it doesn't account for when the single DCT
operates in 128-bit mode and merges chip selects from different DIMMs.
Reported-by: Johannes Hirte <johannes.hirte@fem.tu-ilmenau.de>
LKML-Reference: <200912112202.48173.johannes.hirte@fem.tu-ilmenau.de>
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
-rw-r--r-- | drivers/edac/amd64_edac.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index df5b68433f34..784cc5a1ebc3 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c | |||
@@ -1700,11 +1700,14 @@ static void f10_map_sysaddr_to_csrow(struct mem_ctl_info *mci, | |||
1700 | */ | 1700 | */ |
1701 | static void amd64_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt) | 1701 | static void amd64_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt) |
1702 | { | 1702 | { |
1703 | int dimm, size0, size1; | 1703 | int dimm, size0, size1, factor = 0; |
1704 | u32 dbam; | 1704 | u32 dbam; |
1705 | u32 *dcsb; | 1705 | u32 *dcsb; |
1706 | 1706 | ||
1707 | if (boot_cpu_data.x86 == 0xf) { | 1707 | if (boot_cpu_data.x86 == 0xf) { |
1708 | if (pvt->dclr0 & F10_WIDTH_128) | ||
1709 | factor = 1; | ||
1710 | |||
1708 | /* K8 families < revF not supported yet */ | 1711 | /* K8 families < revF not supported yet */ |
1709 | if (pvt->ext_model < K8_REV_F) | 1712 | if (pvt->ext_model < K8_REV_F) |
1710 | return; | 1713 | return; |
@@ -1732,7 +1735,8 @@ static void amd64_debug_display_dimm_sizes(int ctrl, struct amd64_pvt *pvt) | |||
1732 | size1 = pvt->ops->dbam_to_cs(pvt, DBAM_DIMM(dimm, dbam)); | 1735 | size1 = pvt->ops->dbam_to_cs(pvt, DBAM_DIMM(dimm, dbam)); |
1733 | 1736 | ||
1734 | edac_printk(KERN_DEBUG, EDAC_MC, " %d: %5dMB %d: %5dMB\n", | 1737 | edac_printk(KERN_DEBUG, EDAC_MC, " %d: %5dMB %d: %5dMB\n", |
1735 | dimm * 2, size0, dimm * 2 + 1, size1); | 1738 | dimm * 2, size0 << factor, |
1739 | dimm * 2 + 1, size1 << factor); | ||
1736 | } | 1740 | } |
1737 | } | 1741 | } |
1738 | 1742 | ||