xf86-video-ati: Branch 'master' - 4 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Sat Jul 18 13:29:16 PDT 2009


 src/drmmode_display.c    |    4 +++-
 src/radeon_commonfuncs.c |    9 ++++++---
 src/radeon_dri2.c        |    9 +++++++++
 src/radeon_kms.c         |    8 +++++---
 src/radeon_reg.h         |    3 ++-
 5 files changed, 25 insertions(+), 8 deletions(-)

New commits:
commit e38305aebdc95f80f5b4b3e5ba541ea67dc05f01
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Jul 18 22:23:45 2009 +0200

    Also drop DRM master in KMS CloseScreen.
    
    The LeaveVT hook isn't always called when the server dies, e.g. when quitting
    from the GDM greeter. This may cause existing servers to fall over if the dying
    server process still exists when they try to re-acquire master and set a mode.
    
    Also use drmSet/DropMaster() rather than ioctl() directly.

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 59a654f..8a14f88 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -498,6 +498,8 @@ static Bool RADEONCloseScreen_KMS(int scrnIndex, ScreenPtr pScreen)
 	info->accel_state->exa = NULL;
     }
 
+    drmDropMaster(info->dri->drmFD);
+
     if (info->cursor) xf86DestroyCursorInfoRec(info->cursor);
     info->cursor = NULL;
 
@@ -735,8 +737,8 @@ Bool RADEONEnterVT_KMS(int scrnIndex, int flags)
 		   "RADEONEnterVT_KMS\n");
 
 
-    ret = ioctl(info->dri->drmFD, DRM_IOCTL_SET_MASTER, NULL);
-    if (ret == -EINVAL)
+    ret = drmSetMaster(info->dri->drmFD);
+    if (ret)
 	ErrorF("Unable to retrieve master\n");
 
     info->accel_state->XInited3D = FALSE;
@@ -762,7 +764,7 @@ void RADEONLeaveVT_KMS(int scrnIndex, int flags)
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
 		   "RADEONLeaveVT_KMS\n");
 
-    ioctl(info->dri->drmFD, DRM_IOCTL_DROP_MASTER, NULL);
+    drmDropMaster(info->dri->drmFD);
 
 #ifdef HAVE_FREE_SHADOW
     xf86RotateFreeShadow(pScrn);
commit a43c660a00147bfae5ca601f4720b2680b75211f
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Jul 18 22:21:59 2009 +0200

    Set CRTC active flag to TRUE after a successful KMS mode set.
    
    Otherwise some things like changing the colour map won't work properly.

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index ea2f71f..42b0b15 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -323,7 +323,9 @@ done:
 		crtc->y = saved_y;
 		crtc->rotation = saved_rotation;
 		crtc->mode = saved_mode;
-	}
+	} else
+		crtc->active = TRUE;
+
 	return ret;
 }
 
commit f32069f42b3e4643f15148d0b96164def00dcc74
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Jul 18 22:20:08 2009 +0200

    Set the STALL bit in the CRTC_GUI_TRIG_VLINE registers.
    
    As recommended by the register reference when using the WAIT_CRTC_VLINE bit in
    the WAIT_UNTIL register, as we are.

diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
index 3df7daf..6f501a6 100644
--- a/src/radeon_commonfuncs.c
+++ b/src/radeon_commonfuncs.c
@@ -846,7 +846,8 @@ void drmmode_wait_for_vline(ScrnInfoPtr pScrn, PixmapPtr pPix,
 	OUT_ACCEL_REG(RADEON_CRTC_GUI_TRIG_VLINE, /* another placeholder */
 		      ((start << RADEON_CRTC_GUI_TRIG_VLINE_START_SHIFT) |
 		      (stop << RADEON_CRTC_GUI_TRIG_VLINE_END_SHIFT) |
-		      RADEON_CRTC_GUI_TRIG_VLINE_INV));
+		      RADEON_CRTC_GUI_TRIG_VLINE_INV |
+		      RADEON_CRTC_GUI_TRIG_VLINE_STALL));
     }
     OUT_ACCEL_REG(RADEON_WAIT_UNTIL, (RADEON_WAIT_CRTC_VLINE |
 				      RADEON_ENG_DISPLAY_SELECT_CRTC0));
