diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 72ebfee6c856..7cac259bd675 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -2852,6 +2852,17 @@ static int vop2_plane_atomic_check(struct drm_plane *plane, struct drm_plane_sta else vpstate->afbc_en = false; + /* + * This is special feature at rk356x, the cluster layer only can support + * afbc format and can't support linear format; + */ + if (VOP_MAJOR(vop2_data->version) == 0x40 && VOP_MINOR(vop2_data->version) == 0x15) { + if (vop2_cluster_window(win) && !vpstate->afbc_en) { + DRM_ERROR("Unsupported linear format at %s\n", win->name); + return -EINVAL; + } + } + /* * Src.x1 can be odd when do clip, but yuv plane start point * need align with 2 pixel.