From: Keith Mannthey <kmannth@us.ibm.com>
To: lkml <linux-kernel@vger.kernel.org>
Cc: borislav.petkov@amd.com, dougthompson@xmission.com
Subject: [Patch] AMD64_EDAC: Fix amd64_map_to_dcs_mask
Date: Thu, 17 Sep 2009 19:09:41 -0700 [thread overview]
Message-ID: <1253239781.7263.113.camel@keith-laptop> (raw)
I tested 2.6.31 and the mainline amd64_edac driver. Once errors were
getting reported I noticed that a good amount of valid looking system
addressed were not being correctly decoded to the csrow level. I was
only able to correctly decode errors on channel 0 of a given csrow.
Errors on channel 1 were unable to be mapped.
After some digging I realized that the there was an issue with handling
of Dram Chip Select Masks. Specifically that amd64_map_to_dcs_mask was
returning incorrect values on my Rev F based system. See AMD #32559,
4.5.4, starting on pg 90 for a Rev F explanation of the correct mapping
of DRAM CS Base and DRAM CS Mask regs. This lead to the code below. I
can provide further explanation if needed.
I have tested this code on Rev F based system with ecc debug dimms and
fully expect it to work on earlier and later cpus. I am now able to
correctly decode and map errors to csrows rows on this system.
Submitted-by: Keith Mannthey<kmannth@us.ibm.com>
---
diff -urN linux-2.6.31/drivers/edac/amd64_edac.c linux-2.6.31-fixed/drivers/edac/amd64_edac.c
--- linux-2.6.31/drivers/edac/amd64_edac.c 2009-09-09 15:13:59.000000000 -0700
+++ linux-2.6.31-fixed/drivers/edac/amd64_edac.c 2009-09-17 22:32:09.000000000 -0700
@@ -1,6 +1,8 @@
-#include "amd64_edac.h"
+#include <linux/log2.h>
#include <asm/k8.h>
+#include "amd64_edac.h"
+
static struct edac_pci_ctl_info *amd64_ctl_pci;
static int report_gart_errors;
@@ -132,7 +134,7 @@
/* Map from a CSROW entry to the mask entry that operates on it */
static inline u32 amd64_map_to_dcs_mask(struct amd64_pvt *pvt, int csrow)
{
- return csrow >> (pvt->num_dcsm >> 3);
+ return csrow >> (8 >> (ilog2(pvt->num_dcsm)+1));
}
/* return the 'base' address the i'th CS entry of the 'dct' DRAM controller */
diff -urN linux-2.6.31/drivers/edac/amd64_edac.h linux-2.6.31-fixed/drivers/edac/amd64_edac.h
--- linux-2.6.31/drivers/edac/amd64_edac.h 2009-09-17 22:22:18.000000000 -0700
+++ linux-2.6.31-fixed/drivers/edac/amd64_edac.h 2009-09-17 22:48:50.000000000 -0700
@@ -526,7 +526,7 @@
/*
* The following fields are set at (load) run time, after CPU revision
* has been determined, since the dct_base and dct_mask registers vary
- * based on revision
+ * based on revision. num_dcsm is assumed to be a power of 2.
*/
u32 dcsb_base; /* DCSB base bits */
u32 dcsm_mask; /* DCSM mask bits */
next reply other threads:[~2009-09-18 2:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-18 2:09 Keith Mannthey [this message]
2009-09-18 14:42 ` [Patch] AMD64_EDAC: Fix amd64_map_to_dcs_mask Borislav Petkov
2009-09-18 17:28 ` Keith Mannthey
2009-09-19 14:08 ` Borislav Petkov
2009-09-21 14:55 ` Borislav Petkov
2009-09-21 23:50 ` Keith Mannthey
2009-09-22 7:14 ` Borislav Petkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1253239781.7263.113.camel@keith-laptop \
--to=kmannth@us.ibm.com \
--cc=borislav.petkov@amd.com \
--cc=dougthompson@xmission.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox