#define   GEN9_PWRGT_MEDIA_STATUS_MASK         (1 << 0)
 #define   GEN9_PWRGT_RENDER_STATUS_MASK                (1 << 1)
 
+#define POWERGATE_ENABLE                       _MMIO(0xa210)
+#define    VDN_HCP_POWERGATE_ENABLE(n)         BIT(((n) * 2) + 3)
+#define    VDN_MFX_POWERGATE_ENABLE(n)         BIT(((n) * 2) + 4)
+
 #define  GTFIFODBG                             _MMIO(0x120000)
 #define    GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV   (0x1f << 20)
 #define    GT_FIFO_FREE_ENTRIES_CHV            (0x7f << 13)
 
                   _MASKED_BIT_ENABLE(GEN11_ENABLE_32_PLANE_MODE));
 }
 
+static void tgl_init_clock_gating(struct drm_i915_private *dev_priv)
+{
+       u32 vd_pg_enable = 0;
+       unsigned int i;
+
+       /* This is not a WA. Enable VD HCP & MFX_ENC powergate */
+       for (i = 0; i < I915_MAX_VCS; i++) {
+               if (HAS_ENGINE(dev_priv, _VCS(i)))
+                       vd_pg_enable |= VDN_HCP_POWERGATE_ENABLE(i) |
+                                       VDN_MFX_POWERGATE_ENABLE(i);
+       }
+
+       I915_WRITE(POWERGATE_ENABLE,
+                  I915_READ(POWERGATE_ENABLE) | vd_pg_enable);
+}
+
 static void cnp_init_clock_gating(struct drm_i915_private *dev_priv)
 {
        if (!HAS_PCH_CNP(dev_priv))
 void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
 {
        if (IS_GEN(dev_priv, 12))
-               dev_priv->display.init_clock_gating = nop_init_clock_gating;
+               dev_priv->display.init_clock_gating = tgl_init_clock_gating;
        else if (IS_GEN(dev_priv, 11))
                dev_priv->display.init_clock_gating = icl_init_clock_gating;
        else if (IS_CANNONLAKE(dev_priv))