drm/rockchip: vop2: clear afbc en and transform bit for cluster window at linear...
authorAndy Yan <andy.yan@rock-chips.com>
Mon, 11 Dec 2023 11:57:41 +0000 (19:57 +0800)
committerHeiko Stuebner <heiko@sntech.de>
Wed, 13 Dec 2023 14:17:48 +0000 (15:17 +0100)
The enable bit and transform offset of cluster windows should be
cleared when it work at linear mode, or we may have a iommu fault
issue on rk3588 which cluster windows switch between afbc and linear
mode.

As the cluster windows of rk3568 only supports afbc format
so is therefore not affected.

Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20231211115741.1784954-1-andyshrk@163.com
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c

index 639dfebc6bd1d59b5a0fdc40e177d7e7c726f376..a019cc9bbd54dbb4b0212408d7629dd8ce1ee0c0 100644 (file)
@@ -1312,6 +1312,11 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
                vop2_win_write(win, VOP2_WIN_AFBC_ROTATE_270, rotate_270);
                vop2_win_write(win, VOP2_WIN_AFBC_ROTATE_90, rotate_90);
        } else {
+               if (vop2_cluster_window(win)) {
+                       vop2_win_write(win, VOP2_WIN_AFBC_ENABLE, 0);
+                       vop2_win_write(win, VOP2_WIN_AFBC_TRANSFORM_OFFSET, 0);
+               }
+
                vop2_win_write(win, VOP2_WIN_YRGB_VIR, DIV_ROUND_UP(fb->pitches[0], 4));
        }