From: Andy Yan <andy....@rock-chips.com>

The Cluster windows on rk3566/8 only support afbc mode.

Fixes: 604be85547ce ("drm/rockchip: Add VOP2 driver")
Signed-off-by: Andy Yan <andy....@rock-chips.com>

---

Changes in v5:
- Added in V5

 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c 
b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index d7ddeec27c7d..bd8db45eeba6 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -1165,6 +1165,7 @@ static int vop2_plane_atomic_check(struct drm_plane 
*plane,
        struct vop2_video_port *vp;
        struct vop2 *vop2;
        const struct vop2_data *vop2_data;
+       struct vop2_win *win;
        struct drm_rect *dest = &pstate->dst;
        struct drm_rect *src = &pstate->src;
        int min_scale = FRAC_16_16(1, 8);
@@ -1178,6 +1179,7 @@ static int vop2_plane_atomic_check(struct drm_plane 
*plane,
        vp = to_vop2_video_port(crtc);
        vop2 = vp->vop2;
        vop2_data = vop2->data;
+       win = to_vop2_win(plane);
 
        cstate = drm_atomic_get_existing_crtc_state(pstate->state, crtc);
        if (WARN_ON(!cstate))
@@ -1215,6 +1217,16 @@ static int vop2_plane_atomic_check(struct drm_plane 
*plane,
                return -EINVAL;
        }
 
+       if (vop2->data->soc_id == 3568 || vop2->data->soc_id == 3566) {
+               if (vop2_cluster_window(win)) {
+                       if (!rockchip_afbc(plane, fb->modifier)) {
+                               drm_err(vop2->drm, "Unsupported linear format 
for %s\n", win->data->name);
+                               return -EINVAL;
+                       }
+               }
+
+       }
+
        /*
         * Src.x1 can be odd when do clip, but yuv plane start point
         * need align with 2 pixel.
-- 
2.34.1

Reply via email to