From: Daniel Stone Date: Mon, 15 Dec 2025 14:09:22 +0000 (+0100) Subject: drm/rockchip: vop2: Enforce AFBC transform stride align in plane_check X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=081676de4a22341a877ce81c4d5364737d167859;p=thirdparty%2Fkernel%2Flinux.git drm/rockchip: vop2: Enforce AFBC transform stride align in plane_check Make sure we can't break the hardware by requesting an unsupported configuration. Signed-off-by: Daniel Stone Signed-off-by: Nicolas Frattaroli Signed-off-by: Heiko Stuebner Link: https://patch.msgid.link/20251215-vop2-atomic-fixups-v5-6-83463c075a8d@collabora.com --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 0eab3370f088..7591a34ba912 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -1083,6 +1083,15 @@ static int vop2_plane_atomic_check(struct drm_plane *plane, return -EINVAL; } + if (drm_is_afbc(fb->modifier) && + pstate->rotation & + (DRM_MODE_REFLECT_X | DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270) && + (fb->pitches[0] << 3) / vop2_get_bpp(fb->format) % 64) { + drm_dbg_kms(vop2->drm, + "AFBC buffers must be 64-pixel aligned for horizontal rotation or mirroring\n"); + return -EINVAL; + } + return 0; } @@ -1290,9 +1299,6 @@ static void vop2_plane_atomic_update(struct drm_plane *plane, * with WIN_VIR_STRIDE. */ stride = (fb->pitches[0] << 3) / bpp; - if ((stride & 0x3f) && (xmirror || rotate_90 || rotate_270)) - drm_dbg_kms(vop2->drm, "vp%d %s stride[%d] not 64 pixel aligned\n", - vp->id, win->data->name, stride); /* It's for head stride, each head size is 16 byte */ stride = ALIGN(stride, block_w) / block_w * 16;