diff mbox series

[v3,08/14] drm/mediatek: Add DRM_MODE_ROTATE_0 to rotation property

Message ID 20240620-igt-v3-8-a9d62d2e2c7e@mediatek.com (mailing list archive)
State New
Headers show
Series This series fixes the errors of MediaTek display driver found by IGT. | expand

Commit Message

Hsiao Chien Sung via B4 Relay June 19, 2024, 4:38 p.m. UTC
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>
Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
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 | 17 +++++------------
 drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
 3 files changed, 11 insertions(+), 14 deletions(-)

Comments

Doug Anderson Oct. 24, 2024, 8:47 p.m. UTC | #1
Hi,

On Wed, Jun 19, 2024 at 9:39 AM Hsiao Chien Sung via B4 Relay
<devnull+shawn.sung.mediatek.com@kernel.org> 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>
> Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
> 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 | 17 +++++------------
>  drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
>  3 files changed, 11 insertions(+), 14 deletions(-)

FWIW, this patch got into ChromeOS's 5.15 branch via stable merge and
apparently broke things. As a short term fix we've reverted it there:

https://crrev.com/c/5960799

...apparently the patch is fine on newer kernels so maybe there is a
missing dependency? Hopefully someone on this list can dig into this
and either post the revert to stable 5.15 kernels or suggest
additional backports.


-Doug
Shawn Sung (宋孝謙) Oct. 25, 2024, 1:32 a.m. UTC | #2
Hi Doug,

On Thu, 2024-10-24 at 13:47 -0700, Doug Anderson wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  Hi,
> 
> On Wed, Jun 19, 2024 at 9:39 AM Hsiao Chien Sung via B4 Relay
> <devnull+shawn.sung.mediatek.com@kernel.org> 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>
> > Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC
> MT8173.")
> > 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 | 17 +++++------------
> >  drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
> >  3 files changed, 11 insertions(+), 14 deletions(-)
> 
> FWIW, this patch got into ChromeOS's 5.15 branch via stable merge and
> apparently broke things. As a short term fix we've reverted it there:
> 
> https://crrev.com/c/5960799
 
Thank you for reporting this issue. We are currently investigating the
bug.

Since I am unable to access the Google issue tracker [1], could you
please provide more details about this bug? The message in the revert
commit mentions "hana/sycamore360" (MT8173) and it appears that there
is a rotation issue in tablet mode.

> 
> ...apparently the patch is fine on newer kernels so maybe there is a
> missing dependency? Hopefully someone on this list can dig into this
> and either post the revert to stable 5.15 kernels or suggest
> additional backports.
> 

There are known issues [2] regarding forward compatibility. Could you
confirm whether this patch is unable to resolve the mentioned problem?
Thanks.

[1] https://issuetracker.google.com/issues/369688659
[2] 
https://patchwork.kernel.org/project/linux-mediatek/list/?series=896964

> 
> -Doug

Best regards,
Shawn
Doug Anderson Oct. 25, 2024, 4:35 p.m. UTC | #3
Hi Shawn,

On Thu, Oct 24, 2024 at 6:32 PM Shawn Sung (宋孝謙)
<Shawn.Sung@mediatek.com> wrote:
>
> Hi Doug,
>
> On Thu, 2024-10-24 at 13:47 -0700, Doug Anderson wrote:
> >
> > External email : Please do not click links or open attachments until
> > you have verified the sender or the content.
> >  Hi,
> >
> > On Wed, Jun 19, 2024 at 9:39 AM Hsiao Chien Sung via B4 Relay
> > <devnull+shawn.sung.mediatek.com@kernel.org> 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>
> > > Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC
> > MT8173.")
> > > 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 | 17 +++++------------
> > >  drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
> > >  3 files changed, 11 insertions(+), 14 deletions(-)
> >
> > FWIW, this patch got into ChromeOS's 5.15 branch via stable merge and
> > apparently broke things. As a short term fix we've reverted it there:
> >
> > https://crrev.com/c/5960799
>
> Thank you for reporting this issue. We are currently investigating the
> bug.
>
> Since I am unable to access the Google issue tracker [1], could you
> please provide more details about this bug? The message in the revert
> commit mentions "hana/sycamore360" (MT8173) and it appears that there
> is a rotation issue in tablet mode.

Thanks for the followup. I've only been peripherally involved in the
problem, but I can at least copy the relevant bits over.

It looks as if the problem is somehow only showing up when running
Android apps on those devices, so whatever the problem is it's subtle.
The report says that the apps work OK when the device is in tablet
mode and in one rotation but the problem shows up when rotated 90
degrees. The report says that "Screen content appears inverted". To me
it also sounds _possible_ that the problem is somewhere in our
userspace.

I think Hsin-Yi and Ross are continuing to dig a bit more. Maybe once
they've dug they can add any details they find or can loop in others
as it makes sense?


> > ...apparently the patch is fine on newer kernels so maybe there is a
> > missing dependency? Hopefully someone on this list can dig into this
> > and either post the revert to stable 5.15 kernels or suggest
> > additional backports.
> >
>
> There are known issues [2] regarding forward compatibility. Could you
> confirm whether this patch is unable to resolve the mentioned problem?
> Thanks.
>
> [1] https://issuetracker.google.com/issues/369688659
> [2]
> https://patchwork.kernel.org/project/linux-mediatek/list/?series=896964

The patches in [2] look related to alpha blending but I think they are
seeing issues related to rotation. ...so I'm going to assume it's
different? I don't have this hardware in front of me, so I'm just
going by the report.

