Re: [PATCH v6 04/14] drm/mediatek: Add DRM_MODE_ROTATE_0 to rotation property
From: CK Hu (胡俊光)
Date: Mon Mar 25 2024 - 04:48:34 EST
Hi, Shawn:
On Fri, 2024-03-22 at 17:02 +0800, CK Hu wrote:
> Hi, Shawn:
>
> On Fri, 2024-03-22 at 13:28 +0800, Shawn Sung wrote:
> > From: Hsiao Chien Sung <shawn.sung@xxxxxxxxxxxx>
> >
> > Always add DRM_MODE_ROTATE_0 to rotation property to meet
> > IGT's (Intel GPU Tools) requirement.
>
> Reviewed-by: CK Hu <ck.hu@xxxxxxxxxxxx>
>
> >
> > Reviewed-by: AngeloGioacchino Del Regno <
> > angelogioacchino.delregno@xxxxxxxxxxxxx>
> > Signed-off-by: Hsiao Chien Sung <shawn.sung@xxxxxxxxxxxx>
> > ---
> > 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
> > + */
Sorry, this comment is not related to DRM_MODE_ROTATE_0, so after
removing this comment,
Reviewed-by: CK Hu <ck.hu@xxxxxxxxxxxx>
> > 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_ROTAT
> > E_0,
> > supported_rota
> > tions);