Posting my latest DRM and Mesa patches in case they should prove useful to 
anyone else.  They are to head as of early Saturday.

I moved the CP idle outside the while loop in radeon_state.c.  I think it may 
apply to the R300 as well as there is an "if R300 idle command" in the 
Xserver RADEONEnterServer function.

I have not tried removing the DRM changes since adding the Mesa change.  Just 
sticking with something that doesn't lockup.


diff -ru drm120205/shared-core/radeon_state.c 
drmbld/shared-core/radeon_state.c
--- drm120205/shared-core/radeon_state.c        Mon Nov 28 22:05:43 2005
+++ drmbld/shared-core/radeon_state.c   Sat Dec  3 13:00:57 2005
@@ -2388,7 +2388,7 @@
         */
        BEGIN_RING(2);

-       RADEON_WAIT_UNTIL_3D_IDLE();
+       RADEON_WAIT_UNTIL_IDLE();

        ADVANCE_RING();

@@ -2737,6 +2737,7 @@
        drm_radeon_cmd_header_t header;
        int orig_nbox, orig_bufsz;
        char *kbuf = NULL;
+       RING_LOCALS;

        LOCK_TEST_WITH_RETURN(dev, filp);

@@ -2775,7 +2776,17 @@
        }

        orig_nbox = cmdbuf.nbox;
-
+
+       /* Wait for the engine to idle before the indirect buffer
+        * is processed.
+        */
+
+       BEGIN_RING(2);
+
+       RADEON_WAIT_UNTIL_IDLE();
+
+       ADVANCE_RING();
+
        if(dev_priv->microcode_version == UCODE_R300) {
                int temp;
                temp=r300_do_cp_cmdbuf(dev, filp, filp_priv, &cmdbuf);
@@ -2785,7 +2796,7 @@

                return temp;
        }
-
+
        /* microcode_version != r300 */
        while (cmdbuf.bufsz >= sizeof(header)) {
                header.i = *(int *)cmdbuf.buf;
diff -ru mesa120205/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c 
xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c
--- mesa120205/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c Fri Dec  2 
00:56:29 2005
+++ xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_state_init.c       
Sat Dec  3 12:09:32 2005
@@ -253,8 +253,8 @@
    ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 );
    ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 );
    if (rmesa->r200Screen->drmSupportsFragShader) {
-      if (rmesa->r200Screen->chip_family == CHIP_FAMILY_R200) {
-      /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang 
workaround */
+      if (rmesa->r200Screen->chip_flags & R200_CHIPSET_TEX01_BROKEN) {
+      /* make sure texture units 0/1 are emitted pair-wise for t0 hang 
workaround */
         ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 
0 );
         ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 
1 );
         ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
@@ -273,7 +273,7 @@
       ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
    }
    else {
-      if (rmesa->r200Screen->chip_family == CHIP_FAMILY_R200) {
+      if (rmesa->r200Screen->chip_flags & R200_CHIPSET_TEX01_BROKEN) {
         ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 
0 );
         ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 
1 );
         ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
diff -ru mesa120205/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c 
xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c
--- mesa120205/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c   Fri Dec  2 
00:56:29 2005
+++ xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/r200/r200_texstate.c Sat 
Dec  3 12:13:52 2005
@@ -1678,11 +1678,10 @@
       r200ChooseVertexState( ctx );


-   if (rmesa->r200Screen->chip_family == CHIP_FAMILY_R200) {
+   if (rmesa->r200Screen->chip_flags & R200_CHIPSET_TEX01_BROKEN) {

       /*
-       * T0 hang workaround -------------
-       * not needed for r200 derivatives
+       * T0 hang workaround
         */
       if ((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & R200_TEX_ENABLE_MASK) == 
R200_TEX_0_ENABLE &&
         (rmesa->hw.tex[0].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK) > 
R200_MIN_FILTER_LINEAR) {
diff -ru mesa120205/Mesa/src/mesa/drivers/dri/radeon/radeon_chipset.h 
xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_chipset.h
--- mesa120205/Mesa/src/mesa/drivers/dri/radeon/radeon_chipset.h        Fri 
Dec  2 21:21:24 2005
+++ xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_chipset.h      
Sat Dec  3 19:47:56 2005
@@ -133,5 +133,6 @@
 #define RADEON_CHIPSET_TCL             (1 << 2)        /* tcl support - any 
radeon */
 #define RADEON_CHIPSET_BROKEN_STENCIL  (1 << 3)        /* r100 stencil bug */
 #define R200_CHIPSET_YCBCR_BROKEN      (1 << 4)        /* r200 ycbcr bug */
+#define R200_CHIPSET_TEX01_BROKEN      (1 << 5)        /* r200 texture pair 
bug */

 #endif /* _RADEON_CHIPSET_H */
diff -ru mesa120205/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c 
xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c
--- mesa120205/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c Fri Dec  2 
21:21:24 2005
+++ xorgcursrc/xc/extras/Mesa/src/mesa/drivers/dri/radeon/radeon_screen.c       
Sat Dec  3 19:25:34 2005
@@ -481,7 +481,7 @@
    case PCI_CHIP_R200_QN:
    case PCI_CHIP_R200_QO:
       screen->chip_family = CHIP_FAMILY_R200;
-      screen->chip_flags = RADEON_CHIPSET_TCL;
+      screen->chip_flags = RADEON_CHIPSET_TCL | R200_CHIPSET_TEX01_BROKEN;
       break;

    case PCI_CHIP_RV250_Id:
@@ -493,7 +493,8 @@
    case PCI_CHIP_RV250_Lf:
    case PCI_CHIP_RV250_Lg:
       screen->chip_family = CHIP_FAMILY_RV250;
-      screen->chip_flags = R200_CHIPSET_YCBCR_BROKEN | RADEON_CHIPSET_TCL;
+      screen->chip_flags = RADEON_CHIPSET_TCL | R200_CHIPSET_YCBCR_BROKEN |
+                           R200_CHIPSET_TEX01_BROKEN;
       break;

    case PCI_CHIP_RV280_5960:


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to