summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shared-core/radeon_irq.c13
-rw-r--r--shared/radeon_irq.c13
2 files changed, 16 insertions, 10 deletions
diff --git a/shared-core/radeon_irq.c b/shared-core/radeon_irq.c
index c5cd61c5..596706bf 100644
--- a/shared-core/radeon_irq.c
+++ b/shared-core/radeon_irq.c
@@ -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 );
}
diff --git a/shared/radeon_irq.c b/shared/radeon_irq.c
index c5cd61c5..596706bf 100644
--- a/shared/radeon_irq.c
+++ b/shared/radeon_irq.c
@@ -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 );
}