diff options
author | Xinliang Liu <xinliang.liu@linaro.org> | 2015-12-23 16:51:46 +0800 |
---|---|---|
committer | John Stultz <john.stultz@linaro.org> | 2016-02-02 19:32:28 -0800 |
commit | fdf903e81ea0564f7843c7249f7a7243693fe06d (patch) | |
tree | e6f25f9d9968611a5c560b97d238c74f1e27a8f7 | |
parent | cd1de16487296f65121e0aee7b528301af4db453 (diff) | |
download | hikey-linaro-fdf903e81ea0564f7843c7249f7a7243693fe06d.tar.gz |
drm/hisilicon: Clear underflow irq
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
-rw-r--r-- | drivers/gpu/drm/hisilicon/hisi_drm_ade.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_ade.c b/drivers/gpu/drm/hisilicon/hisi_drm_ade.c index 40fa83741e69..53401e43ddfc 100644 --- a/drivers/gpu/drm/hisilicon/hisi_drm_ade.c +++ b/drivers/gpu/drm/hisilicon/hisi_drm_ade.c @@ -647,6 +647,7 @@ static irqreturn_t ldi_irq_handler(int irq, void *data) //struct drm_device *dev = crtc->dev; void __iomem *base = acrtc->ade_base; u32 status; + u32 irq_mask; status = readl(base + LDI_MSK_INT_REG); /* DRM_INFO("LDI IRQ: status=0x%X\n",status); */ @@ -661,6 +662,17 @@ static irqreturn_t ldi_irq_handler(int irq, void *data) if (status & LDI_ISR_UNDER_FLOW_INT) { writel(LDI_ISR_UNDER_FLOW_INT, base + LDI_INT_CLR_REG); DRM_INFO("underflow irq\n"); + + /* clear underflow irq */ + irq_mask = readl(base + LDI_INT_EN_REG); + irq_mask = irq_mask & (~LDI_ISR_UNDER_FLOW_INT); + writel(irq_mask, base + LDI_INT_EN_REG); + + /* reset the whole ade */ + writel(0, base + ADE_SOFT_RST_SEL0_REG); + writel(0, base + ADE_SOFT_RST_SEL1_REG); + writel(0xffffffff, base + ADE_SOFT_RST0_REG); + writel(0xffffffff, base + ADE_SOFT_RST1_REG); } return IRQ_HANDLED; |