/* We give fast paths for the really cool registers */
  #define NEEDS_FORCE_WAKE(dev_priv, reg) \
-        (((dev_priv)->info->gen >= 6) && \
-         ((reg) < 0x40000) &&            \
-         ((reg) != FORCEWAKE)) && \
-        (!IS_VALLEYVIEW((dev_priv)->dev))
+       ((HAS_FORCE_WAKE((dev_priv)->dev)) && \
+        ((reg) < 0x40000) &&            \
+        ((reg) != FORCEWAKE))
  
 +static bool IS_DISPLAYREG(u32 reg)
 +{
 +      /*
 +       * This should make it easier to transition modules over to the
 +       * new register block scheme, since we can do it incrementally.
 +       */
 +      if (reg >= 0x180000)
 +              return false;
 +
 +      if (reg >= RENDER_RING_BASE &&
 +          reg < RENDER_RING_BASE + 0xff)
 +              return false;
 +      if (reg >= GEN6_BSD_RING_BASE &&
 +          reg < GEN6_BSD_RING_BASE + 0xff)
 +              return false;
 +      if (reg >= BLT_RING_BASE &&
 +          reg < BLT_RING_BASE + 0xff)
 +              return false;
 +
 +      if (reg == PGTBL_ER)
 +              return false;
 +
 +      if (reg >= IPEIR_I965 &&
 +          reg < HWSTAM)
 +              return false;
 +
 +      if (reg == MI_MODE)
 +              return false;
 +
 +      if (reg == GFX_MODE_GEN7)
 +              return false;
 +
 +      if (reg == RENDER_HWS_PGA_GEN7 ||
 +          reg == BSD_HWS_PGA_GEN7 ||
 +          reg == BLT_HWS_PGA_GEN7)
 +              return false;
 +
 +      if (reg == GEN6_BSD_SLEEP_PSMI_CONTROL ||
 +          reg == GEN6_BSD_RNCID)
 +              return false;
 +
 +      if (reg == GEN6_BLITTER_ECOSKPD)
 +              return false;
 +
 +      if (reg >= 0x4000c &&
 +          reg <= 0x4002c)
 +              return false;
 +
 +      if (reg >= 0x4f000 &&
 +          reg <= 0x4f08f)
 +              return false;
 +
 +      if (reg >= 0x4f100 &&
 +          reg <= 0x4f11f)
 +              return false;
 +
 +      if (reg >= VLV_MASTER_IER &&
 +          reg <= GEN6_PMIER)
 +              return false;
 +
 +      if (reg >= FENCE_REG_SANDYBRIDGE_0 &&
 +          reg < (FENCE_REG_SANDYBRIDGE_0 + (16*8)))
 +              return false;
 +
 +      if (reg >= VLV_IIR_RW &&
 +          reg <= VLV_ISR)
 +              return false;
 +
 +      if (reg == FORCEWAKE_VLV ||
 +          reg == FORCEWAKE_ACK_VLV)
 +              return false;
 +
 +      if (reg == GEN6_GDRST)
 +              return false;
 +
 +      return true;
 +}
 +
  #define __i915_read(x, y) \
  u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
        u##x val = 0; \
 
  #define MI_DISPLAY_FLIP               MI_INSTR(0x14, 2)
  #define MI_DISPLAY_FLIP_I915  MI_INSTR(0x14, 1)
  #define   MI_DISPLAY_FLIP_PLANE(n) ((n) << 20)
+ /* IVB has funny definitions for which plane to flip. */
+ #define   MI_DISPLAY_FLIP_IVB_PLANE_A  (0 << 19)
+ #define   MI_DISPLAY_FLIP_IVB_PLANE_B  (1 << 19)
+ #define   MI_DISPLAY_FLIP_IVB_SPRITE_A (2 << 19)
+ #define   MI_DISPLAY_FLIP_IVB_SPRITE_B (3 << 19)
+ #define   MI_DISPLAY_FLIP_IVB_PLANE_C  (4 << 19)
+ #define   MI_DISPLAY_FLIP_IVB_SPRITE_C (5 << 19)
 +#define MI_ARB_ON_OFF         MI_INSTR(0x08, 0)
 +#define   MI_ARB_ENABLE                       (1<<0)
 +#define   MI_ARB_DISABLE              (0<<0)
+ 
  #define MI_SET_CONTEXT                MI_INSTR(0x18, 0)
  #define   MI_MM_SPACE_GTT             (1<<8)
  #define   MI_MM_SPACE_PHYSICAL                (0<<8)
 
        if (ret)
                goto err_unref;
  
 -      ring->virtual_start = ioremap_wc(dev->agp->base + obj->gtt_offset,
 -                                       ring->size);
+       ret = i915_gem_object_set_to_gtt_domain(obj, true);
+       if (ret)
+               goto err_unpin;
+ 
 +      ring->virtual_start =
 +              ioremap_wc(dev_priv->mm.gtt->gma_bus_addr + obj->gtt_offset,
 +                         ring->size);
        if (ring->virtual_start == NULL) {
                DRM_ERROR("Failed to map ringbuffer.\n");
                ret = -EINVAL;