@@ -918,12 +919,14 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix,
 	    OUT_ACCEL_REG(RADEON_CRTC_GUI_TRIG_VLINE,
 			  ((start << RADEON_CRTC_GUI_TRIG_VLINE_START_SHIFT) |
 			   (stop << RADEON_CRTC_GUI_TRIG_VLINE_END_SHIFT) |
-			   RADEON_CRTC_GUI_TRIG_VLINE_INV));
+			   RADEON_CRTC_GUI_TRIG_VLINE_INV |
+			   RADEON_CRTC_GUI_TRIG_VLINE_STALL));
 	else
 	    OUT_ACCEL_REG(RADEON_CRTC2_GUI_TRIG_VLINE,
 			  ((start << RADEON_CRTC_GUI_TRIG_VLINE_START_SHIFT) |
 			   (stop << RADEON_CRTC_GUI_TRIG_VLINE_END_SHIFT) |
-			   RADEON_CRTC_GUI_TRIG_VLINE_INV));
+			   RADEON_CRTC_GUI_TRIG_VLINE_INV |
+			   RADEON_CRTC_GUI_TRIG_VLINE_STALL));
     }
 
     if (crtc == 0)
diff --git a/src/radeon_reg.h b/src/radeon_reg.h
index 8da513b..1db7c67 100644
--- a/src/radeon_reg.h
+++ b/src/radeon_reg.h
@@ -445,8 +445,9 @@
 #       define RADEON_CRTC_V_CUTOFF_ACTIVE_EN (1<<5)
 #define RADEON_CRTC_GUI_TRIG_VLINE          0x0218
 #       define RADEON_CRTC_GUI_TRIG_VLINE_START_SHIFT  0
-#       define RADEON_CRTC_GUI_TRIG_VLINE_END_SHIFT    16
 #       define RADEON_CRTC_GUI_TRIG_VLINE_INV          (1 << 15)
+#       define RADEON_CRTC_GUI_TRIG_VLINE_END_SHIFT    16
+#       define RADEON_CRTC_GUI_TRIG_VLINE_STALL        (1 << 30)
 #define RADEON_CRTC_H_SYNC_STRT_WID         0x0204
 #       define RADEON_CRTC_H_SYNC_STRT_PIX        (0x07  <<  0)
 #       define RADEON_CRTC_H_SYNC_STRT_CHAR       (0x3ff <<  3)
commit 27bd9fc9b2c0eeff488c1f26f1355a7fa3655520
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sat Jul 18 22:14:27 2009 +0200

    Enable vsync for DRI2 region copies.

diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 4770ba3..08da996 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -228,6 +228,8 @@ radeon_dri2_copy_region(DrawablePtr drawable,
     PixmapPtr dst_pixmap;
     RegionPtr copy_clip;
     GCPtr gc;
+    RADEONInfoPtr info = RADEONPTR(pScrn);
+    Bool vsync;
 
     src_pixmap = src_private->pixmap;
     dst_pixmap = dst_private->pixmap;
@@ -242,8 +244,15 @@ radeon_dri2_copy_region(DrawablePtr drawable,
     REGION_COPY(pScreen, copy_clip, region);
     (*gc->funcs->ChangeClip) (gc, CT_REGION, copy_clip, 0);
     ValidateGC(&dst_pixmap->drawable, gc);
+
+    vsync = info->accel_state->vsync;
+    info->accel_state->vsync = TRUE;
+
     (*gc->ops->CopyArea)(&src_pixmap->drawable, &dst_pixmap->drawable, gc,
                          0, 0, drawable->width, drawable->height, 0, 0);
+
+    info->accel_state->vsync = vsync;
+
     FreeScratchGC(gc);
     radeon_cs_flush_indirect(pScrn);
 }


More information about the xorg-commit mailing list