Message ID | 20240322052829.9893-5-shawn.sung@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support IGT in display driver | expand |
Hi, Shawn: On Fri, 2024-03-22 at 13:28 +0800, Shawn Sung wrote: > From: Hsiao Chien Sung <shawn.sung@mediatek.com> > > 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> > Signed-off-by: Hsiao Chien Sung <shawn.sung@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_ROTAT > E_0, > supported_rota > tions);
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@mediatek.com> > > > > 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> > > Signed-off-by: Hsiao Chien Sung <shawn.sung@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 > > + */ Sorry, this comment is not related to DRM_MODE_ROTATE_0, so after removing this comment, Reviewed-by: CK Hu <ck.hu@mediatek.com> > > 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);
Hi CK, On Mon, 2024-03-25 at 01:52 +0000, CK Hu (胡俊光) wrote: > > > > 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@mediatek.com> > Got it. No problem. Will remove it from this series. Thanks, Shawn
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);