From 3d69766ea6df4ab1837f5270beafb13c70ec61e6 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Thu, 10 Oct 2002 08:25:40 +0000 Subject: Jonny Strom's mga_dma.c patch --- shared-core/mga_dma.c | 11 ++++++++++- shared/mga_dma.c | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/shared-core/mga_dma.c b/shared-core/mga_dma.c index a0ad70e9d..3c84de63a 100644 --- a/shared-core/mga_dma.c +++ b/shared-core/mga_dma.c @@ -157,9 +157,18 @@ void mga_do_dma_flush( drm_mga_private_t *dev_priv ) { drm_mga_primary_buffer_t *primary = &dev_priv->prim; u32 head, tail; - DMA_LOCALS; + u32 status = 0; + int i; + DMA_LOCALS; DRM_DEBUG( "\n" ); + /* We need to wait so that we can do an safe flush */ + for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { + status = MGA_READ( MGA_STATUS ) & MGA_ENGINE_IDLE_MASK; + if ( status == MGA_ENDPRDMASTS ) break; + udelay( 1 ); + } + if ( primary->tail == primary->last_flush ) { DRM_DEBUG( " bailing out...\n" ); return; diff --git a/shared/mga_dma.c b/shared/mga_dma.c index a0ad70e9d..3c84de63a 100644 --- a/shared/mga_dma.c +++ b/shared/mga_dma.c @@ -157,9 +157,18 @@ void mga_do_dma_flush( drm_mga_private_t *dev_priv ) { drm_mga_primary_buffer_t *primary = &dev_priv->prim; u32 head, tail; - DMA_LOCALS; + u32 status = 0; + int i; + DMA_LOCALS; DRM_DEBUG( "\n" ); + /* We need to wait so that we can do an safe flush */ + for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { + status = MGA_READ( MGA_STATUS ) & MGA_ENGINE_IDLE_MASK; + if ( status == MGA_ENDPRDMASTS ) break; + udelay( 1 ); + } + if ( primary->tail == primary->last_flush ) { DRM_DEBUG( " bailing out...\n" ); return; -- cgit v1.2.3