Index: radeon_dri.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c,v
retrieving revision 1.11
diff -u -r1.11 radeon_dri.c
--- radeon_dri.c	17 Dec 2004 16:50:36 -0000	1.11
+++ radeon_dri.c	21 Jan 2005 19:02:17 -0000
@@ -1328,6 +1282,9 @@
 					    < RADEON_MAX_DRAWABLES
 					    ? SAREA_MAX_DRAWABLES
 					    : RADEON_MAX_DRAWABLES);
+    /* kill DRIAdjustFrame. We adjust sarea frame info ourselves to work
+       correctly with pageflip + mergedfb/color tiling */
+    pDRIInfo->wrap.AdjustFrame = NULL;
 
 #ifdef PER_CONTEXT_SAREA
     /* This is only here for testing per-context SAREAs.  When used, the
Index: radeon_driver.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v
retrieving revision 1.36
diff -u -r1.36 radeon_driver.c
--- radeon_driver.c	13 Jan 2005 17:35:49 -0000	1.36
+++ radeon_driver.c	21 Jan 2005 19:02:25 -0000
@@ -74,6 +74,7 @@
 #define _XF86DRI_SERVER_
 #include "radeon_dri.h"
 #include "radeon_sarea.h"
+#include "sarea.h"
 #endif
 
 #include "fb.h"
@@ -7510,6 +7855,7 @@
     int            reg, Base;
 #ifdef XF86DRI
     RADEONSAREAPrivPtr pSAREAPriv;
+    XF86DRISAREAPtr pSAREA;
 #endif
 
     if (info->showCache && y) {
@@ -7543,12 +7919,21 @@
 
 #ifdef XF86DRI
     if (info->directRenderingEnabled) {
-
 	pSAREAPriv = DRIGetSAREAPrivate(pScrn->pScreen);
+	/* can't get at sarea in a semi-sane way? */
+	pSAREA = (void *)((char*)pSAREAPriv - sizeof(XF86DRISAREARec));
 
 	if (clone || info->IsSecondary) {
 	    pSAREAPriv->crtc2_base = Base;
 	}
+	else {
+	    pSAREA->frame.x = (Base  / info->CurrentLayout.pixel_bytes)
+		% info->CurrentLayout.displayWidth;
+	    pSAREA->frame.y = (Base / info->CurrentLayout.pixel_bytes)
+		/ info->CurrentLayout.displayWidth;
+	    pSAREA->frame.width = pScrn->frameX1 - x + 1;
+	    pSAREA->frame.height = pScrn->frameY1 - y + 1;
+	}
 
 	if (pSAREAPriv->pfCurrentPage == 1) {
 	    Base += info->backOffset;
