[PATCH] drm: mxsfb: lcdif: enforce 64-byte pitch alignment for scanout

From: Advait Dhamorikar

Date: Mon Apr 13 2026 - 07:50:33 EST


The LCDIF controller expects framebuffer pitch to be aligned to a
64 byte boundary for reliable scanout. While byte-granular pitches are
supported by the interface, the i.MX8MP reference manual
recommends 64-byte alignment for optimal operation.

Corrupted output was observed with XR24 framebuffers where a pitch of
4320 bytes caused visible corruption and choppy display, while an aligned
pitch of 4352 bytes worked correctly.

Ensure that only framebuffers with properly aligned pitch are accepted
by rejecting invalid configurations in lcdif_plane_atomic_check().
This allows userspace to fall back to a compatible allocation.

Signed-off-by: Advait Dhamorikar <advaitd@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/mxsfb/lcdif_kms.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lcdif_kms.c
index 72eb0de46b54..8e574e9a591a 100644
--- a/drivers/gpu/drm/mxsfb/lcdif_kms.c
+++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c
@@ -674,6 +674,18 @@ static int lcdif_plane_atomic_check(struct drm_plane *plane,
crtc_state = drm_atomic_get_new_crtc_state(state,
&lcdif->crtc);

+ /*
+ * While byte granularity is supported, LCDIF requires
+ * that framebuffer pitch be aligned to 64 bytes.
+ */
+ if (plane_state->fb &&
+ !IS_ALIGNED(plane_state->fb->pitches[0], 64)) {
+ DRM_DEV_DEBUG_DRIVER(plane->dev->dev,
+ "Framebuffer pitch (%u bytes) must be aligned to 64 bytes\n",
+ plane_state->fb->pitches[0]);
+ return -EINVAL;
+ }
+
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
DRM_PLANE_NO_SCALING,
DRM_PLANE_NO_SCALING,
--
2.43.0