EDAC, mpc85xx: Extend error address to 64 bit
authorYork Sun <yorksun@freescale.com>
Tue, 12 May 2015 10:03:42 +0000 (18:03 +0800)
committerBorislav Petkov <bp@suse.de>
Sun, 31 May 2015 10:51:08 +0000 (12:51 +0200)
Extend err_addr to cover 64 bits for DDR errors.

Signed-off-by: York Sun <yorksun@freescale.com>
Acked-by: Johannes Thumshirn <morbidrsa@gmail.com>
Cc: Mingkai.hu@freescale.com
Link: http://lkml.kernel.org/r/1431425022-44766-2-git-send-email-Wenbin.Song@freescale.com
Signed-off-by: songwenbin <wenbin.song@freescale.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
drivers/edac/mpc85xx_edac.c
drivers/edac/mpc85xx_edac.h

index 68bf234bdfe66c84d3d88d0fb339bb9fcbd451df..23ef8e9f2c9a851f52e43b57bce305bb4cffbf5c 100644 (file)
@@ -811,6 +811,8 @@ static void sbe_ecc_decode(u32 cap_high, u32 cap_low, u32 cap_ecc,
        }
 }
 
+#define make64(high, low) (((u64)(high) << 32) | (low))
+
 static void mpc85xx_mc_check(struct mem_ctl_info *mci)
 {
        struct mpc85xx_mc_pdata *pdata = mci->pvt_info;
@@ -818,7 +820,7 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci)
        u32 bus_width;
        u32 err_detect;
        u32 syndrome;
-       u32 err_addr;
+       u64 err_addr;
        u32 pfn;
        int row_index;
        u32 cap_high;
@@ -849,7 +851,9 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci)
        else
                syndrome &= 0xffff;
 
-       err_addr = in_be32(pdata->mc_vbase + MPC85XX_MC_CAPTURE_ADDRESS);
+       err_addr = make64(
+               in_be32(pdata->mc_vbase + MPC85XX_MC_CAPTURE_EXT_ADDRESS),
+               in_be32(pdata->mc_vbase + MPC85XX_MC_CAPTURE_ADDRESS));
        pfn = err_addr >> PAGE_SHIFT;
 
        for (row_index = 0; row_index < mci->nr_csrows; row_index++) {
@@ -886,7 +890,7 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci)
        mpc85xx_mc_printk(mci, KERN_ERR,
                        "Captured Data / ECC:\t%#8.8x_%08x / %#2.2x\n",
                        cap_high, cap_low, syndrome);
-       mpc85xx_mc_printk(mci, KERN_ERR, "Err addr: %#8.8x\n", err_addr);
+       mpc85xx_mc_printk(mci, KERN_ERR, "Err addr: %#8.8llx\n", err_addr);
        mpc85xx_mc_printk(mci, KERN_ERR, "PFN: %#8.8x\n", pfn);
 
        /* we are out of range */
index 4498baf9ce05ebdf7ecc3d6d11d6b9132ea10157..9352e88d53e5a9cc03fed0c799d489955f1f0f50 100644 (file)
@@ -43,6 +43,7 @@
 #define MPC85XX_MC_ERR_INT_EN          0x0e48
 #define MPC85XX_MC_CAPTURE_ATRIBUTES   0x0e4c
 #define MPC85XX_MC_CAPTURE_ADDRESS     0x0e50
+#define MPC85XX_MC_CAPTURE_EXT_ADDRESS 0x0e54
 #define MPC85XX_MC_ERR_SBE             0x0e58
 
 #define DSC_MEM_EN     0x80000000