rpms/xorg-x11-drv-ati/F-10 radeon-modeset.patch, 1.46, 1.47 xorg-x11-drv-ati.spec, 1.158, 1.159

Dave Airlie airlied at fedoraproject.org
Wed Nov 26 02:04:19 UTC 2008


Author: airlied

Update of /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv27755

Modified Files:
	radeon-modeset.patch xorg-x11-drv-ati.spec 
Log Message:
- radeon/kms: use a big hammer on rs4xx/rs6xx


radeon-modeset.patch:

Index: radeon-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10/radeon-modeset.patch,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- radeon-modeset.patch	25 Nov 2008 06:28:07 -0000	1.46
+++ radeon-modeset.patch	26 Nov 2008 02:04:18 -0000	1.47
@@ -1,3 +1,11 @@
+commit 969fb5d72094a2a7b6a2ad40a80a8ed93d6c8193
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Nov 26 12:52:24 2008 +1100
+
+    radeon: brutal attempt to fix RS4xx and RS6xx by flushing more often
+    
+    this might take more CPU but hopefully leads to stabler GPU
+
 commit bc3caa80847c6652e6e6056e9ab32576d5ef179c
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Tue Nov 25 17:20:44 2008 +1100
@@ -7209,10 +7217,21 @@
      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting EXA maxPitchBytes\n");
  
 diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
-index 97199ae..052892b 100644
+index 97199ae..0bc0c41 100644
 --- a/src/radeon_exa_render.c
 +++ b/src/radeon_exa_render.c
-@@ -355,12 +355,14 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -54,6 +54,10 @@
+ #define ONLY_ONCE
+ #endif
+ 
++#define VTX_COUNT_MASK 6
++#define VTX_COUNT 4
++
++
+ /* Only include the following (generic) bits once. */
+ #ifdef ONLY_ONCE
+ 
+@@ -355,12 +359,14 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      Bool repeat = pPict->repeat &&
  	!(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
      int i;
@@ -7229,7 +7248,7 @@
  	RADEON_FALLBACK(("Bad texture offset 0x%x\n", (int)txoffset));
      if ((txpitch & 0x1f) != 0)
  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
-@@ -402,23 +404,43 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -402,23 +408,43 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      if (repeat)
        txfilter |= RADEON_CLAMP_S_WRAP | RADEON_CLAMP_T_WRAP;
  
@@ -7276,7 +7295,7 @@
      }
      FINISH_ACCEL();
  
-@@ -523,10 +545,52 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
+@@ -523,10 +549,52 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
      uint32_t dst_format, dst_offset, dst_pitch, colorpitch;
      uint32_t pp_cntl, blendcntl, cblend, ablend;
      int pixel_shift;
@@ -7329,7 +7348,7 @@
      if (!info->accel_state->XInited3D)
  	RADEONInit3DEngine(pScrn);
  
-@@ -540,15 +604,13 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
+@@ -540,15 +608,13 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
  
      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
  
@@ -7347,7 +7366,7 @@
  	RADEON_FALLBACK(("Bad destination offset 0x%x\n", (int)dst_offset));
      if (((dst_pitch >> pixel_shift) & 0x7) != 0)
  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
-@@ -569,11 +631,19 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
+@@ -569,11 +635,19 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
      }
  
      RADEON_SWITCH_TO_3D();
