[kernel] r18428 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Wed Dec 28 21:34:37 UTC 2011


Author: benh
Date: Wed Dec 28 21:34:35 2011
New Revision: 18428

Log:
drm/radeon: flush read cache for gtt with fence on r6xx and newer GPU

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-flush-read-cache-for-gtt-with-fence-on-r6.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/base

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	Wed Dec 28 20:43:55 2011	(r18427)
+++ dists/sid/linux-2.6/debian/changelog	Wed Dec 28 21:34:35 2011	(r18428)
@@ -3,6 +3,8 @@
   [ Ben Hutchings ]
   * snapshot: Implement compat_ioctl (Closes: #502816)
   * iwlwifi: allow to switch to HT40 if not associated (Closes: #653423)
+  * drm/radeon: flush read cache for gtt with fence on r6xx and newer GPU
+    (Closes: #646376)
 
   [ Jonathan Nieder ]
   * prerm: Print an error message when aborting removal of the running

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-flush-read-cache-for-gtt-with-fence-on-r6.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/drm-radeon-flush-read-cache-for-gtt-with-fence-on-r6.patch	Wed Dec 28 21:34:35 2011	(r18428)
@@ -0,0 +1,96 @@
+From: Jerome Glisse <jglisse at redhat.com>
+Date: Wed, 26 Oct 2011 11:41:22 -0400
+Subject: [PATCH] drm/radeon: flush read cache for gtt with fence on r6xx and
+ newer GPU V3
+
+commit 77b1bad423599c9841ea282a82172f039bb2ff92 upstream.
+
+Cayman seems to be particularly sensitive to read cache returning
+old data after bind/unbind to GTT. Flush read cache for GTT range
+with each fences for all new hw. Should fix several rendering glitches.
+Like
+
+V2 flush whole address space
+V3 also flush shader read cache
+
+https://bugs.freedesktop.org/show_bug.cgi?id=40221
+https://bugs.freedesktop.org/show_bug.cgi?id=38022
+https://bugzilla.redhat.com/show_bug.cgi?id=738790
+
+Signed-off-by: Jerome Glisse <jglisse at redhat.com>
+Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
+Signed-off-by: Dave Airlie <airlied at redhat.com>
+[bwh: For 3.1, patch ring size numbers in {r600,evergreen}_blit_prepare_copy()
+ instead of {r600,evergreen}_blit_init().]
+---
+ drivers/gpu/drm/radeon/evergreen_blit_kms.c |    4 ++--
+ drivers/gpu/drm/radeon/r600.c               |   16 ++++++++++++++++
+ drivers/gpu/drm/radeon/r600_blit_kms.c      |    4 ++--
+ 3 files changed, 20 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
+index 551e76f..914e5af 100644
+--- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c
++++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
+@@ -779,9 +779,9 @@ int evergreen_blit_prepare_copy(struct radeon_device *rdev,
+ 	ring_size = num_loops * dwords_per_loop;
+ 	/* set default  + shaders */
+ 	ring_size += 55; /* shaders + def state */
+-	ring_size += 10; /* fence emit for VB IB */
++	ring_size += 16; /* fence emit for VB IB */
+ 	ring_size += 5; /* done copy */
+-	ring_size += 10; /* fence emit for done copy */
++	ring_size += 16; /* fence emit for done copy */
+ 	r = radeon_ring_lock(rdev, ring_size);
+ 	if (r)
+ 		return r;
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index 12470b0..1f007ad 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -2331,6 +2331,14 @@ void r600_fence_ring_emit(struct radeon_device *rdev,
+ 	if (rdev->wb.use_event) {
+ 		u64 addr = rdev->wb.gpu_addr + R600_WB_EVENT_OFFSET +
+ 			(u64)(rdev->fence_drv.scratch_reg - rdev->scratch.reg_base);
++		/* flush read cache over gart */
++		radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_SYNC, 3));
++		radeon_ring_write(rdev, PACKET3_TC_ACTION_ENA |
++					PACKET3_VC_ACTION_ENA |
++					PACKET3_SH_ACTION_ENA);
++		radeon_ring_write(rdev, 0xFFFFFFFF);
++		radeon_ring_write(rdev, 0);
++		radeon_ring_write(rdev, 10); /* poll interval */
+ 		/* EVENT_WRITE_EOP - flush caches, send int */
+ 		radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE_EOP, 4));
+ 		radeon_ring_write(rdev, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5));
+@@ -2339,6 +2347,14 @@ void r600_fence_ring_emit(struct radeon_device *rdev,
+ 		radeon_ring_write(rdev, fence->seq);
+ 		radeon_ring_write(rdev, 0);
+ 	} else {
++		/* flush read cache over gart */
++		radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_SYNC, 3));
++		radeon_ring_write(rdev, PACKET3_TC_ACTION_ENA |
++					PACKET3_VC_ACTION_ENA |
++					PACKET3_SH_ACTION_ENA);
++		radeon_ring_write(rdev, 0xFFFFFFFF);
++		radeon_ring_write(rdev, 0);
++		radeon_ring_write(rdev, 10); /* poll interval */
+ 		radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
+ 		radeon_ring_write(rdev, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0));
+ 		/* wait for 3D idle clean */
+diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c
+index ff36532..e09d281 100644
+--- a/drivers/gpu/drm/radeon/r600_blit_kms.c
++++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
+@@ -632,9 +632,9 @@ int r600_blit_prepare_copy(struct radeon_device *rdev,
+ 	ring_size = num_loops * dwords_per_loop;
+ 	/* set default  + shaders */
+ 	ring_size += 40; /* shaders + def state */
+-	ring_size += 10; /* fence emit for VB IB */
++	ring_size += 16; /* fence emit for VB IB */
+ 	ring_size += 5; /* done copy */
+-	ring_size += 10; /* fence emit for done copy */
++	ring_size += 16; /* fence emit for done copy */
+ 	r = radeon_ring_lock(rdev, ring_size);
+ 	if (r)
+ 		return r;

Modified: dists/sid/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/base	Wed Dec 28 20:43:55 2011	(r18427)
+++ dists/sid/linux-2.6/debian/patches/series/base	Wed Dec 28 21:34:35 2011	(r18428)
@@ -88,3 +88,4 @@
 + bugfix/all/cciss-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inte.patch
 + bugfix/all/snapshot-Implement-compat_ioctl.patch
 + bugfix/all/iwlwifi-allow-to-switch-to-ht40-if-not-associated.patch
++ bugfix/all/drm-radeon-flush-read-cache-for-gtt-with-fence-on-r6.patch



More information about the Kernel-svn-changes mailing list