static int skl_suspend_complete(struct drm_i915_private *dev_priv)
 {
+       enum csr_state state;
        /* Enabling DC6 is not a hard requirement to enter runtime D3 */
 
        skl_uninit_cdclk(dev_priv);
 
+       /* TODO: wait for a completion event or
+        * similar here instead of busy
+        * waiting using wait_for function.
+        */
+       wait_for((state = intel_csr_load_status_get(dev_priv)) !=
+                       FW_UNINITIALIZED, 1000);
+       if (state == FW_LOADED)
+               skl_enable_dc6(dev_priv);
+
        return 0;
 }
 
 {
        struct drm_device *dev = dev_priv->dev;
 
+       if (intel_csr_load_status_get(dev_priv) == FW_LOADED)
+               skl_disable_dc6(dev_priv);
+
        skl_init_cdclk(dev_priv);
        intel_csr_load_program(dev);
 
 
 void bxt_disable_dc9(struct drm_i915_private *dev_priv);
 void skl_init_cdclk(struct drm_i915_private *dev_priv);
 void skl_uninit_cdclk(struct drm_i915_private *dev_priv);
+void skl_enable_dc6(struct drm_i915_private *dev_priv);
+void skl_disable_dc6(struct drm_i915_private *dev_priv);
 void intel_dp_get_m_n(struct intel_crtc *crtc,
                      struct intel_crtc_state *pipe_config);
 void intel_dp_set_m_n(struct intel_crtc *crtc, enum link_m_n_set m_n);
 
                  "DC6 already programmed to be disabled.\n");
 }
 
-static void skl_enable_dc6(struct drm_i915_private *dev_priv)
+void skl_enable_dc6(struct drm_i915_private *dev_priv)
 {
        uint32_t val;
 
        POSTING_READ(DC_STATE_EN);
 }
 
-static void skl_disable_dc6(struct drm_i915_private *dev_priv)
+void skl_disable_dc6(struct drm_i915_private *dev_priv)
 {
        uint32_t val;
 
                                !I915_READ(HSW_PWR_WELL_BIOS),
                                "Invalid for power well status to be enabled, unless done by the BIOS, \
                                when request is to disable!\n");
-                       if ((GEN9_ENABLE_DC5(dev) || SKL_ENABLE_DC6(dev)) &&
-                               power_well->data == SKL_DISP_PW_2) {
+                       if (power_well->data == SKL_DISP_PW_2) {
+                               if (GEN9_ENABLE_DC5(dev))
+                                       gen9_disable_dc5(dev_priv);
                                if (SKL_ENABLE_DC6(dev)) {
-                                       skl_disable_dc6(dev_priv);
                                        /*
                                         * DDI buffer programming unnecessary during driver-load/resume
                                         * as it's already done during modeset initialization then.
                                         */
                                        if (!dev_priv->power_domains.initializing)
                                                intel_prepare_ddi(dev);
-                               } else {
-                                       gen9_disable_dc5(dev_priv);
                                }
                        }
                        I915_WRITE(HSW_PWR_WELL_DRIVER, tmp | req_mask);
                                DRM_DEBUG_KMS("Disabling %s\n", power_well->name);
                        }
 
-                       if ((GEN9_ENABLE_DC5(dev) || SKL_ENABLE_DC6(dev)) &&
+                       if (GEN9_ENABLE_DC5(dev) &&
                                power_well->data == SKL_DISP_PW_2) {
                                enum csr_state state;
                                /* TODO: wait for a completion event or
                                        DRM_DEBUG("CSR firmware not ready (%d)\n",
                                                        state);
                                else
-                                       if (SKL_ENABLE_DC6(dev))
-                                               skl_enable_dc6(dev_priv);
-                                       else
-                                               gen9_enable_dc5(dev_priv);
+                                       gen9_enable_dc5(dev_priv);
                        }
                }
        }