@@ -7370,7 +7389,7 @@
      OUT_ACCEL_REG(RADEON_RB3D_COLORPITCH, colorpitch);
  
      /* IN operator: Multiply src by mask components or mask alpha.
-@@ -669,13 +739,17 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -669,13 +743,17 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      Bool repeat = pPict->repeat &&
  	!(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
      int i;
@@ -7391,7 +7410,7 @@
      if ((txpitch & 0x1f) != 0)
  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
  
-@@ -718,7 +792,8 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -718,7 +796,8 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      if (repeat)
        txfilter |= R200_CLAMP_S_WRAP | R200_CLAMP_T_WRAP;
  
@@ -7401,7 +7420,7 @@
      if (unit == 0) {
  	OUT_ACCEL_REG(R200_PP_TXFILTER_0, txfilter);
  	OUT_ACCEL_REG(R200_PP_TXFORMAT_0, txformat);
-@@ -726,7 +801,15 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -726,7 +805,15 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
  	OUT_ACCEL_REG(R200_PP_TXSIZE_0, (pPix->drawable.width - 1) |
  		      ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
  	OUT_ACCEL_REG(R200_PP_TXPITCH_0, txpitch - 32);
@@ -7418,7 +7437,7 @@
      } else {
  	OUT_ACCEL_REG(R200_PP_TXFILTER_1, txfilter);
  	OUT_ACCEL_REG(R200_PP_TXFORMAT_1, txformat);
-@@ -734,7 +817,17 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -734,7 +821,17 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
  	OUT_ACCEL_REG(R200_PP_TXSIZE_1, (pPix->drawable.width - 1) |
  		      ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
  	OUT_ACCEL_REG(R200_PP_TXPITCH_1, txpitch - 32);
@@ -7437,7 +7456,7 @@
      }
      FINISH_ACCEL();
  
-@@ -823,10 +916,53 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -823,10 +920,53 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
      uint32_t dst_format, dst_offset, dst_pitch;
      uint32_t pp_cntl, blendcntl, cblend, ablend, colorpitch;
      int pixel_shift;
@@ -7491,7 +7510,7 @@
      if (!info->accel_state->XInited3D)
  	RADEONInit3DEngine(pScrn);
  
-@@ -840,13 +976,13 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -840,13 +980,13 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
  
@@ -7507,7 +7526,7 @@
  	RADEON_FALLBACK(("Bad destination offset 0x%x\n", (int)dst_offset));
      if (((dst_pitch >> pixel_shift) & 0x7) != 0)
  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
-@@ -868,11 +1004,22 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -868,11 +1008,22 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      RADEON_SWITCH_TO_3D();
  
@@ -7532,7 +7551,7 @@
  
      OUT_ACCEL_REG(R200_SE_VTX_FMT_0, R200_VTX_XY);
      if (pMask)
-@@ -941,6 +1088,10 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+@@ -941,6 +1092,10 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
  				      int unit,
  				      Bool is_r500)
  {
@@ -7543,7 +7562,7 @@
      int w = pPict->pDrawable->width;
      int h = pPict->pDrawable->height;
      int i;
-@@ -966,8 +1117,17 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+@@ -966,8 +1121,17 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
  	RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
  			 (int)pPict->format));
  
@@ -7562,7 +7581,7 @@
  
      if (pPict->filter != PictFilterNearest &&
  	pPict->filter != PictFilterBilinear)
-@@ -999,15 +1159,19 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -999,15 +1163,19 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
      int w = pPict->pDrawable->width;
      int h = pPict->pDrawable->height;
      int i, pixel_shift;
@@ -7585,7 +7604,7 @@
      if ((txpitch & 0x1f) != 0)
  	RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
  
-@@ -1068,13 +1232,26 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+@@ -1068,13 +1236,26 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
  	RADEON_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
      }
  
@@ -7614,7 +7633,7 @@
      if (!pPict->repeat)
  	OUT_ACCEL_REG(R300_TX_BORDER_COLOR_0 + (unit * 4), 0);
      FINISH_ACCEL();
-@@ -1173,6 +1350,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+@@ -1173,6 +1354,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
      return TRUE;
  
  }
@@ -7622,7 +7641,7 @@
  #endif /* ONLY_ONCE */
  
  static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
-@@ -1184,10 +1362,51 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1184,10 +1366,51 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
      uint32_t txenable, colorpitch;
      uint32_t blendcntl;
      int pixel_shift;
@@ -7675,7 +7694,7 @@
      if (!info->accel_state->XInited3D)
  	RADEONInit3DEngine(pScrn);
  
-@@ -1201,7 +1420,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1201,7 +1424,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      pixel_shift = pDst->drawable.bitsPerPixel >> 4;
  
@@ -7684,7 +7703,7 @@
      dst_pitch = exaGetPixmapPitch(pDst);
      colorpitch = dst_pitch >> pixel_shift;
  
-@@ -1210,7 +1429,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1210,7 +1433,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  
      colorpitch |= dst_format;
  
@@ -7693,20 +7712,19 @@
  	RADEON_FALLBACK(("Bad destination offset 0x%x\n", (int)dst_offset));
      if (((dst_pitch >> pixel_shift) & 0x7) != 0)
  	RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
-@@ -1218,6 +1437,12 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1218,6 +1441,11 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
      if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE))
  	return FALSE;
  
 +    RADEON_SWITCH_TO_3D();
-+    BEGIN_ACCEL(2);
++    BEGIN_ACCEL(1);
 +    OUT_ACCEL_REG(R300_TX_INVALTAGS, 0x0);
-+    OUT_ACCEL_REG(R300_VAP_PVS_STATE_FLUSH_REG, 0);
 +    FINISH_ACCEL();
 +
      if (!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0))
  	return FALSE;
      txenable = R300_TEX_0_ENABLE;
-@@ -1230,7 +1455,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1230,7 +1458,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  	info->accel_state->is_transform[1] = FALSE;
      }
  
