struct dc_link *edp_link = get_link_for_edp(dc);
        bool can_edp_fast_boot_optimize = false;
        bool apply_edp_fast_boot_optimization = false;
+       bool can_apply_seamless_boot = false;
+
+       for (i = 0; i < context->stream_count; i++) {
+               if (context->streams[i]->apply_seamless_boot_optimization) {
+                       can_apply_seamless_boot = true;
+                       break;
+               }
+       }
 
        if (edp_link) {
                /* this seems to cause blank screens on DCE8 */
                }
        }
 
-       if (!apply_edp_fast_boot_optimization) {
+       if (!apply_edp_fast_boot_optimization && !can_apply_seamless_boot) {
                if (edp_link_to_turnoff) {
                        /*turn off backlight before DP_blank and encoder powered down*/
                        dc->hwss.edp_backlight_control(edp_link_to_turnoff, false);
 
 static void dcn10_init_pipes(struct dc *dc, struct dc_state *context)
 {
        int i;
+       bool can_apply_seamless_boot = false;
+
+       for (i = 0; i < context->stream_count; i++) {
+               if (context->streams[i]->apply_seamless_boot_optimization) {
+                       can_apply_seamless_boot = true;
+                       break;
+               }
+       }
 
        for (i = 0; i < dc->res_pool->pipe_count; i++) {
                struct timing_generator *tg = dc->res_pool->timing_generators[i];
+               struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
+
+               /* There is assumption that pipe_ctx is not mapping irregularly
+                * to non-preferred front end. If pipe_ctx->stream is not NULL,
+                * we will use the pipe, so don't disable
+                */
+               if (pipe_ctx->stream != NULL)
+                       continue;
 
                if (tg->funcs->is_tg_enabled(tg))
                        tg->funcs->lock(tg);
                }
        }
 
-       dc->res_pool->mpc->funcs->mpc_init(dc->res_pool->mpc);
+       /* Cannot reset the MPC mux if seamless boot */
+       if (!can_apply_seamless_boot)
+               dc->res_pool->mpc->funcs->mpc_init(dc->res_pool->mpc);
 
        for (i = 0; i < dc->res_pool->pipe_count; i++) {
                struct timing_generator *tg = dc->res_pool->timing_generators[i];
                struct dpp *dpp = dc->res_pool->dpps[i];
                struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
 
+               // W/A for issue with dc_post_update_surfaces_to_stream
+               hubp->power_gated = true;
+
+               /* There is assumption that pipe_ctx is not mapping irregularly
+                * to non-preferred front end. If pipe_ctx->stream is not NULL,
+                * we will use the pipe, so don't disable
+                */
+               if (pipe_ctx->stream != NULL)
+                       continue;
+
                dpp->funcs->dpp_reset(dpp);
 
                pipe_ctx->stream_res.tg = tg;