summaryrefslogtreecommitdiff
path: root/shared-core
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2007-04-17 08:58:23 +0200
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2007-04-17 08:58:23 +0200
commite805ca959dbef85ac7b508639a64832a7995703a (patch)
tree46bed307876a0ad415974a44b7b27c8b1f5d04eb /shared-core
parente91ceff6c98661bfae5db008e024b71a8a0f5129 (diff)
via: Make sure we flush write-combining using a follow-up read.
Diffstat (limited to 'shared-core')
-rw-r--r--shared-core/via_dma.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/shared-core/via_dma.c b/shared-core/via_dma.c
index 8c5a5c64..c73634e4 100644
--- a/shared-core/via_dma.c
+++ b/shared-core/via_dma.c
@@ -430,8 +430,10 @@ static int via_hook_segment(drm_via_private_t *dev_priv,
paused = 0;
via_flush_write_combine();
- *dev_priv->last_pause_ptr = pause_addr_lo;
+ (void) *(volatile uint32_t *)(via_get_dma(dev_priv) -1);
+ *paused_at = pause_addr_lo;
via_flush_write_combine();
+ (void) *paused_at;
reader = *(dev_priv->hw_addr_ptr);
ptr = ((volatile char *)paused_at - dev_priv->dma_ptr) +
dev_priv->dma_offset + (uint32_t) dev_priv->agpAddr + 4;
@@ -536,7 +538,7 @@ static void via_cmdbuf_start(drm_via_private_t * dev_priv)
&pause_addr_hi, & pause_addr_lo, 1) - 1;
via_flush_write_combine();
- while(! *dev_priv->last_pause_ptr);
+ (void) *(volatile uint32_t *)dev_priv->last_pause_ptr;
VIA_WRITE(VIA_REG_TRANSET, (HC_ParaType_PreCR << 16));
VIA_WRITE(VIA_REG_TRANSPACE, command);