From e2852b6423f1f96ae42542861d4af51059f1f655 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Tue, 30 May 2023 11:07:59 +0800 Subject: [PATCH] drm/rockchip: vop2: Fix plane parameter check error at interlace mode At interlace mode, the adjusted_mode->crtc_vdisplay will be div2 from vdisplay, but the userspace is still set as adjusted_mode->vdisplay. Fixes: bfc49df5158d ("drm/rockchip: vop3: plane display size check use crtc_* parameter is more correct") Signed-off-by: Sandy Huang Change-Id: I6765e5486dc4d15b0b34b75370280d48500ef4da --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index bf312b8d87e0..5ca4fcade790 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -4961,7 +4961,7 @@ static void vop2_win_atomic_update(struct vop2_win *win, struct drm_rect *src, s uint32_t actual_w, actual_h, dsp_w, dsp_h; uint32_t dsp_stx, dsp_sty; uint32_t act_info, dsp_info, dsp_st; - uint32_t format; + uint32_t format, check_size; uint32_t afbc_format; uint32_t rb_swap; uint32_t uv_swap; @@ -5014,7 +5014,8 @@ static void vop2_win_atomic_update(struct vop2_win *win, struct drm_rect *src, s actual_w = dsp_w * actual_w / drm_rect_width(dst); } dsp_h = drm_rect_height(dst); - if (dst->y1 + dsp_h > adjusted_mode->crtc_vdisplay) { + check_size = adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE ? adjusted_mode->vdisplay : adjusted_mode->crtc_vdisplay; + if (dst->y1 + dsp_h > check_size) { DRM_ERROR("vp%d %s dest->y1[%d] + dsp_h[%d] exceed mode vdisplay[%d]\n", vp->id, win->name, dst->y1, dsp_h, adjusted_mode->crtc_vdisplay); dsp_h = adjusted_mode->crtc_vdisplay - dst->y1;