#include "panel_cntl.h"
 #include "dc_state_priv.h"
 #include "dpcd_defs.h"
+#include "dsc.h"
 /* include DCE11 register header files */
 #include "dce/dce_11_0_d.h"
 #include "dce/dce_11_0_sh_mask.h"
        }
 }
 
+static void clean_up_dsc_blocks(struct dc *dc)
+{
+       struct display_stream_compressor *dsc = NULL;
+       struct timing_generator *tg = NULL;
+       struct stream_encoder *se = NULL;
+       struct dccg *dccg = dc->res_pool->dccg;
+       struct pg_cntl *pg_cntl = dc->res_pool->pg_cntl;
+       int i;
+
+       if (dc->ctx->dce_version != DCN_VERSION_3_5 &&
+               dc->ctx->dce_version != DCN_VERSION_3_51)
+               return;
+
+       for (i = 0; i < dc->res_pool->res_cap->num_dsc; i++) {
+               struct dcn_dsc_state s  = {0};
+
+               dsc = dc->res_pool->dscs[i];
+               dsc->funcs->dsc_read_state(dsc, &s);
+               if (s.dsc_fw_en) {
+                       /* disable DSC in OPTC */
+                       if (i < dc->res_pool->timing_generator_count) {
+                               tg = dc->res_pool->timing_generators[i];
+                               tg->funcs->set_dsc_config(tg, OPTC_DSC_DISABLED, 0, 0);
+                       }
+                       /* disable DSC in stream encoder */
+                       if (i < dc->res_pool->stream_enc_count) {
+                               se = dc->res_pool->stream_enc[i];
+                               se->funcs->dp_set_dsc_config(se, OPTC_DSC_DISABLED, 0, 0);
+                               se->funcs->dp_set_dsc_pps_info_packet(se, false, NULL, true);
+                       }
+                       /* disable DSC block */
+                       if (dccg->funcs->set_ref_dscclk)
+                               dccg->funcs->set_ref_dscclk(dccg, dsc->inst);
+                       dsc->funcs->dsc_disable(dsc);
+
+                       /* power down DSC */
+                       if (pg_cntl != NULL)
+                               pg_cntl->funcs->dsc_pg_control(pg_cntl, dsc->inst, false);
+               }
+       }
+}
+
 /*
  * When ASIC goes from VBIOS/VGA mode to driver/accelerated mode we need:
  *  1. Power down all DC HW blocks
                        clk_mgr_exit_optimized_pwr_state(dc, dc->clk_mgr);
 
                power_down_all_hw_blocks(dc);
+
+               /* DSC could be enabled on eDP during VBIOS post.
+                * To clean up dsc blocks if eDP is in link but not active.
+                */
+               if (edp_link_with_sink && (edp_stream_num == 0))
+                       clean_up_dsc_blocks(dc);
+
                disable_vga_and_power_gate_all_controllers(dc);
                if (edp_link_with_sink && !keep_edp_vdd_on)
                        dc->hwss.edp_power_control(edp_link_with_sink, false);