}
 }
 
+static bool need_pipedmc_load_program(struct intel_display *display)
+{
+       /* On TGL/derivatives pipe DMC state is lost when PG1 is disabled */
+       return DISPLAY_VER(display) == 12;
+}
+
 void intel_dmc_enable_pipe(struct intel_display *display, enum pipe pipe)
 {
        enum intel_dmc_id dmc_id = PIPE_TO_DMC_ID(pipe);
        if (!is_valid_dmc_id(dmc_id) || !has_dmc_id_fw(display, dmc_id))
                return;
 
+       if (need_pipedmc_load_program(display))
+               dmc_load_program(display, dmc_id);
+
        if (DISPLAY_VER(display) >= 20) {
                intel_de_write(display, PIPEDMC_INTERRUPT(pipe), pipedmc_interrupt_mask(display));
                intel_de_write(display, PIPEDMC_INTERRUPT_MASK(pipe), ~pipedmc_interrupt_mask(display));