drm/i915: Remove gen3 irq code from gen4 irq routine
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 24 Apr 2012 21:59:46 +0000 (22:59 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 3 May 2012 09:18:17 +0000 (11:18 +0200)
And a couple of miscellaneous cleanups to the main body of the IRQ loop;
move per-loop condition variables within the scope of the loop and move
the old DRI1 breadcrumb to the tail of the function and so only execute
it once.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_irq.c

index 7ea95b6..874d62b 100644 (file)
@@ -2683,23 +2683,17 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
        struct drm_i915_master_private *master_priv;
        u32 iir, new_iir;
        u32 pipe_stats[I915_MAX_PIPES];
-       u32 vblank_status;
-       int vblank = 0;
        unsigned long irqflags;
        int irq_received;
        int ret = IRQ_NONE, pipe;
-       bool blc_event = false;
 
        atomic_inc(&dev_priv->irq_received);
 
        iir = I915_READ(IIR);
 
-       if (INTEL_INFO(dev)->gen >= 4)
-               vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS;
-       else
-               vblank_status = PIPE_VBLANK_INTERRUPT_STATUS;
-
        for (;;) {
+               bool blc_event = false;
+
                irq_received = iir != 0;
 
                /* Can't rely on pipestat interrupt bit in iir as it might
@@ -2751,13 +2745,6 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
                I915_WRITE(IIR, iir);
                new_iir = I915_READ(IIR); /* Flush posted writes */
 
-               if (dev->primary->master) {
-                       master_priv = dev->primary->master->driver_priv;
-                       if (master_priv->sarea_priv)
-                               master_priv->sarea_priv->last_dispatch =
-                                       READ_BREADCRUMB(dev_priv);
-               }
-
                if (iir & I915_USER_INTERRUPT)
                        notify_ring(dev, &dev_priv->ring[RCS]);
                if (iir & I915_BSD_USER_INTERRUPT)
@@ -2770,9 +2757,8 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
                        intel_prepare_page_flip(dev, 1);
 
                for_each_pipe(pipe) {
-                       if (pipe_stats[pipe] & vblank_status &&
+                       if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS &&
                            drm_handle_vblank(dev, pipe)) {
-                               vblank++;
                                i915_pageflip_stall_check(dev, pipe);
                                intel_finish_page_flip(dev, pipe);
                        }
@@ -2803,6 +2789,13 @@ static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
                iir = new_iir;
        }
 
+       if (dev->primary->master) {
+               master_priv = dev->primary->master->driver_priv;
+               if (master_priv->sarea_priv)
+                       master_priv->sarea_priv->last_dispatch =
+                               READ_BREADCRUMB(dev_priv);
+       }
+
        return ret;
 }