diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 55c9ae5f35ae..8c2b38419242 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -852,6 +852,7 @@ struct vop2_wb_data { const uint32_t *formats; struct vop_rect max_output; const struct vop2_wb_regs *regs; + uint32_t fifo_depth; }; struct vop2_video_port_data { diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 6b2f2bbbbf0a..416b3f31213b 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -2730,6 +2730,8 @@ static void vop2_wb_commit(struct drm_crtc *crtc) spin_unlock_irqrestore(&wb->job_lock, flags); fifo_throd = fb->pitches[0] >> 4; + if (fifo_throd >= vop2->data->wb->fifo_depth) + fifo_throd = vop2->data->wb->fifo_depth; r2y = is_yuv_support(fb->format->format) && (!is_yuv_output(vcstate->bus_format)); /* diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c index 8c4df2e6c23d..93ee6a668d49 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c @@ -650,6 +650,7 @@ static const struct vop2_wb_data rk3568_vop_wb_data = { .formats = formats_wb, .nformats = ARRAY_SIZE(formats_wb), .max_output = { 1920, 1080 }, + .fifo_depth = 1920 * 4 / 16, .regs = &rk3568_vop_wb_regs, };