From 8927d33f76ee12bc618fecfc59fc7ff1fcedcd5e Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Thu, 22 Aug 2013 10:32:46 -0400 Subject: Fix shadowfb on big-endian machines 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 Signed-off-by: Alex Deucher --- src/drmmode_display.c | 3 +++ src/radeon_kms.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 1df104d1..921b7ba9 100644 --- a/src/drmmode_display.c +++ b/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 a/src/radeon_kms.c b/src/radeon_kms.c index edc3b048..82e88d44 100644 --- a/src/radeon_kms.c +++ b/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); -- cgit v1.2.3