-Doug
Shawn Sung (宋孝謙) Oct. 26, 2024, 4:10 a.m. UTC | #4
Hi Doug,

On Fri, 2024-10-25 at 09:35 -0700, Doug Anderson wrote:
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
> 
> 
> Hi Shawn,
> 
> On Thu, Oct 24, 2024 at 6:32 PM Shawn Sung (宋孝謙)
> <Shawn.Sung@mediatek.com> wrote:
> > 
> > Hi Doug,
> > 
> > On Thu, 2024-10-24 at 13:47 -0700, Doug Anderson wrote:
> > > 
> > > External email : Please do not click links or open attachments
> > > until
> > > you have verified the sender or the content.
> > >  Hi,
> > > 
> > > On Wed, Jun 19, 2024 at 9:39 AM Hsiao Chien Sung via B4 Relay
> > > <devnull+shawn.sung.mediatek.com@kernel.org> 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>
> > > > Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek
> > > > SoC
> > > 
> > > MT8173.")
> > > > 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 | 17 +++++------------
> > > >  drivers/gpu/drm/mediatek/mtk_plane.c    |  2 +-
> > > >  3 files changed, 11 insertions(+), 14 deletions(-)
> > > 
> > > FWIW, this patch got into ChromeOS's 5.15 branch via stable merge
> > > and
> > > apparently broke things. As a short term fix we've reverted it
> > > there:
> > > 
> > > 
https://urldefense.com/v3/__https://crrev.com/c/5960799__;!!CTRNKA9wMg0ARbw!kSI2lyZJ5F8SCpAFfKCeZsL1qie2qRvpXWPhtD4IlHik7uS4q6hdR6EjPbskQxlTNP6OIBSwPOKU2KtFf5NXKQ$
> > 
> > Thank you for reporting this issue. We are currently investigating
> > the
> > bug.
> > 
> > Since I am unable to access the Google issue tracker [1], could you
> > please provide more details about this bug? The message in the
> > revert
> > commit mentions "hana/sycamore360" (MT8173) and it appears that
> > there
> > is a rotation issue in tablet mode.
> 
> Thanks for the followup. I've only been peripherally involved in the
> problem, but I can at least copy the relevant bits over.
> 
> It looks as if the problem is somehow only showing up when running
> Android apps on those devices, so whatever the problem is it's
> subtle.
> The report says that the apps work OK when the device is in tablet
> mode and in one rotation but the problem shows up when rotated 90
> degrees. The report says that "Screen content appears inverted". To
> me
> it also sounds _possible_ that the problem is somewhere in our
> userspace.

Thank you for providing the details. We have also reached out to our
partner at Google and gained a better understanding of the situation.

We discovered that the capability for 180-degree rotation was not
previously claimed. However, we reported this capability by adding
DRM_MODE_ROTATE_180 to the plane property, as combining flip-x and
flip-y effectively results in a 180-degree rotation. Unfortunately, it
appears that we did not properly handle the rotation property in the
driver, which has led to the current issues.

The reason there is no problem after reverting this patch is likely
because, when the driver does not support rotation, Android apps will
handle screen rotation via software. After this patch, since we claim
that our driver supports 180-degree rotation, the app attempts to
utilize hardware for this function, which has resulted in the bug.

> 
> I think Hsin-Yi and Ross are continuing to dig a bit more. Maybe once
> they've dug they can add any details they find or can loop in others
> as it makes sense?

Thank you for your assistance, and we will continue to investigate this
matter. Since I am no longer involved in the related project, Jason-JH
will assist in investigating this issue and will submit a fix once we
confirm the root cause.

> 
> 
> > > ...apparently the patch is fine on newer kernels so maybe there
> > > is a
> > > missing dependency? Hopefully someone on this list can dig into
> > > this
> > > and either post the revert to stable 5.15 kernels or suggest
> > > additional backports.
> > > 
> > 
> > There are known issues [2] regarding forward compatibility. Could
> > you
> > confirm whether this patch is unable to resolve the mentioned
> > problem?
> > Thanks.
> > 
> > [1] 
> > https://urldefense.com/v3/__https://issuetracker.google.com/issues/369688659__;!!CTRNKA9wMg0ARbw!kSI2lyZJ5F8SCpAFfKCeZsL1qie2qRvpXWPhtD4IlHik7uS4q6hdR6EjPbskQxlTNP6OIBSwPOKU2KsGQwdobA$
> > [2]
> > 
https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/list/?series=896964__;!!CTRNKA9wMg0ARbw!kSI2lyZJ5F8SCpAFfKCeZsL1qie2qRvpXWPhtD4IlHik7uS4q6hdR6EjPbskQxlTNP6OIBSwPOKU2KuXChWBjA$
> 
> The patches in [2] look related to alpha blending but I think they
> are
> seeing issues related to rotation. ...so I'm going to assume it's
> different? I don't have this hardware in front of me, so I'm just
> going by the report.

No problem. Based on your detailed description above, it seems we have
identified the possible cause. 

> 
> -Doug

Best regards,
Shawn
diff mbox series

Patch

diff --git a/drivers/gpu/drm/mediatek/mtk_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_ddp_comp.h
index 26236691ce4c..f7fe2e08dc8e 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 693560fa34e8..26b598b9f71f 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c b/drivers/gpu/drm/mediatek/mtk_plane.c
index a74b26d35985..1723d4333f37 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);