@@ -7714,7 +7732,7 @@
  
      /* setup the VAP */
      if (info->accel_state->has_tcl) {
-@@ -1829,9 +2053,18 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+@@ -1829,9 +2056,18 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
  	FINISH_ACCEL();
      }
  
@@ -7735,7 +7753,45 @@
      OUT_ACCEL_REG(R300_RB3D_COLORPITCH0, colorpitch);
  
      blendcntl = RADEONGetBlendCntl(op, pMaskPicture, pDstPicture->format);
-@@ -2037,9 +2270,10 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst,
+@@ -1839,12 +2075,22 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+ 
+     FINISH_ACCEL();
+ 
++    if (IS_R300_3D || IS_R500_3D) {
++	uint32_t vtx_count;
++	
++	if (info->accel_state->has_mask)
++	    vtx_count = VTX_COUNT_MASK;
++	else
++	    vtx_count = VTX_COUNT;
++
++	BEGIN_ACCEL(1);
++	OUT_ACCEL_REG(R300_VAP_VTX_SIZE, vtx_count);
++	FINISH_ACCEL();
++    }
++
+     return TRUE;
+ }
+ 
+-#define VTX_COUNT_MASK 6
+-#define VTX_COUNT 4
+-
+ #ifdef ACCEL_CP
+ 
+ #define VTX_OUT_MASK(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY)	\
+@@ -1953,11 +2199,6 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst,
+     else
+ 	vtx_count = VTX_COUNT;
+ 
+-    if (IS_R300_3D || IS_R500_3D) {
+-	BEGIN_ACCEL(1);
+-	OUT_ACCEL_REG(R300_VAP_VTX_SIZE, vtx_count);
+-	FINISH_ACCEL();
+-    }
+ 
+ #ifdef ACCEL_CP
+     if (info->ChipFamily < CHIP_FAMILY_R200) {
+@@ -2037,9 +2278,10 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst,
  		xFixedToFloat(srcTopRight.x) / info->accel_state->texW[0],     xFixedToFloat(srcTopRight.y) / info->accel_state->texH[0]);
      }
  
@@ -7747,16 +7803,30 @@
  
  #ifdef ACCEL_CP
      ADVANCE_RING();
-@@ -2121,7 +2355,8 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
+@@ -2121,14 +2363,22 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
      ENTER_DRAW(0);
  
      if (IS_R300_3D || IS_R500_3D) {
 -	BEGIN_ACCEL(2);
 +	BEGIN_ACCEL(3);
-+	OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xaaaa);
  	OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_RB3D_DC_FLUSH_ALL);
++	OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xaaaa);
      } else
  	BEGIN_ACCEL(1);
+     OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN);
+     FINISH_ACCEL();
+ 
+     LEAVE_DRAW(0);
++
++    /* workaround hang on RS4xx and RS6xx chips */
++    if(info->ChipFamily == CHIP_FAMILY_RS400 ||
++       info->ChipFamily == CHIP_FAMILY_RS480 ||
++       info->ChipFamily == CHIP_FAMILY_RS600 ||
++       info->ChipFamily == CHIP_FAMILY_RS690)
++	RADEONCPFlushIndirect(pScrn, 1);
+ }
+ 
+ #undef ONLY_ONCE
 diff --git a/src/radeon_legacy_memory.c b/src/radeon_legacy_memory.c
 index 2a9ee94..0423571 100644
 --- a/src/radeon_legacy_memory.c


Index: xorg-x11-drv-ati.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-ati/F-10/xorg-x11-drv-ati.spec,v
retrieving revision 1.158
retrieving revision 1.159
diff -u -r1.158 -r1.159
--- xorg-x11-drv-ati.spec	25 Nov 2008 06:28:07 -0000	1.158
+++ xorg-x11-drv-ati.spec	26 Nov 2008 02:04:18 -0000	1.159
@@ -5,7 +5,7 @@
 Summary:   Xorg X11 ati video driver
 Name:      xorg-x11-drv-ati
 Version:   6.9.0
-Release:   57%{?dist}
+Release:   58%{?dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X Hardware Support
@@ -82,6 +82,9 @@
 %{_mandir}/man4/radeon.4*
 
 %changelog
+* Wed Nov 26 2008 Dave Airlie <airlied at redhat.com> 6.9.0-58
+- radeon/kms: use a big hammer on rs4xx/rs6xx
+
 * Tue Nov 25 2008 Dave Airlie <airlied at redhat.com> 6.9.0-57
 - radeon/kms: hopefully fix some rs690 stability issues
 




More information about the fedora-extras-commits mailing list