Thread (7 messages) 7 messages, 6 authors, 2026-02-10

Re: [PATCH] drm/mediatek: Disable AFBC support on Mediatek DRM driver

From: CK Hu (胡俊光) <hidden>
Date: 2025-10-29 02:53:55
Also in: dri-devel, linux-mediatek, lkml, stable

Hi, Justin:

AFBC just improve DRAM bandwidth performance, so I decide to backport this disable patch.
Once fixup patch exist, then backport fixup patch.

Regards,
CK

On Tue, 2025-10-28 at 10:48 +0000, Macpaul Lin (林智斌) wrote:
On Fri, 2025-10-24 at 17:27 -0300, Ariel D'Alessandro wrote:
quoted
External email : Please do not click links or open attachments until
you have verified the sender or the content.


Commit c410fa9b07c32 ("drm/mediatek: Add AFBC support to Mediatek DRM
driver") added AFBC support to Mediatek DRM and enabled the
32x8/split/sparse modifier.

However, this is currently broken on Mediatek MT8188 (Genio 700 EVK
platform); tested using upstream Kernel and Mesa (v25.2.1), AFBC is
used by
default since Mesa v25.0.

Kernel trace reports vblank timeouts constantly, and the render is
garbled:
[CRTC:62:crtc-0] vblank wait timed out
WARNING: CPU: 7 PID: 70 at drivers/gpu/drm/drm_atomic_helper.c:1835
drm_atomic_helper_wait_for_vblanks.part.0+0x24c/0x27c
[...]
Hardware name: MediaTek Genio-700 EVK (DT)
Workqueue: events_unbound commit_work
pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : drm_atomic_helper_wait_for_vblanks.part.0+0x24c/0x27c
lr : drm_atomic_helper_wait_for_vblanks.part.0+0x24c/0x27c
sp : ffff80008337bca0
x29: ffff80008337bcd0 x28: 0000000000000061 x27: 0000000000000000
x26: 0000000000000001 x25: 0000000000000000 x24: ffff0000c9dcc000
x23: 0000000000000001 x22: 0000000000000000 x21: ffff0000c66f2f80
x20: ffff0000c0d7d880 x19: 0000000000000000 x18: 000000000000000a
x17: 000000040044ffff x16: 005000f2b5503510 x15: 0000000000000000
x14: 0000000000000000 x13: 74756f2064656d69 x12: 742074696177206b
x11: 0000000000000058 x10: 0000000000000018 x9 : ffff800082396a70
x8 : 0000000000057fa8 x7 : 0000000000000cce x6 : ffff8000823eea70
x5 : ffff0001fef5f408 x4 : ffff80017ccee000 x3 : ffff0000c12cb480
x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000c12cb480
Call trace:
 drm_atomic_helper_wait_for_vblanks.part.0+0x24c/0x27c (P)
 drm_atomic_helper_commit_tail_rpm+0x64/0x80
 commit_tail+0xa4/0x1a4
 commit_work+0x14/0x20
 process_one_work+0x150/0x290
 worker_thread+0x2d0/0x3ec
 kthread+0x12c/0x210
 ret_from_fork+0x10/0x20
---[ end trace 0000000000000000 ]---
Until this gets fixed upstream, disable AFBC support on this
platform, as
it's currently broken with upstream Mesa.

Signed-off-by: Ariel D'Alessandro <redacted>
---
 drivers/gpu/drm/mediatek/mtk_plane.c | 24 +-----------------------
 1 file changed, 1 insertion(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c
b/drivers/gpu/drm/mediatek/mtk_plane.c
index 02349bd440017..788b52c1d10c5 100644
--- a/drivers/gpu/drm/mediatek/mtk_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_plane.c
@@ -21,9 +21,6 @@
 static const u64 modifiers[] = {
        DRM_FORMAT_MOD_LINEAR,
-       DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 |
-                               AFBC_FORMAT_MOD_SPLIT |
-                               AFBC_FORMAT_MOD_SPARSE),
        DRM_FORMAT_MOD_INVALID,
 };
@@ -71,26 +68,7 @@ static bool mtk_plane_format_mod_supported(struct
drm_plane *plane,
                                           uint32_t format,
                                           uint64_t modifier)
 {
-       if (modifier == DRM_FORMAT_MOD_LINEAR)
-               return true;
-
-       if (modifier != DRM_FORMAT_MOD_ARM_AFBC(
-                               AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 |
-                               AFBC_FORMAT_MOD_SPLIT |
-                               AFBC_FORMAT_MOD_SPARSE))
-               return false;
-
-       if (format != DRM_FORMAT_XRGB8888 &&
-           format != DRM_FORMAT_ARGB8888 &&
-           format != DRM_FORMAT_BGRX8888 &&
-           format != DRM_FORMAT_BGRA8888 &&
-           format != DRM_FORMAT_ABGR8888 &&
-           format != DRM_FORMAT_XBGR8888 &&
-           format != DRM_FORMAT_RGB888 &&
-           format != DRM_FORMAT_BGR888)
-               return false;
-
-       return true;
+       return modifier == DRM_FORMAT_MOD_LINEAR;
 }

 static void mtk_plane_destroy_state(struct drm_plane *plane,
Great! Thanks for this patch.
I've tested this patch against k6.17.5 on mt8395-genio-1200-evk board,
and it is working.
I've also tested this patch with 'modetest -M mediatek -s
34@59:1200x1290' is working as well.

I'm not sure if it is possible to add a "Fixes:" tag to this patch?
Maybe add this patch with 'Cc: stable@vger.kernel.org #6.17' at least?
Some Linux distros are currently using 6.17 for testing.

Reviewed-by: Macpaul Lin <macpaul.lin@mediatek.com>

Regards,
Macpaul Lin


************* MEDIATEK Confidentiality Notice
 ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe
 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help