diff options
author | Sherry Sun <sherry.sun@nxp.com> | 2020-02-17 17:21:24 +0800 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2021-11-02 16:54:11 +0800 |
commit | 9641b7b2e1e7eb1afbe652e56810ba87ad561771 (patch) | |
tree | d4655bfe5688a7b45c6df51a27e30e6f71aadd11 /drivers/edac | |
parent | 074a8037ace1781be4492b18ee2eea115e723b75 (diff) |
MLK-23333-3 EDAC: synopsys: enable interrupt again for imx8mpevk
Since zynqmp_get_error_info() is called during imx8mpevk CE/UE
interrupt, at the end of zynqmp_get_error_info(), it disables the
interrupt of imx8mpevk, then the interrupt handler will be called only
once, so here enable interrupt again.
Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/synopsys_edac.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/edac/synopsys_edac.c b/drivers/edac/synopsys_edac.c index 66081a9a2c24..08a46bd34423 100644 --- a/drivers/edac/synopsys_edac.c +++ b/drivers/edac/synopsys_edac.c @@ -597,6 +597,15 @@ static void handle_error(struct mem_ctl_info *mci, struct synps_ecc_status *p) memset(p, 0, sizeof(*p)); } +static void enable_intr_imx8mp(struct synps_edac_priv *priv) +{ + int regval; + + regval = readl(priv->baseaddr + ECC_CLR_OFST); + regval |= (DDR_CE_INTR_EN_MASK | DDR_UE_INTR_EN_MASK); + writel(regval, priv->baseaddr + ECC_CLR_OFST); +} + /* Interrupt Handler for ECC interrupts on imx8mp platform. */ static irqreturn_t intr_handler_imx8mp(int irq, void *dev_id) { @@ -622,6 +631,8 @@ static irqreturn_t intr_handler_imx8mp(int irq, void *dev_id) edac_dbg(3, "Total error count CE %d UE %d\n", priv->ce_cnt, priv->ue_cnt); + enable_intr_imx8mp(priv); + return IRQ_HANDLED; } @@ -879,15 +890,6 @@ static void mc_init(struct mem_ctl_info *mci, struct platform_device *pdev) init_csrows(mci); } -static void enable_intr_imx8mp(struct synps_edac_priv *priv) -{ - int regval; - - regval = readl(priv->baseaddr + ECC_CLR_OFST); - regval |= (DDR_CE_INTR_EN_MASK | DDR_UE_INTR_EN_MASK); - writel(regval, priv->baseaddr + ECC_CLR_OFST); -} - static void disable_intr_imx8mp(struct synps_edac_priv *priv) { int regval; |