}
        }
 
+       if ((update_type != UPDATE_TYPE_FAST) && stream->update_flags.bits.dsc_changed)
+               if (top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable)
+                       top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable(
+                                       top_pipe_to_program->stream_res.tg);
+
        if ((update_type != UPDATE_TYPE_FAST) && dc->hwss.interdependent_update_lock)
                dc->hwss.interdependent_update_lock(dc, context, true);
        else
        else
                dc->hwss.pipe_control_lock(dc, top_pipe_to_program, false);
 
+       if ((update_type != UPDATE_TYPE_FAST) && stream->update_flags.bits.dsc_changed)
+               if (top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable) {
+                       top_pipe_to_program->stream_res.tg->funcs->wait_for_state(
+                                       top_pipe_to_program->stream_res.tg,
+                                       CRTC_STATE_VACTIVE);
+                       top_pipe_to_program->stream_res.tg->funcs->wait_for_state(
+                                       top_pipe_to_program->stream_res.tg,
+                                       CRTC_STATE_VBLANK);
+                       top_pipe_to_program->stream_res.tg->funcs->wait_for_state(
+                                       top_pipe_to_program->stream_res.tg,
+                                       CRTC_STATE_VACTIVE);
+                       top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_disable(
+                                       top_pipe_to_program->stream_res.tg);
+               }
+
        if (update_type != UPDATE_TYPE_FAST)
                dc->hwss.post_unlock_program_front_end(dc, context);
 
 
        bool lock)
 {
        bool flip_immediate = false;
-       bool dig_update_required = false;
 
        /* use TG master update lock to lock everything on the TG
         * therefore only top pipe need to lock
                    (!flip_immediate && pipe->stream_res.gsl_group > 0))
                        dcn20_setup_gsl_group_as_lock(dc, pipe, flip_immediate);
 
-       if (pipe->stream && pipe->stream->update_flags.bits.dsc_changed)
-               dig_update_required = true;
-
-       /* Need double buffer lock mode in order to synchronize front end pipe
-        * updates with dig updates.
-        */
-       if (dig_update_required) {
-               if (lock) {
-                       pipe->stream_res.tg->funcs->lock_doublebuffer_enable(
-                                       pipe->stream_res.tg);
-               }
-       }
-
        if (pipe->plane_state != NULL && pipe->plane_state->triplebuffer_flips) {
                if (lock)
                        pipe->stream_res.tg->funcs->triplebuffer_lock(pipe->stream_res.tg);
                else
                        pipe->stream_res.tg->funcs->unlock(pipe->stream_res.tg);
        }
-
-       if (dig_update_required) {
-               if (!lock) {
-                       pipe->stream_res.tg->funcs->wait_for_state(pipe->stream_res.tg,
-                                       CRTC_STATE_VACTIVE);
-                       pipe->stream_res.tg->funcs->wait_for_state(pipe->stream_res.tg,
-                                       CRTC_STATE_VBLANK);
-                       pipe->stream_res.tg->funcs->wait_for_state(pipe->stream_res.tg,
-                                       CRTC_STATE_VACTIVE);
-                       pipe->stream_res.tg->funcs->lock_doublebuffer_disable(
-                                       pipe->stream_res.tg);
-               }
-       }
 }
 
 static void dcn20_detect_pipe_changes(struct pipe_ctx *old_pipe, struct pipe_ctx *new_pipe)