summaryrefslogtreecommitdiff
path: root/drivers/edac
diff options
context:
space:
mode:
authorSherry Sun <sherry.sun@nxp.com>2020-02-17 17:21:24 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2021-11-02 16:54:11 +0800
commit9641b7b2e1e7eb1afbe652e56810ba87ad561771 (patch)
treed4655bfe5688a7b45c6df51a27e30e6f71aadd11 /drivers/edac
parent074a8037ace1781be4492b18ee2eea115e723b75 (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.c20
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;