enum surface_update_type update_type,
                struct dc_state *context)
 {
+       bool mpcc_disconnected = false;
        int i, j;
        struct pipe_ctx *top_pipe_to_program = NULL;
 
                context_clock_trace(dc, context);
        }
 
-       if (update_type != UPDATE_TYPE_FAST && dc->hwss.interdependent_update_lock && dc->hwss.wait_for_pending_cleared)
-               dc->hwss.disconnect_pipes(dc, context);
+       if (update_type != UPDATE_TYPE_FAST && dc->hwss.interdependent_update_lock &&
+               dc->hwss.disconnect_pipes && dc->hwss.wait_for_pending_cleared){
+               dc->hwss.interdependent_update_lock(dc, context, true);
+               mpcc_disconnected = dc->hwss.disconnect_pipes(dc, context);
+               dc->hwss.interdependent_update_lock(dc, context, false);
+               if (mpcc_disconnected)
+                       dc->hwss.wait_for_pending_cleared(dc, context);
+       }
 
        for (j = 0; j < dc->res_pool->pipe_count; j++) {
                struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
 
        return NULL;
 }
 
-void dcn10_disconnect_pipes(
+bool dcn10_disconnect_pipes(
                struct dc *dc,
                struct dc_state *context)
 {
                bool mpcc_disconnected = false;
                struct pipe_ctx *old_pipe;
                struct pipe_ctx *new_pipe;
-
-               dc->hwss.wait_for_pending_cleared(dc, context);
-               dc->hwss.interdependent_update_lock(dc, context, true);
-
                DC_LOGGER_INIT(dc->ctx->logger);
 
                /* Set pipe update flags and lock pipes */
                                }
                        }
                }
-
-               dc->hwss.interdependent_update_lock(dc, context, false);
-
-               if (mpcc_disconnected)
-                       dc->hwss.wait_for_pending_cleared(dc, context);
+       return mpcc_disconnected;
 }
 
 void dcn10_wait_for_pending_cleared(struct dc *dc,
 
 void dcn10_get_hdr_visual_confirm_color(
                struct pipe_ctx *pipe_ctx,
                struct tg_color *color);
-void dcn10_disconnect_pipes(
+bool dcn10_disconnect_pipes(
                struct dc *dc,
                struct dc_state *context);
 
 
                        int num_planes, struct dc_state *context);
        void (*program_front_end_for_ctx)(struct dc *dc,
                        struct dc_state *context);
-       void (*disconnect_pipes)(struct dc *dc,
+       bool (*disconnect_pipes)(struct dc *dc,
                        struct dc_state *context);
        void (*wait_for_pending_cleared)(struct dc *dc,
                        struct dc_state *context);