[intel] Get vblank pipe from irq_mask_reg instead of hardware enable reg
authorKeith Packard <keithp@keithp.com>
Tue, 24 Jun 2008 20:39:25 +0000 (13:39 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 24 Jun 2008 20:39:25 +0000 (13:39 -0700)
With the interrupt enable/disable using only the mask register, it was wrong
to use the enable register to detect which pipes had vblank detection
turned on. Also, as we keep a local copy of the mask register around, and
MSI machines smack the hardware during the interrupt handler, it is more
efficient and more correct to use the local copy.

shared-core/i915_irq.c

index 710b289..f09ae5f 100644 (file)
@@ -794,14 +794,15 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_vblank_pipe_t *pipe = data;
-       u16 flag;
+       u32 flag = 0;
 
        if (!dev_priv) {
                DRM_ERROR("called with no initialization\n");
                return -EINVAL;
        }
 
-       flag = I915_READ(I915REG_INT_ENABLE_R);
+       if (dev_priv->irq_enabled)
+           flag = ~dev_priv->irq_mask_reg;
        pipe->pipe = 0;
        if (flag & I915_DISPLAY_PIPE_A_EVENT_INTERRUPT)
                pipe->pipe |= DRM_I915_VBLANK_PIPE_A;