提交 14944113 编写于 作者: J Jyri Sarha

drm/tilcdc: Write to LCDC_END_OF_INT_IND_REG at the end of IRQ function

Reorder the IRQ function so that the write to LCDC_END_OF_INT_IND_REG
is done last. The write to LCDC_END_OF_INT_IND_REG indicates to LCDC
that the interrupt service routine has completed (see section
13.3.6.1.6 in AM335x TRM). This is needed if LCDC's ipgvmodirq module
is configured for pulse interrupts.
Signed-off-by: NJyri Sarha <jsarha@ti.com>
上级 1abcdac8
...@@ -725,12 +725,16 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) ...@@ -725,12 +725,16 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
tilcdc_crtc->frame_intact = true; tilcdc_crtc->frame_intact = true;
} }
if (stat & LCDC_FIFO_UNDERFLOW)
dev_err_ratelimited(dev->dev, "%s(0x%08x): FIFO underfow",
__func__, stat);
/* For revision 2 only */
if (priv->rev == 2) { if (priv->rev == 2) {
if (stat & LCDC_FRAME_DONE) { if (stat & LCDC_FRAME_DONE) {
tilcdc_crtc->frame_done = true; tilcdc_crtc->frame_done = true;
wake_up(&tilcdc_crtc->frame_done_wq); wake_up(&tilcdc_crtc->frame_done_wq);
} }
tilcdc_write(dev, LCDC_END_OF_INT_IND_REG, 0);
if (stat & LCDC_SYNC_LOST) { if (stat & LCDC_SYNC_LOST) {
dev_err_ratelimited(dev->dev, "%s(0x%08x): Sync lost", dev_err_ratelimited(dev->dev, "%s(0x%08x): Sync lost",
...@@ -743,11 +747,12 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc) ...@@ -743,11 +747,12 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
LCDC_SYNC_LOST); LCDC_SYNC_LOST);
} }
} }
}
if (stat & LCDC_FIFO_UNDERFLOW) /* Indicate to LCDC that the interrupt service routine has
dev_err_ratelimited(dev->dev, "%s(0x%08x): FIFO underfow", * completed, see 13.3.6.1.6 in AM335x TRM.
__func__, stat); */
tilcdc_write(dev, LCDC_END_OF_INT_IND_REG, 0);
}
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册