Message ID | 20230918071011.18481-2-shawn.sung@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix errors when reporting rotation capability | expand |
Il 18/09/23 09:10, Hsiao Chien Sung ha scritto: > For CRTCs that doesn't support rotation should still return > DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip > doesn't support rotation, return the capability of the > hardware accordingly. > > Fixes: df4444577118 ("drm/mediatek: Support 180 degree rotation") > Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane rotation") > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Hi, Hsiao-chien: On Mon, 2023-09-18 at 15:10 +0800, Hsiao Chien Sung wrote: > For CRTCs that doesn't support rotation should still return > DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip > doesn't support rotation, return the capability of the > hardware accordingly. > > Fixes: df4444577118 ("drm/mediatek: Support 180 degree rotation") > Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane > rotation") > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +------- > drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 5 +++++ > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 + > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- > 5 files changed, 9 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > index 2254038519e1..f4c7dba8f73d 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > @@ -120,6 +120,7 @@ void mtk_ovl_adaptor_register_vblank_cb(struct > device *dev, void (*vblank_cb)(vo > void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev); > void mtk_ovl_adaptor_enable_vblank(struct device *dev); > void mtk_ovl_adaptor_disable_vblank(struct device *dev); > +unsigned int mtk_ovl_adaptor_supported_rotations(struct device > *dev); > void mtk_ovl_adaptor_start(struct device *dev); > void mtk_ovl_adaptor_stop(struct device *dev); > unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > index 2bffe4245466..5fd1f6ae41f3 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > @@ -288,8 +288,7 @@ unsigned int mtk_ovl_layer_nr(struct device *dev) > > unsigned int mtk_ovl_supported_rotations(struct device *dev) > { > - return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | > - DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; > + return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | > DRM_MODE_REFLECT_Y; If ovl enable reflect_x and reflect_y at the same time, it is rotate 180, right? Regards, CK > } > > int mtk_ovl_layer_check(struct device *dev, unsigned int idx, > @@ -302,11 +301,6 @@ int mtk_ovl_layer_check(struct device *dev, > unsigned int idx, > 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) > - return -EINVAL; > > /* > * TODO: Rotating/reflecting YUV buffers is not supported at > this time. > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > index 6bf6367853fb..922db8df572d 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > @@ -277,6 +277,11 @@ void mtk_ovl_adaptor_register_vblank_cb(struct > device *dev, void (*vblank_cb)(vo > vblank_cb, vblank_cb_data); > } > > +unsigned int mtk_ovl_adaptor_supported_rotations(struct device *dev) > +{ > + return DRM_MODE_ROTATE_0; > +} > + > void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev) > { > struct mtk_disp_ovl_adaptor *ovl_adaptor = > dev_get_drvdata(dev); > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c > b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c > index 771f4e173353..f7f972f0d46d 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c > @@ -412,6 +412,7 @@ static const struct mtk_ddp_comp_funcs > ddp_ovl_adaptor = { > .remove = mtk_ovl_adaptor_remove_comp, > .get_formats = mtk_ovl_adaptor_get_formats, > .get_num_formats = mtk_ovl_adaptor_get_num_formats, > + .supported_rotations = mtk_ovl_adaptor_supported_rotations, > }; > > static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = > { > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c > b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > index db2f70ae060d..371de196d400 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > @@ -315,7 +315,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); > -- > 2.18.0 >
Hi CK, On Thu, 2023-10-26 at 01:53 +0000, CK Hu (胡俊光) wrote: > Hi, Hsiao-chien: > > On Mon, 2023-09-18 at 15:10 +0800, Hsiao Chien Sung wrote: > > For CRTCs that doesn't support rotation should still return > > DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip > > doesn't support rotation, return the capability of the > > hardware accordingly. > > > > Fixes: df4444577118 ("drm/mediatek: Support 180 degree rotation") > > Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane > > rotation") > > > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > > --- > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +------- > > drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 5 +++++ > > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 + > > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- > > 5 files changed, 9 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > index 2254038519e1..f4c7dba8f73d 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > @@ -120,6 +120,7 @@ void mtk_ovl_adaptor_register_vblank_cb(struct > > device *dev, void (*vblank_cb)(vo > > void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev); > > void mtk_ovl_adaptor_enable_vblank(struct device *dev); > > void mtk_ovl_adaptor_disable_vblank(struct device *dev); > > +unsigned int mtk_ovl_adaptor_supported_rotations(struct device > > *dev); > > void mtk_ovl_adaptor_start(struct device *dev); > > void mtk_ovl_adaptor_stop(struct device *dev); > > unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > index 2bffe4245466..5fd1f6ae41f3 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > @@ -288,8 +288,7 @@ unsigned int mtk_ovl_layer_nr(struct device > > *dev) > > > > unsigned int mtk_ovl_supported_rotations(struct device *dev) > > { > > - return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | > > - DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; > > + return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | > > DRM_MODE_REFLECT_Y; > > If ovl enable reflect_x and reflect_y at the same time, it is rotate > 180, right? > > Regards, > CK Yes, if the user do such an operation, the result is equal to 180 degrees rotation. Regards, Shawn
Hi, Hsiao-chien: On Thu, 2023-10-26 at 08:27 +0000, Shawn Sung (宋孝謙) wrote: > Hi CK, > > On Thu, 2023-10-26 at 01:53 +0000, CK Hu (胡俊光) wrote: > > Hi, Hsiao-chien: > > > > On Mon, 2023-09-18 at 15:10 +0800, Hsiao Chien Sung wrote: > > > For CRTCs that doesn't support rotation should still return > > > DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip > > > doesn't support rotation, return the capability of the > > > hardware accordingly. > > > > > > Fixes: df4444577118 ("drm/mediatek: Support 180 degree rotation") > > > Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane > > > rotation") > > > > > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > > > --- > > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > > > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +------- > > > drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 5 +++++ > > > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 + > > > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- > > > 5 files changed, 9 insertions(+), 8 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > index 2254038519e1..f4c7dba8f73d 100644 > > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > @@ -120,6 +120,7 @@ void > > > mtk_ovl_adaptor_register_vblank_cb(struct > > > device *dev, void (*vblank_cb)(vo > > > void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev); > > > void mtk_ovl_adaptor_enable_vblank(struct device *dev); > > > void mtk_ovl_adaptor_disable_vblank(struct device *dev); > > > +unsigned int mtk_ovl_adaptor_supported_rotations(struct device > > > *dev); > > > void mtk_ovl_adaptor_start(struct device *dev); > > > void mtk_ovl_adaptor_stop(struct device *dev); > > > unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > index 2bffe4245466..5fd1f6ae41f3 100644 > > > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > @@ -288,8 +288,7 @@ unsigned int mtk_ovl_layer_nr(struct device > > > *dev) > > > > > > unsigned int mtk_ovl_supported_rotations(struct device *dev) > > > { > > > - return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | > > > - DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; > > > + return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | > > > DRM_MODE_REFLECT_Y; > > > > If ovl enable reflect_x and reflect_y at the same time, it is > > rotate > > 180, right? > > > > Regards, > > CK > > Yes, if the user do such an operation, the result is equal to 180 > degrees rotation. So ovl support rotate 180, why do you remove this capability? > > Regards, > Shawn
Hi CK, On Thu, 2023-10-26 at 08:29 +0000, CK Hu (胡俊光) wrote: > Hi, Hsiao-chien: > > On Thu, 2023-10-26 at 08:27 +0000, Shawn Sung (宋孝謙) wrote: > > Hi CK, > > > > On Thu, 2023-10-26 at 01:53 +0000, CK Hu (胡俊光) wrote: > > > Hi, Hsiao-chien: > > > > > > On Mon, 2023-09-18 at 15:10 +0800, Hsiao Chien Sung wrote: > > > > For CRTCs that doesn't support rotation should still return > > > > DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip > > > > doesn't support rotation, return the capability of the > > > > hardware accordingly. > > > > > > > > Fixes: df4444577118 ("drm/mediatek: Support 180 degree > > > > rotation") > > > > Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane > > > > rotation") > > > > > > > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > > > > --- > > > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + > > > > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +------- > > > > drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 5 +++++ > > > > drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 + > > > > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- > > > > 5 files changed, 9 insertions(+), 8 deletions(-) > > > > > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > > index 2254038519e1..f4c7dba8f73d 100644 > > > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > > > @@ -120,6 +120,7 @@ void > > > > mtk_ovl_adaptor_register_vblank_cb(struct > > > > device *dev, void (*vblank_cb)(vo > > > > void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev); > > > > void mtk_ovl_adaptor_enable_vblank(struct device *dev); > > > > void mtk_ovl_adaptor_disable_vblank(struct device *dev); > > > > +unsigned int mtk_ovl_adaptor_supported_rotations(struct device > > > > *dev); > > > > void mtk_ovl_adaptor_start(struct device *dev); > > > > void mtk_ovl_adaptor_stop(struct device *dev); > > > > unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > > index 2bffe4245466..5fd1f6ae41f3 100644 > > > > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > > > @@ -288,8 +288,7 @@ unsigned int mtk_ovl_layer_nr(struct device > > > > *dev) > > > > > > > > unsigned int mtk_ovl_supported_rotations(struct device *dev) > > > > { > > > > - return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | > > > > - DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; > > > > + return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | > > > > DRM_MODE_REFLECT_Y; > > > > > > If ovl enable reflect_x and reflect_y at the same time, it is > > > rotate > > > 180, right? > > > > > > Regards, > > > CK > > > > Yes, if the user do such an operation, the result is equal to 180 > > degrees rotation. > > So ovl support rotate 180, why do you remove this capability? > Thank you for checking. Will run IGT test to verify again. Best, Shawn
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h index 2254038519e1..f4c7dba8f73d 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h @@ -120,6 +120,7 @@ void mtk_ovl_adaptor_register_vblank_cb(struct device *dev, void (*vblank_cb)(vo void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev); void mtk_ovl_adaptor_enable_vblank(struct device *dev); void mtk_ovl_adaptor_disable_vblank(struct device *dev); +unsigned int mtk_ovl_adaptor_supported_rotations(struct device *dev); void mtk_ovl_adaptor_start(struct device *dev); void mtk_ovl_adaptor_stop(struct device *dev); unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c index 2bffe4245466..5fd1f6ae41f3 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c @@ -288,8 +288,7 @@ unsigned int mtk_ovl_layer_nr(struct device *dev) unsigned int mtk_ovl_supported_rotations(struct device *dev) { - return DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 | - DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; + return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y; } int mtk_ovl_layer_check(struct device *dev, unsigned int idx, @@ -302,11 +301,6 @@ int mtk_ovl_layer_check(struct device *dev, unsigned int idx, 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) - return -EINVAL; /* * TODO: Rotating/reflecting YUV buffers is not supported at this time. diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c index 6bf6367853fb..922db8df572d 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c @@ -277,6 +277,11 @@ void mtk_ovl_adaptor_register_vblank_cb(struct device *dev, void (*vblank_cb)(vo vblank_cb, vblank_cb_data); } +unsigned int mtk_ovl_adaptor_supported_rotations(struct device *dev) +{ + return DRM_MODE_ROTATE_0; +} + void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev) { struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev); diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c index 771f4e173353..f7f972f0d46d 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c @@ -412,6 +412,7 @@ static const struct mtk_ddp_comp_funcs ddp_ovl_adaptor = { .remove = mtk_ovl_adaptor_remove_comp, .get_formats = mtk_ovl_adaptor_get_formats, .get_num_formats = mtk_ovl_adaptor_get_num_formats, + .supported_rotations = mtk_ovl_adaptor_supported_rotations, }; static const char * const mtk_ddp_comp_stem[MTK_DDP_COMP_TYPE_MAX] = { diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c index db2f70ae060d..371de196d400 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c @@ -315,7 +315,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);
For CRTCs that doesn't support rotation should still return DRM_MODE_ROTATE_0. Since both OVL and OVL adaptor on MTK chip doesn't support rotation, return the capability of the hardware accordingly. Fixes: df4444577118 ("drm/mediatek: Support 180 degree rotation") Fixes: 84d805753983 ("drm/mediatek: Support reflect-y plane rotation") Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> --- drivers/gpu/drm/mediatek/mtk_disp_drv.h | 1 + drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +------- drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 5 +++++ drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 1 + drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) -- 2.18.0