i7300_edac: Adds detection for enhanced scrub mode on x8
authorMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 27 Aug 2010 11:56:48 +0000 (08:56 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Aug 2010 17:56:50 +0000 (14:56 -0300)
While here, do some cleanup by adding some macros to check
for device features.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/edac/i7300_edac.c

index f2f171d0356a6f54d3faf64af25af56f520992a9..27088af796728eb7c6120a8f36228ea8e84b8666 100644 (file)
        /* OFFSETS for Function 1 */
 #define MC_SETTINGS            0x40
 
+#define IS_MIRRORED(mc)                        ((mc) & (1 << 16))
+#define IS_ECC_ENABLED(mc)             ((mc) & (1 << 5))
+#define IS_RETRY_ENABLED(mc)           ((mc) & (1 << 31))
+#define IS_SCRBALGO_ENHANCED(mc)       ((mc) & (1 << 8))
+
+
 #define TOLM                   0x6C
 #define REDMEMB                        0x7C
 
@@ -451,9 +457,13 @@ static int decode_mtr(struct i7300_pvt *pvt,
        p_csrow->edac_mode = EDAC_S8ECD8ED;
 
        /* ask what device type on this row */
-       if (MTR_DRAM_WIDTH(mtr))
+       if (MTR_DRAM_WIDTH(mtr)) {
+               debugf0("Scrub algorithm for x8 is on %s mode\n",
+                       IS_SCRBALGO_ENHANCED(pvt->mc_settings) ?
+                                           "enhanced" : "normal");
+
                p_csrow->dtype = DEV_X8;
-       else
+       else
                p_csrow->dtype = DEV_X4;
 
        return mtr;
@@ -643,10 +653,13 @@ static int i7300_get_mc_regs(struct mem_ctl_info *mci)
        /* Get memory controller settings */
        pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, MC_SETTINGS,
                             &pvt->mc_settings);
+
        debugf0("Memory controller operating on %s mode\n",
-               pvt->mc_settings & (1 << 16)? "mirrored" : "non-mirrored");
+               IS_MIRRORED(pvt->mc_settings) ? "mirrored" : "non-mirrored");
        debugf0("Error detection is %s\n",
-               pvt->mc_settings & (1 << 5)? "enabled" : "disabled");
+               IS_ECC_ENABLED(pvt->mc_settings) ? "enabled" : "disabled");
+       debugf0("Retry is %s\n",
+               IS_RETRY_ENABLED(pvt->mc_settings) ? "enabled" : "disabled");
 
        /* Get Memory Interleave Range registers */
        pci_read_config_word(pvt->pci_dev_16_1_fsb_addr_map, MIR0, &pvt->mir[0]);