Since it's supported on 965 and G4x, enable it there as well.

Signed-off-by: Jesse Barnes <jbar...@virtuousgeek.org>
---
 drivers/gpu/drm/i915/i915_drv.h |    2 +-
 drivers/gpu/drm/i915/i915_irq.c |   33 ++++++++++++++++++++++++++-------
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 71ae2f1..4b9a12f 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1156,7 +1156,7 @@ extern int i915_wait_ring(struct drm_device * dev, int n, 
const char *caller);
 
 #define INTEL_PCH_TYPE(dev) (((struct drm_i915_private 
*)(dev)->dev_private)->pch_type)
 #define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
-#define HAS_PIPE_CONTROL(dev) (IS_IRONLAKE(dev) || IS_GEN6(dev))
+#define HAS_PIPE_CONTROL(dev) (IS_I965G(dev))
 
 #define PRIMARY_RINGBUFFER_SIZE         (128*1024)
 
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 06a743f..f1e85b6 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -51,9 +51,6 @@
         I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT |  \
         I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
 
-/** Interrupts that we mask and unmask at runtime. */
-#define I915_INTERRUPT_ENABLE_VAR (I915_USER_INTERRUPT)
-
 #define I915_PIPE_VBLANK_STATUS        (PIPE_START_VBLANK_INTERRUPT_STATUS |\
                                 PIPE_VBLANK_INTERRUPT_STATUS)
 
@@ -922,8 +919,13 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
                                        READ_BREADCRUMB(dev_priv);
                }
 
-               if (iir & I915_USER_INTERRUPT) {
+               if (iir &
+                   (I915_USER_INTERRUPT | I915_PIPE_CONTROL_NOTIFY_INTERRUPT)) 
{
                        u32 seqno = i915_get_gem_seqno(dev);
+
+                       if (IS_I965G(dev) && (iir & I915_USER_INTERRUPT))
+                               DRM_DEBUG_DRIVER("unexpected user interrupt\n");
+
                        dev_priv->mm.irq_gem_seqno = seqno;
                        trace_i915_gem_request_complete(dev, seqno);
                        DRM_WAKEUP(&dev_priv->irq_queue);
@@ -1005,13 +1007,19 @@ void i915_user_irq_get(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        unsigned long irqflags;
+       u32 irq;
+
+       if (IS_I965G(dev))
+               irq = I915_PIPE_CONTROL_NOTIFY_INTERRUPT;
+       else
+               irq = I915_USER_INTERRUPT;
 
        spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
        if (dev->irq_enabled && (++dev_priv->user_irq_refcount == 1)) {
                if (HAS_PCH_SPLIT(dev))
                        ironlake_enable_graphics_irq(dev_priv, GT_PIPE_NOTIFY);
                else
-                       i915_enable_irq(dev_priv, I915_USER_INTERRUPT);
+                       i915_enable_irq(dev_priv, irq);
        }
        spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
 }
@@ -1020,6 +1028,12 @@ void i915_user_irq_put(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
        unsigned long irqflags;
+       u32 irq;
+
+       if (IS_I965G(dev))
+               irq = I915_PIPE_CONTROL_NOTIFY_INTERRUPT;
+       else
+               irq = I915_USER_INTERRUPT;
 
        spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
        BUG_ON(dev->irq_enabled && dev_priv->user_irq_refcount <= 0);
@@ -1027,7 +1041,7 @@ void i915_user_irq_put(struct drm_device *dev)
                if (HAS_PCH_SPLIT(dev))
                        ironlake_disable_graphics_irq(dev_priv, GT_PIPE_NOTIFY);
                else
-                       i915_disable_irq(dev_priv, I915_USER_INTERRUPT);
+                       i915_disable_irq(dev_priv, irq);
        }
        spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
 }
@@ -1383,7 +1397,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
 int i915_driver_irq_postinstall(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-       u32 enable_mask = I915_INTERRUPT_ENABLE_FIX | I915_INTERRUPT_ENABLE_VAR;
+       u32 enable_mask = I915_INTERRUPT_ENABLE_FIX;
        u32 error_mask;
 
        DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);
@@ -1393,6 +1407,11 @@ int i915_driver_irq_postinstall(struct drm_device *dev)
        if (HAS_PCH_SPLIT(dev))
                return ironlake_irq_postinstall(dev);
 
+       if (IS_I965G(dev))
+               enable_mask |= I915_PIPE_CONTROL_NOTIFY_INTERRUPT;
+       else
+               enable_mask |= I915_USER_INTERRUPT;
+
        /* Unmask the interrupts that we always want on. */
        dev_priv->irq_mask_reg = ~I915_INTERRUPT_ENABLE_FIX;
 
-- 
1.7.0.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to