OSDN Git Service

Jonny Strom's mga_dma.c patch
authorKeith Whitwell <keith@tungstengraphics.com>
Thu, 10 Oct 2002 08:25:40 +0000 (08:25 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Thu, 10 Oct 2002 08:25:40 +0000 (08:25 +0000)
shared-core/mga_dma.c
shared/mga_dma.c

index a0ad70e..3c84de6 100644 (file)
@@ -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;
index a0ad70e..3c84de6 100644 (file)
@@ -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;