FAILED: patch "[PATCH] drm/mgag200: Fix big-endian support" failed to apply to 5.15-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 6cb31fba137d45e682ce455b8ea364f44d5d4f98
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026010546-doorpost-resume-e2e2@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6cb31fba137d45e682ce455b8ea364f44d5d4f98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Rebe?= <[email protected]>
Date: Mon, 8 Dec 2025 14:18:27 +0100
Subject: [PATCH] drm/mgag200: Fix big-endian support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Unlike the original, deleted Matrox mga driver, the new mgag200 driver has the XRGB frame-buffer byte swapped on big-endian "RISC" systems. Fix by enabling byte swapping "PowerPC" OPMODE for any __BIG_ENDIAN config.
drivers/gpu/drm/mgag200/mgag200_mode.c +25 -0
@@ -161,6 +161,30 @@ static void mgag200_set_startadd(struct mga_device *mdev,WREG_ECRT (0x00 , crtcext0); } +/* +* Set the opmode for the hardware swapper for Big-Endian processor +* support for the frame buffer aperture and DMAWIN space. +*/ +static void mgag200_set_datasiz (struct mga_device *mdev,u32 format) +{ +#if defined(__BIG_ENDIAN) +u32 opmode =RREG32 (MGAREG_OPMODE ); + + opmode &= ~(GENMASK (17 ,16 ) |GENMASK (9 ,8 ) |GENMASK (3 ,2 )); + +/* Big-endian byte-swapping */ +switch (format) { +case DRM_FORMAT_RGB565 : + opmode |=0x10100 ; +break ; +case DRM_FORMAT_XRGB8888 : + opmode |=0x20200 ; +break ; + } +WREG32 (MGAREG_OPMODE , opmode); +#endif +} +void mgag200_init_registers (struct mga_device *mdev) {u8 crtc11, misc;
@@ -496,6 +520,7 @@ void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,struct drm_atomic_helper_damage_iter iter;struct drm_rect damage; +mgag200_set_datasiz (mdev, fb->format->format);drm_atomic_helper_damage_iter_init (&iter, old_plane_state, plane_state);drm_atomic_for_each_plane_damage (&iter, &damage) {mgag200_handle_damage (mdev, shadow_plane_state->data, fb, &damage);