From: Hsiao Chien Sung <shawn.s...@mediatek.com>

Always add DRM_MODE_ROTATE_0 to rotation property to meet
IGT's (Intel GPU Tools) requirement.

Reviewed-by: AngeloGioacchino Del Regno 
<angelogioacchino.delre...@collabora.com>
Signed-off-by: Hsiao Chien Sung <shawn.s...@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_ddp_comp.h |  6 +++++-
 drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 21 +++++++++------------
 drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h 
b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
index 26236691ce4c2..f7fe2e08dc8e2 100644
--- a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
+++ b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
@@ -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)
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c 
b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
index 0ebeaf9830d83..2a767a823c83a 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
@@ -288,6 +288,10 @@ unsigned int mtk_ovl_layer_nr(struct device *dev)
 
 unsigned int mtk_ovl_supported_rotations(struct device *dev)
 {
+       /*
+        * although currently OVL can only do reflection,
+        * reflect x + reflect y = rotate 180
+        */
        return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 |
               DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y;
 }
@@ -296,27 +300,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;
 }
 
diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c 
b/drivers/gpu/drm/mediatek/mtk_plane.c
index a74b26d359857..1723d4333f371 100644
--- a/drivers/gpu/drm/mediatek/mtk_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_plane.c
@@ -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);
-- 
2.18.0

Reply via email to