#define GEN6_PMINTRMSK                         0xA168
 #define GEN8_PMINTR_REDIRECT_TO_NON_DISP       (1<<31)
 #define VLV_PWRDWNUPCTL                                0xA294
+#define GEN9_MEDIA_PG_IDLE_HYSTERESIS          0xA0C4
+#define GEN9_RENDER_PG_IDLE_HYSTERESIS         0xA0C8
+#define GEN9_PG_ENABLE                         0xA210
 
 #define VLV_CHICKEN_3                          (VLV_DISPLAY_BASE + 0x7040C)
 #define  PIXEL_OVERLAP_CNT_MASK                        (3 << 30)
 
        struct drm_i915_private *dev_priv = dev->dev_private;
 
        I915_WRITE(GEN6_RC_CONTROL, 0);
+       I915_WRITE(GEN9_PG_ENABLE, 0);
 }
 
 static void gen6_disable_rps(struct drm_device *dev)
        I915_WRITE(GEN6_RC_SLEEP, 0);
        I915_WRITE(GEN6_RC6_THRESHOLD, 37500); /* 37.5/125ms per EI */
 
+       /* 2c: Program Coarse Power Gating Policies. */
+       I915_WRITE(GEN9_MEDIA_PG_IDLE_HYSTERESIS, 25);
+       I915_WRITE(GEN9_RENDER_PG_IDLE_HYSTERESIS, 25);
+
        /* 3a: Enable RC6 */
        if (intel_enable_rc6(dev) & INTEL_RC6_ENABLE)
                rc6_mask = GEN6_RC_CTL_RC6_ENABLE;
                                   GEN6_RC_CTL_EI_MODE(1) |
                                   rc6_mask);
 
+       /* 3b: Enable Coarse Power Gating only when RC6 is enabled */
+       I915_WRITE(GEN9_PG_ENABLE, (rc6_mask & GEN6_RC_CTL_RC6_ENABLE) ? 3 : 0);
+
        intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
 
 }