xserver/hw/kdrive/ati ati.h, 1.12, 1.13 ati_dma.c, 1.4, 1.5 ati_dri.c, 1.9, 1.10

Eric Anholt xserver-commit at pdx.freedesktop.org
Sun Sep 12 13:31:41 PDT 2004


Committed by: anholt

Update of /cvs/xserver/xserver/hw/kdrive/ati
In directory gabe:/tmp/cvs-serv22124/hw/kdrive/ati

Modified Files:
	ati.h ati_dma.c ati_dri.c 
Log Message:
Reset the CCE/CP on engine reset, and make the ATIDRIDMA functions take
a more useful argument.


Index: ati.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- ati.h	11 Sep 2004 09:28:19 -0000	1.12
+++ ati.h	12 Sep 2004 20:31:39 -0000	1.13
@@ -371,10 +371,13 @@
 ATIDRICloseScreen(ScreenPtr pScreen);
 
 void
-ATIDRIDMAStart(ScreenPtr pScreen);
+ATIDRIDMAStart(ATIScreenInfo *atis);
 
 void
-ATIDRIDMAStop(ScreenPtr pScreen);
+ATIDRIDMAStop(ATIScreenInfo *atis);
+
+void
+ATIDRIDMAReset(ATIScreenInfo *atis);
 
 void
 ATIDRIDispatchIndirect(ATIScreenInfo *atis, Bool discard);

Index: ati_dma.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati_dma.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- ati_dma.c	12 Sep 2004 19:52:51 -0000	1.4
+++ ati_dma.c	12 Sep 2004 20:31:39 -0000	1.5
@@ -222,6 +222,12 @@
 		OUTPLL(mmio, R128_REG_MCLK_CNTL, mclkcntl);
 		MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_INDEX, clockcntlindex);
 	}
+#ifdef USE_DRI
+	if (atis->using_dri) {
+		ATIDRIDMAReset(atis);
+		ATIDRIDMAStart(atis);
+	}
+#endif
 }
 
 static void
@@ -937,7 +943,7 @@
 
 #ifdef USE_DRI
 	if (atis->using_dri)
-		ATIDRIDMAStart(pScreen);
+		ATIDRIDMAStart(atis);
 #endif /* USE_DRI */
 
 	if (!atis->using_dri) {
@@ -981,7 +987,7 @@
 
 #ifdef USE_DRI
 	if (atis->using_dri)
-		ATIDRIDMAStop(pScreen);
+		ATIDRIDMAStop(atis);
 #endif /* USE_DRI */
 
 	if (atis->using_dma)

Index: ati_dri.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati_dri.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- ati_dri.c	12 Sep 2004 20:02:10 -0000	1.9
+++ ati_dri.c	12 Sep 2004 20:31:39 -0000	1.10
@@ -1033,11 +1033,9 @@
 }
 
 void
-ATIDRIDMAStart(ScreenPtr pScreen)
+ATIDRIDMAStart(ATIScreenInfo *atis)
 {
-	KdScreenPriv(pScreen);
-	ATICardInfo(pScreenPriv);
-	ATIScreenInfo(pScreenPriv);
+	ATICardInfo *atic = atis->atic;
 	int ret;
 
 	if (atic->is_radeon)
@@ -1055,11 +1053,9 @@
  * same for both R128 and Radeon, so we can just use the name of one of them.
  */
 void
-ATIDRIDMAStop(ScreenPtr pScreen)
+ATIDRIDMAStop(ATIScreenInfo *atis)
 {
-	KdScreenPriv(pScreen);
-	ATICardInfo(pScreenPriv);
-	ATIScreenInfo(pScreenPriv);
+	ATICardInfo *atic = atis->atic;
 	drmRadeonCPStop stop;
 	int ret;
 
@@ -1078,6 +1074,21 @@
 	atis->dma_started = FALSE;
 }
 
+void
+ATIDRIDMAReset(ATIScreenInfo *atis)
+{
+	ATICardInfo *atic = atis->atic;
+	int ret;
+
+	ret = drmCommandNone(atic->drmFd, atic->is_radeon ?
+	    DRM_RADEON_CP_RESET : DRM_R128_CCE_RESET);
+
+	if (ret != 0)
+		FatalError("Failed to reset CCE/CP\n");
+
+	atis->dma_started = FALSE;
+}
+
 /* The R128 and Radeon Indirect ioctls differ only in the ioctl number */
 void
 ATIDRIDispatchIndirect(ATIScreenInfo *atis, Bool discard)



More information about the xserver-commit mailing list