OSDN Git Service

only acknowledge interrupts we handle - others could be used outside the
authorMichel Daenzer <michel@daenzer.net>
Tue, 4 Feb 2003 15:56:37 +0000 (15:56 +0000)
committerMichel Daenzer <michel@daenzer.net>
Tue, 4 Feb 2003 15:56:37 +0000 (15:56 +0000)
    DRM

shared-core/radeon_irq.c
shared/radeon_irq.c

index c5cd61c..596706b 100644 (file)
@@ -61,7 +61,11 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
           (drm_radeon_private_t *)dev->dev_private;
        u32 stat;
 
-       stat = RADEON_READ(RADEON_GEN_INT_STATUS);
+       /* Only consider the bits we're interested in - others could be used
+        * outside the DRM
+        */
+       stat = RADEON_READ(RADEON_GEN_INT_STATUS)
+            & (RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT);
        if (!stat)
                return;
 
@@ -77,15 +81,14 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
                DRM(vbl_send_signals)( dev );
        }
 
-       /* Acknowledge all the bits in GEN_INT_STATUS -- seem to get
-        * more than we asked for...
-        */
+       /* Acknowledge interrupts we handle */
        RADEON_WRITE(RADEON_GEN_INT_STATUS, stat);
 }
 
 static __inline__ void radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv)
 {
-       u32 tmp = RADEON_READ( RADEON_GEN_INT_STATUS );
+       u32 tmp = RADEON_READ( RADEON_GEN_INT_STATUS )
+               & (RADEON_SW_INT_TEST_ACK | RADEON_CRTC_VBLANK_STAT);
        if (tmp)
                RADEON_WRITE( RADEON_GEN_INT_STATUS, tmp );
 }
index c5cd61c..596706b 100644 (file)
@@ -61,7 +61,11 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
           (drm_radeon_private_t *)dev->dev_private;
        u32 stat;
 
-       stat = RADEON_READ(RADEON_GEN_INT_STATUS);
+       /* Only consider the bits we're interested in - others could be used
+        * outside the DRM
+        */
+       stat = RADEON_READ(RADEON_GEN_INT_STATUS)
+            & (RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT);
        if (!stat)
                return;
 
@@ -77,15 +81,14 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
                DRM(vbl_send_signals)( dev );
        }
 
-       /* Acknowledge all the bits in GEN_INT_STATUS -- seem to get
-        * more than we asked for...
-        */
+       /* Acknowledge interrupts we handle */
        RADEON_WRITE(RADEON_GEN_INT_STATUS, stat);
 }
 
 static __inline__ void radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv)
 {
-       u32 tmp = RADEON_READ( RADEON_GEN_INT_STATUS );
+       u32 tmp = RADEON_READ( RADEON_GEN_INT_STATUS )
+               & (RADEON_SW_INT_TEST_ACK | RADEON_CRTC_VBLANK_STAT);
        if (tmp)
                RADEON_WRITE( RADEON_GEN_INT_STATUS, tmp );
 }