diff options
| -rw-r--r-- | drivers/edac/altera_edac.c | 30 | ||||
| -rw-r--r-- | drivers/edac/altera_edac.h | 2 |
2 files changed, 14 insertions, 18 deletions
diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 5ff263850cc7..acb3006df631 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c | |||
| @@ -1762,28 +1762,24 @@ static ssize_t altr_edac_a10_device_trig2(struct file *file, | |||
| 1762 | if (trig_type == ALTR_UE_TRIGGER_CHAR) { | 1762 | if (trig_type == ALTR_UE_TRIGGER_CHAR) { |
| 1763 | writel(priv->ue_set_mask, set_addr); | 1763 | writel(priv->ue_set_mask, set_addr); |
| 1764 | } else { | 1764 | } else { |
| 1765 | /* Setup write of 0 to first 4 bytes */ | 1765 | /* Setup read/write of 4 bytes */ |
| 1766 | writel(0x0, drvdata->base + ECC_BLK_WDATA0_OFST); | ||
| 1767 | writel(0x0, drvdata->base + ECC_BLK_WDATA1_OFST); | ||
| 1768 | writel(0x0, drvdata->base + ECC_BLK_WDATA2_OFST); | ||
| 1769 | writel(0x0, drvdata->base + ECC_BLK_WDATA3_OFST); | ||
| 1770 | /* Setup write of 4 bytes */ | ||
| 1771 | writel(ECC_WORD_WRITE, drvdata->base + ECC_BLK_DBYTECTRL_OFST); | 1766 | writel(ECC_WORD_WRITE, drvdata->base + ECC_BLK_DBYTECTRL_OFST); |
| 1772 | /* Setup Address to 0 */ | 1767 | /* Setup Address to 0 */ |
| 1773 | writel(0x0, drvdata->base + ECC_BLK_ADDRESS_OFST); | 1768 | writel(0, drvdata->base + ECC_BLK_ADDRESS_OFST); |
| 1774 | /* Setup accctrl to write & data override */ | 1769 | /* Setup accctrl to read & ecc & data override */ |
| 1775 | writel(ECC_WRITE_DOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST); | 1770 | writel(ECC_READ_EDOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST); |
| 1776 | /* Kick it. */ | ||
| 1777 | writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST); | ||
| 1778 | /* Setup accctrl to read & ecc override */ | ||
| 1779 | writel(ECC_READ_EOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST); | ||
| 1780 | /* Kick it. */ | 1771 | /* Kick it. */ |
| 1781 | writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST); | 1772 | writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST); |
| 1782 | /* Setup write for single bit change */ | 1773 | /* Setup write for single bit change */ |
| 1783 | writel(0x1, drvdata->base + ECC_BLK_WDATA0_OFST); | 1774 | writel(readl(drvdata->base + ECC_BLK_RDATA0_OFST) ^ 0x1, |
| 1784 | writel(0x0, drvdata->base + ECC_BLK_WDATA1_OFST); | 1775 | drvdata->base + ECC_BLK_WDATA0_OFST); |
| 1785 | writel(0x0, drvdata->base + ECC_BLK_WDATA2_OFST); | 1776 | writel(readl(drvdata->base + ECC_BLK_RDATA1_OFST), |
| 1786 | writel(0x0, drvdata->base + ECC_BLK_WDATA3_OFST); | 1777 | drvdata->base + ECC_BLK_WDATA1_OFST); |
| 1778 | writel(readl(drvdata->base + ECC_BLK_RDATA2_OFST), | ||
| 1779 | drvdata->base + ECC_BLK_WDATA2_OFST); | ||
| 1780 | writel(readl(drvdata->base + ECC_BLK_RDATA3_OFST), | ||
| 1781 | drvdata->base + ECC_BLK_WDATA3_OFST); | ||
| 1782 | |||
| 1787 | /* Copy Read ECC to Write ECC */ | 1783 | /* Copy Read ECC to Write ECC */ |
| 1788 | writel(readl(drvdata->base + ECC_BLK_RECC0_OFST), | 1784 | writel(readl(drvdata->base + ECC_BLK_RECC0_OFST), |
| 1789 | drvdata->base + ECC_BLK_WECC0_OFST); | 1785 | drvdata->base + ECC_BLK_WECC0_OFST); |
diff --git a/drivers/edac/altera_edac.h b/drivers/edac/altera_edac.h index 60513f201ffb..1532ec9c3510 100644 --- a/drivers/edac/altera_edac.h +++ b/drivers/edac/altera_edac.h | |||
| @@ -321,7 +321,7 @@ struct altr_sdram_mc_data { | |||
| 321 | #define ECC_BLK_STARTACC_OFST 0x7C | 321 | #define ECC_BLK_STARTACC_OFST 0x7C |
| 322 | 322 | ||
| 323 | #define ECC_XACT_KICK 0x10000 | 323 | #define ECC_XACT_KICK 0x10000 |
| 324 | #define ECC_WORD_WRITE 0xF | 324 | #define ECC_WORD_WRITE 0xFF |
| 325 | #define ECC_WRITE_DOVR 0x101 | 325 | #define ECC_WRITE_DOVR 0x101 |
| 326 | #define ECC_WRITE_EDOVR 0x103 | 326 | #define ECC_WRITE_EDOVR 0x103 |
| 327 | #define ECC_READ_EOVR 0x2 | 327 | #define ECC_READ_EOVR 0x2 |
