xf86-video-ati: Branch 'randr-1.2'

Jesse Barnes jbarnes at kemper.freedesktop.org
Wed May 9 16:16:41 PDT 2007


 src/radeon_display.c |    7 +++----
 src/radeon_driver.c  |   10 +++++-----
 2 files changed, 8 insertions(+), 9 deletions(-)

New commits:
diff-tree 33c370b1d8350945f80ac12097d3e91243a400f2 (from 6263248a0044777a352e4ee7380b4b8f9afd091b)
Author: Jesse Barnes <jbarnes at jbarnes-mobile.amr.corp.intel.com>
Date:   Wed May 9 16:16:39 2007 -0700

    RADEON:
      - fix an ugly modesetting bug:  if we happened to set the mode on
        CRTC1 before CRTC2, CRTC2's RestoreMode function would clobber
        CRTC1's CRTC_OFFSET register since we never updated
        ModeReg.crtc_offset...  so make AdjustFrame use ModeReg and pull
        the call to it up before RestoreMode, seems to work ok here.

diff --git a/src/radeon_display.c b/src/radeon_display.c
index 9a3a87f..7fb2b77 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -2296,14 +2296,13 @@ radeon_crtc_mode_set(xf86CrtcPtr crtc, D
     }
 
     RADEONBlank(pScrn);
-    RADEONRestoreMode(pScrn, &info->ModeReg);
-
-    ErrorF("mode restored\n");
-
     if (radeon_crtc->crtc_id == 0)
 	RADEONDoAdjustFrame(pScrn, x, y, FALSE);
     else if (radeon_crtc->crtc_id == 1)
 	RADEONDoAdjustFrame(pScrn, x, y, TRUE);
+    RADEONRestoreMode(pScrn, &info->ModeReg);
+
+    ErrorF("mode restored\n");
 
     ErrorF("frame adjusted\n");
 
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index df644d8..1e94c58 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -6235,7 +6235,7 @@ void RADEONDoAdjustFrame(ScrnInfoPtr pSc
 {
     RADEONInfoPtr  info       = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
-    int            reg, Base, regcntl, crtcoffsetcntl, xytilereg, crtcxytile = 0;
+    int            Base, regcntl, crtcoffsetcntl, xytilereg, crtcxytile = 0;
 #ifdef XF86DRI
     RADEONSAREAPrivPtr pSAREAPriv;
     XF86DRISAREAPtr pSAREA;
@@ -6263,11 +6263,9 @@ void RADEONDoAdjustFrame(ScrnInfoPtr pSc
      only after a vsync. We'd probably need to wait (in drm) for vsync and only then update
      OFFSET and OFFSET_CNTL, if the y coord has changed. Seems hard to fix. */
     if (clone || info->IsSecondary) {
-        reg = RADEON_CRTC2_OFFSET;
 	regcntl = RADEON_CRTC2_OFFSET_CNTL;
 	xytilereg = R300_CRTC2_TILE_X0_Y0;
     } else {
-        reg = RADEON_CRTC_OFFSET;
 	regcntl = RADEON_CRTC_OFFSET_CNTL;
 	xytilereg = R300_CRTC_TILE_X0_Y0;
     }
@@ -6337,14 +6335,16 @@ void RADEONDoAdjustFrame(ScrnInfoPtr pSc
     }
 #endif
 
-    OUTREG(reg, Base);
-
     if (IS_R300_VARIANT) {
         OUTREG(xytilereg, crtcxytile);
     } else {
         OUTREG(regcntl, crtcoffsetcntl);
     }
 
+    if (clone)
+        info->ModeReg.crtc2_offset = Base;
+    else
+        info->ModeReg.crtc_offset = Base;
 }
 
 void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)


More information about the xorg-commit mailing list