From 3183f8c36e8ede408903a29e2753db280b980258 Mon Sep 17 00:00:00 2001 From: Andy Yan Date: Wed, 27 Apr 2022 20:15:42 +0800 Subject: [PATCH] drm/rockchip: vop2: Only check pending done bits for rk3568 This is a workaround for rk3566/rk3568 only. Signed-off-by: Andy Yan Change-Id: I6762ab146e810535643f9f59b99af2271febbab4 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index e17e8fa11831..3006d7b7558b 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -1414,17 +1414,20 @@ static inline void rk3588_vop2_cfg_done(struct drm_crtc *crtc) static inline void vop2_wb_cfg_done(struct vop2_video_port *vp) { struct vop2 *vop2 = vp->vop2; - uint32_t val = RK3568_VOP2_WB_CFG_DONE | (RK3568_VOP2_WB_CFG_DONE << 16); + uint32_t val = RK3568_VOP2_WB_CFG_DONE | (RK3568_VOP2_WB_CFG_DONE << 16) | + RK3568_VOP2_GLB_CFG_DONE_EN; uint32_t done_bits; unsigned long flags; - spin_lock_irqsave(&vop2->irq_lock, flags); - done_bits = vop2_pending_done_bits(vp); - - val |= RK3568_VOP2_GLB_CFG_DONE_EN | done_bits; - - vop2_writel(vop2, 0, val); - spin_unlock_irqrestore(&vop2->irq_lock, flags); + if (vop2->version == VOP_VERSION_RK3568) { + spin_lock_irqsave(&vop2->irq_lock, flags); + done_bits = vop2_pending_done_bits(vp); + val |= done_bits; + vop2_writel(vop2, 0, val); + spin_unlock_irqrestore(&vop2->irq_lock, flags); + } else { + vop2_writel(vop2, 0, val); + } }