drm/rockchip: vop: add support for mcu soft_te mode

Change-Id: I0393645cf1a950b1c9a6b928bf698f9678a95898
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
This commit is contained in:
Damon Ding
2023-11-17 16:36:23 +08:00
committed by Tao Huang
parent a92ffdc4ba
commit a6ee9f3647

View File

@@ -3222,6 +3222,19 @@ out:
return ret;
}
static void vop_crtc_te_handler(struct drm_crtc *crtc)
{
struct vop *vop;
if (!crtc)
return;
vop = to_vop(crtc);
if (vop->mcu_timing.mcu_pix_total)
VOP_CTRL_SET(vop, mcu_frame_st, 1);
}
static const struct rockchip_crtc_funcs private_crtc_funcs = {
.loader_protect = vop_crtc_loader_protect,
.cancel_pending_vblank = vop_crtc_cancel_pending_vblank,
@@ -3233,6 +3246,7 @@ static const struct rockchip_crtc_funcs private_crtc_funcs = {
.crtc_close = vop_crtc_close,
.crtc_send_mcu_cmd = vop_crtc_send_mcu_cmd,
.wait_vact_end = vop_crtc_wait_vact_end,
.te_handler = vop_crtc_te_handler,
};
static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
@@ -4273,7 +4287,7 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc,
} else {
VOP_CTRL_SET(vop, reg_done_frm, 0);
}
if (vop->mcu_timing.mcu_pix_total)
if (vop->mcu_timing.mcu_pix_total && !s->soft_te)
VOP_CTRL_SET(vop, mcu_hold_mode, 0);
spin_unlock_irqrestore(&vop->irq_lock, flags);