From 859cced7108197ef1da84cc47d81a03d48c96d58 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Tue, 20 May 2025 16:57:45 +0800 Subject: [PATCH] drm/rockchip: vop2: update cluster fbc xoffset check rule cluster fbc xoffset check size is related to fbc block_w. Signed-off-by: Sandy Huang Change-Id: If091d9d740e22e5f6d192f4085a1b550e826d846 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 6e31532f8856..89d8efce59be 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -5856,6 +5856,8 @@ static int vop2_cluster_two_win_mode_check(struct drm_plane_state *pstate) struct vop2_win *main_win = vop2_find_win_by_phys_id(vop2, win->phys_id); struct drm_plane_state *main_pstate; int actual_w = drm_rect_width(&pstate->src) >> 16; + struct drm_framebuffer *fb = pstate->fb; + u8 block_w = IS_ROCKCHIP_RFBC_MOD(fb->modifier) ? 64 : fb->modifier & AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 ? 32 : 16; int xoffset; if (pstate->fb->modifier == DRM_FORMAT_MOD_LINEAR) @@ -5890,9 +5892,9 @@ static int vop2_cluster_two_win_mode_check(struct drm_plane_state *pstate) xoffset = main_pstate->src.x1 >> 16; actual_w = drm_rect_width(&main_pstate->src) >> 16; - if ((actual_w + xoffset % 16) > 2048) { - DRM_ERROR("%s act_w(%d) + xoffset(%d) / 16 << 2048 in two win mode\n", - main_win->name, actual_w, xoffset); + if ((actual_w + xoffset % block_w) > 2048) { + DRM_ERROR("%s act_w(%d) + xoffset(%d) %% %d > 2048 in two win mode\n", + main_win->name, actual_w, xoffset, block_w); return -EINVAL; }