]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/mediatek: Add DRM_MODE_ROTATE_0 to rotation property
authorHsiao Chien Sung <shawn.sung@mediatek.com>
Wed, 19 Jun 2024 16:38:48 +0000 (00:38 +0800)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Thu, 20 Jun 2024 13:57:35 +0000 (13:57 +0000)
Always add DRM_MODE_ROTATE_0 to rotation property to meet
IGT's (Intel GPU Tools) requirement.

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20240620-igt-v3-8-a9d62d2e2c7e@mediatek.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_ddp_comp.h
drivers/gpu/drm/mediatek/mtk_disp_ovl.c
drivers/gpu/drm/mediatek/mtk_plane.c

index 26236691ce4c29a108660ca9d7b47b3a1cab777f..f7fe2e08dc8e2e54656c3aa2309ea8c60a8ec170 100644 (file)
@@ -192,7 +192,11 @@ unsigned int mtk_ddp_comp_supported_rotations(struct mtk_ddp_comp *comp)
        if (comp->funcs && comp->funcs->supported_rotations)
                return comp->funcs->supported_rotations(comp->dev);
 
-       return 0;
+       /*
+        * In order to pass IGT tests, DRM_MODE_ROTATE_0 is required when
+        * rotation is not supported.
+        */
+       return DRM_MODE_ROTATE_0;
 }
 
 static inline unsigned int mtk_ddp_comp_layer_nr(struct mtk_ddp_comp *comp)
index 693560fa34e8ba2f6734d5fa28b3d66ddb40ed86..26b598b9f71f2cf4c94b22a6f2f85981dec229a8 100644 (file)
@@ -305,27 +305,20 @@ int mtk_ovl_layer_check(struct device *dev, unsigned int idx,
                        struct mtk_plane_state *mtk_state)
 {
        struct drm_plane_state *state = &mtk_state->base;
-       unsigned int rotation = 0;
 
-       rotation = drm_rotation_simplify(state->rotation,
-                                        DRM_MODE_ROTATE_0 |
-                                        DRM_MODE_REFLECT_X |
-                                        DRM_MODE_REFLECT_Y);
-       rotation &= ~DRM_MODE_ROTATE_0;
-
-       /* We can only do reflection, not rotation */
-       if ((rotation & DRM_MODE_ROTATE_MASK) != 0)
+       /* check if any unsupported rotation is set */
+       if (state->rotation & ~mtk_ovl_supported_rotations(dev))
                return -EINVAL;
 
        /*
         * TODO: Rotating/reflecting YUV buffers is not supported at this time.
         *       Only RGB[AX] variants are supported.
+        *       Since DRM_MODE_ROTATE_0 means "no rotation", we should not
+        *       reject layers with this property.
         */
-       if (state->fb->format->is_yuv && rotation != 0)
+       if (state->fb->format->is_yuv && (state->rotation & ~DRM_MODE_ROTATE_0))
                return -EINVAL;
 
-       state->rotation = rotation;
-
        return 0;
 }
 
index a74b26d359857075b4b3a19e6a6f47dd494fb1df..1723d4333f3718695f977981ebba927af8865174 100644 (file)
@@ -338,7 +338,7 @@ int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane,
                return err;
        }
 
-       if (supported_rotations & ~DRM_MODE_ROTATE_0) {
+       if (supported_rotations) {
                err = drm_plane_create_rotation_property(plane,
                                                         DRM_MODE_ROTATE_0,
                                                         supported_rotations);