[PATCH] Fix shadowfb on big-endian machines

Mark Kettenis mark.kettenis at xs4all.nl
Sun Aug 18 07:07:53 PDT 2013


For shadowfb, the framebuffer needs to have the RADEON_TILING_SURFACE
flag set, otherwise the appropriate byte swapping won't happen.

See https://bugs.freedesktop.org/show_bug.cgi?id=66663

Signed-off-by: Mark Kettenis <kettenis at openbsd.org>


diff --git src/drmmode_display.c src/drmmode_display.c
index 1df104d..921b7ba 100644
--- src/drmmode_display.c
+++ src/drmmode_display.c
@@ -1590,6 +1590,9 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
 	    tiling_flags |= RADEON_TILING_SWAP_16BIT;
 	    break;
 	}
+	if (info->ChipFamily < CHIP_FAMILY_R600 &&
+	    info->r600_shadow_fb && tiling_flags)
+	    tiling_flags |= RADEON_TILING_SURFACE;
 #endif
 	if (tiling_flags)
 	    radeon_bo_set_tiling(info->front_bo, tiling_flags, pitch);
diff --git src/radeon_kms.c src/radeon_kms.c
index edc3b04..82e88d4 100644
--- src/radeon_kms.c
+++ src/radeon_kms.c
@@ -1585,6 +1585,9 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen)
 	    tiling_flags |= RADEON_TILING_SWAP_16BIT;
 	    break;
 	}
+	if (info->ChipFamily < CHIP_FAMILY_R600 &&
+	    info->r600_shadow_fb && tiling_flags)
+	    tiling_flags |= RADEON_TILING_SURFACE;
 #endif
 	if (tiling_flags)
             radeon_bo_set_tiling(info->front_bo, tiling_flags, pitch);


More information about the xorg-driver-ati mailing list