Skip to content

Commit 1dc3517

Browse files
Mark Yaorkhuangtao
authored andcommitted
drm/rockchip: vop: add error irq handle
Change-Id: I84a3bc5c9798bbd4e0b11bc499f4df5ca1907cb7 Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
1 parent 9589a39 commit 1dc3517

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,7 @@ static void vop_power_enable(struct drm_crtc *crtc)
939939
static void vop_initial(struct drm_crtc *crtc)
940940
{
941941
struct vop *vop = to_vop(crtc);
942+
uint32_t irqs;
942943
int i;
943944

944945
vop_power_enable(crtc);
@@ -972,6 +973,12 @@ static void vop_initial(struct drm_crtc *crtc)
972973
VOP_WIN_SET(vop, win, gate, 1);
973974
}
974975
VOP_CTRL_SET(vop, afbdc_en, 0);
976+
977+
irqs = BUS_ERROR_INTR | WIN0_EMPTY_INTR | WIN1_EMPTY_INTR |
978+
WIN2_EMPTY_INTR | WIN3_EMPTY_INTR | HWC_EMPTY_INTR |
979+
POST_BUF_EMPTY_INTR;
980+
VOP_INTR_SET_TYPE(vop, clear, irqs, 1);
981+
VOP_INTR_SET_TYPE(vop, enable, irqs, 1);
975982
}
976983

977984
static void vop_crtc_disable(struct drm_crtc *crtc)
@@ -2609,6 +2616,23 @@ static irqreturn_t vop_isr(int irq, void *data)
26092616
ret = IRQ_HANDLED;
26102617
}
26112618

2619+
#define ERROR_HANDLER(x) \
2620+
do { \
2621+
if (active_irqs & x##_INTR) {\
2622+
DRM_DEV_ERROR_RATELIMITED(vop->dev, #x " irq err\n"); \
2623+
active_irqs &= ~x##_INTR; \
2624+
ret = IRQ_HANDLED; \
2625+
} \
2626+
} while (0)
2627+
2628+
ERROR_HANDLER(BUS_ERROR);
2629+
ERROR_HANDLER(WIN0_EMPTY);
2630+
ERROR_HANDLER(WIN1_EMPTY);
2631+
ERROR_HANDLER(WIN2_EMPTY);
2632+
ERROR_HANDLER(WIN3_EMPTY);
2633+
ERROR_HANDLER(HWC_EMPTY);
2634+
ERROR_HANDLER(POST_BUF_EMPTY);
2635+
26122636
/* Unhandled irqs are spurious. */
26132637
if (active_irqs)
26142638
DRM_ERROR("Unknown VOP IRQs: %#02x\n", active_irqs);

0 commit comments

Comments
 (0)