From bbfe18e3bf7b45543c9f59f7363c1ed5b6bca719 Mon Sep 17 00:00:00 2001
From: Thomas Hellstrom <unichrome@shipmail.org>
Date: Tue, 12 Oct 2004 18:46:26 +0000
Subject: Via updates. Fixed unlikely but possible uint32_t overflow in
 ring-buffer     code. bumped patchlevel.

---
 shared-core/via_dma.c | 9 ++++-----
 shared-core/via_drv.h | 4 ++--
 2 files changed, 6 insertions(+), 7 deletions(-)

(limited to 'shared-core')

diff --git a/shared-core/via_dma.c b/shared-core/via_dma.c
index 182964f6..574858b9 100644
--- a/shared-core/via_dma.c
+++ b/shared-core/via_dma.c
@@ -80,7 +80,7 @@ via_cmdbuf_wait(drm_via_private_t * dev_priv, unsigned int size)
 	volatile uint32_t *hw_addr_ptr;
 	uint32_t count;
 	hw_addr_ptr = dev_priv->hw_addr_ptr;
-	cur_addr = agp_base + dev_priv->dma_low;
+	cur_addr = dev_priv->dma_low;
 	/* At high resolution (i.e. 1280x1024) and with high workload within
 	 * a short commmand stream, the following test will fail. It may be
 	 * that the engine is too busy to update hw_addr. Therefore, add
@@ -89,11 +89,10 @@ via_cmdbuf_wait(drm_via_private_t * dev_priv, unsigned int size)
 	next_addr = cur_addr + size + 64 * 1024;
 	count = 1000000;	/* How long is this? */
 	do {
-		hw_addr = *hw_addr_ptr;
+		hw_addr = *hw_addr_ptr - agp_base;
 		if (count-- == 0) {
-			DRM_ERROR
-			    ("via_cmdbuf_wait timed out hw %x dma_low %x\n",
-			     hw_addr, dev_priv->dma_low);
+			DRM_ERROR("via_cmdbuf_wait timed out hw %x cur_addr %x next_addr %x\n",
+				  hw_addr, cur_addr, next_addr);
 			return -1;
 		}
 	} while ((cur_addr < hw_addr) && (next_addr >= hw_addr));
diff --git a/shared-core/via_drv.h b/shared-core/via_drv.h
index 28556853..3d3f093f 100644
--- a/shared-core/via_drv.h
+++ b/shared-core/via_drv.h
@@ -28,11 +28,11 @@
 
 #define DRIVER_NAME		"via"
 #define DRIVER_DESC		"VIA Unichrome"
-#define DRIVER_DATE		"20041010"
+#define DRIVER_DATE		"20041012"
 
 #define DRIVER_MAJOR		2
 #define DRIVER_MINOR		0
-#define DRIVER_PATCHLEVEL	0
+#define DRIVER_PATCHLEVEL	1
 
 typedef struct drm_via_ring_buffer {
 	drm_map_t map;
-- 
cgit v1.2.3