|
@@ -33,7 +33,7 @@ static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar)
|
|
{
|
|
{
|
|
struct cell_edac_priv *priv = mci->pvt_info;
|
|
struct cell_edac_priv *priv = mci->pvt_info;
|
|
struct csrow_info *csrow = &mci->csrows[0];
|
|
struct csrow_info *csrow = &mci->csrows[0];
|
|
- unsigned long address, pfn, offset;
|
|
|
|
|
|
+ unsigned long address, pfn, offset, syndrome;
|
|
|
|
|
|
dev_dbg(mci->dev, "ECC CE err on node %d, channel %d, ar = 0x%016lx\n",
|
|
dev_dbg(mci->dev, "ECC CE err on node %d, channel %d, ar = 0x%016lx\n",
|
|
priv->node, chan, ar);
|
|
priv->node, chan, ar);
|
|
@@ -44,10 +44,11 @@ static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar)
|
|
address = (address << 1) | chan;
|
|
address = (address << 1) | chan;
|
|
pfn = address >> PAGE_SHIFT;
|
|
pfn = address >> PAGE_SHIFT;
|
|
offset = address & ~PAGE_MASK;
|
|
offset = address & ~PAGE_MASK;
|
|
|
|
+ syndrome = (ar & 0x000000001fe00000ul) >> 21;
|
|
|
|
|
|
/* TODO: Decoding of the error addresss */
|
|
/* TODO: Decoding of the error addresss */
|
|
edac_mc_handle_ce(mci, csrow->first_page + pfn, offset,
|
|
edac_mc_handle_ce(mci, csrow->first_page + pfn, offset,
|
|
- 0, 0, chan, "");
|
|
|
|
|
|
+ syndrome, 0, chan, "");
|
|
}
|
|
}
|
|
|
|
|
|
static void cell_edac_count_ue(struct mem_ctl_info *mci, int chan, u64 ar)
|
|
static void cell_edac_count_ue(struct mem_ctl_info *mci, int chan, u64 ar)
|