summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorGareth Hughes <gareth@users.sourceforge.net>2001-02-28 14:11:05 +0000
committerGareth Hughes <gareth@users.sourceforge.net>2001-02-28 14:11:05 +0000
commit9a4033a02ac74e384596190adfcc0e938c19865b (patch)
tree06b6e764661c9167f5fcb8db7d6196013d785d9f /linux
parent7b5e87d91d062cceb1e4e54b2e144c3c87375234 (diff)
Make the hardware bug workaround configurable. That way, people with newer
revs of the chipset can avoid the copy when it's not needed.
Diffstat (limited to 'linux')
-rw-r--r--linux/r128_drv.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/linux/r128_drv.h b/linux/r128_drv.h
index dfefb4e0..9f53746f 100644
--- a/linux/r128_drv.h
+++ b/linux/r128_drv.h
@@ -471,12 +471,19 @@ do { \
tail_mask = dev_priv->ring.tail_mask; \
} while (0)
+/* You can set this to zero if you want. If the card locks up, you'll
+ * need to keep this set. It works around a bug in early revs of the
+ * Rage 128 chipset, where the CCE would read 32 dwords past the end of
+ * the ring buffer before wrapping around.
+ */
+#define R128_BROKEN_CCE 1
+
#define ADVANCE_RING() do { \
if ( R128_VERBOSE ) { \
DRM_INFO( "ADVANCE_RING() tail=0x%06x wr=0x%06x\n", \
write, dev_priv->ring.tail ); \
} \
- if ( write < 32 ) { \
+ if ( R128_BROKEN_CCE && write < 32 ) { \
memcpy( dev_priv->ring.end, \
dev_priv->ring.start, \
write * sizeof(u32) ); \