if (iir & I915_BSD_USER_INTERRUPT)
                        notify_ring(dev, &dev_priv->ring[VCS]);
 
-               if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT) {
+               if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT)
                        intel_prepare_page_flip(dev, 0);
-                       if (dev_priv->gen3_flip_pending_is_done)
-                               intel_finish_page_flip_plane(dev, 0);
-               }
 
-               if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT) {
+               if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT)
                        intel_prepare_page_flip(dev, 1);
-                       if (dev_priv->gen3_flip_pending_is_done)
-                               intel_finish_page_flip_plane(dev, 1);
-               }
 
                for_each_pipe(pipe) {
                        if (pipe_stats[pipe] & vblank_status &&
                            drm_handle_vblank(dev, pipe)) {
                                vblank++;
-                               if (!dev_priv->gen3_flip_pending_is_done) {
-                                       i915_pageflip_stall_check(dev, pipe);
-                                       intel_finish_page_flip(dev, pipe);
-                               }
+                               i915_pageflip_stall_check(dev, pipe);
+                               intel_finish_page_flip(dev, pipe);
                        }
 
                        if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
                if (iir & I915_BSD_USER_INTERRUPT)
                        notify_ring(dev, &dev_priv->ring[VCS]);
 
-               if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT) {
+               if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT)
                        intel_prepare_page_flip(dev, 0);
-                       if (dev_priv->gen3_flip_pending_is_done)
-                               intel_finish_page_flip_plane(dev, 0);
-               }
 
-               if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT) {
+               if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT)
                        intel_prepare_page_flip(dev, 1);
-                       if (dev_priv->gen3_flip_pending_is_done)
-                               intel_finish_page_flip_plane(dev, 1);
-               }
 
                for_each_pipe(pipe) {
                        if (pipe_stats[pipe] & vblank_status &&
                            drm_handle_vblank(dev, pipe)) {
                                vblank++;
-                               if (!dev_priv->gen3_flip_pending_is_done) {
-                                       i915_pageflip_stall_check(dev, pipe);
-                                       intel_finish_page_flip(dev, pipe);
-                               }
+                               i915_pageflip_stall_check(dev, pipe);
+                               intel_finish_page_flip(dev, pipe);
                        }
 
                        if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
        INIT_WORK(&dev_priv->error_work, i915_error_work_func);
        INIT_WORK(&dev_priv->rps_work, gen6_pm_rps_work);
 
-       /* IIR "flip pending" bit means done if this bit is set */
-       if (IS_GEN3(dev) && (I915_READ(ECOSKPD) & ECO_FLIP_DONE))
-               dev_priv->gen3_flip_pending_is_done = true;
-
        dev->driver->get_vblank_counter = i915_get_vblank_counter;
        dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
        if (IS_G4X(dev) || IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev) ||
                        dev->driver->irq_handler = i8xx_irq_handler;
                        dev->driver->irq_uninstall = i8xx_irq_uninstall;
                } else if (INTEL_INFO(dev)->gen == 3) {
+                       /* IIR "flip pending" means done if this bit is set */
+                       I915_WRITE(ECOSKPD, _MASKED_BIT_DISABLE(ECO_FLIP_DONE));
+
                        dev->driver->irq_preinstall = i915_irq_preinstall;
                        dev->driver->irq_postinstall = i915_irq_postinstall;
                        dev->driver->irq_uninstall = i915_irq_uninstall;