for (i = 0; i < clk_mgr->base.ctx->dc->res_pool->pipe_count; i++) {
                int dpp_inst, dppclk_khz;
 
-               if (!context->res_ctx.pipe_ctx[i].plane_state)
-                       continue;
-
-               dpp_inst = context->res_ctx.pipe_ctx[i].plane_res.dpp->inst;
+               /* Loop index will match dpp->inst if resource exists,
+                * and we want to avoid dependency on dpp object
+                */
+               dpp_inst = i;
                dppclk_khz = context->res_ctx.pipe_ctx[i].plane_res.bw.dppclk_khz;
+
                clk_mgr->dccg->funcs->update_dpp_dto(
                                clk_mgr->dccg, dpp_inst, dppclk_khz);
        }
 
                update_dispclk = true;
        }
+
        if (dc->config.forced_clocks == false || (force_reset && safe_to_lower)) {
                if (dpp_clock_lowered) {
                        // if clock is being lowered, increase DTO before lowering refclk
                        // if clock is being raised, increase refclk before lowering DTO
                        if (update_dppclk || update_dispclk)
                                dcn20_update_clocks_update_dentist(clk_mgr);
-                       if (update_dppclk)
+                       // always update dtos unless clock is lowered and not safe to lower
+                       if (new_clocks->dppclk_khz >= dc->current_state->bw_ctx.bw.dcn.clk.dppclk_khz)
                                dcn20_update_clocks_update_dpp_dto(clk_mgr, context);
                }
        }
+
        if (update_dispclk &&
                        dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) {
                /*update dmcu for wait_loop count*/
 
                // if clock is being raised, increase refclk before lowering DTO
                if (update_dppclk || update_dispclk)
                        rn_vbios_smu_set_dppclk(clk_mgr, clk_mgr_base->clks.dppclk_khz);
-               if (update_dppclk)
+               // always update dtos unless clock is lowered and not safe to lower
+               if (new_clocks->dppclk_khz >= dc->current_state->bw_ctx.bw.dcn.clk.dppclk_khz)
                        dcn20_update_clocks_update_dpp_dto(clk_mgr, context);
        }
 
 
 
        dc_enable_stereo(dc, context, dc_streams, context->stream_count);
 
-       if (!dc->optimize_seamless_boot)
-               /* pplib is notified if disp_num changed */
-               dc->hwss.optimize_bandwidth(dc, context);
-
        for (i = 0; i < context->stream_count; i++)
                context->streams[i]->mode_changed = false;
 
 
        struct dpp *dpp = pipe_ctx->plane_res.dpp;
        struct dc_plane_state *plane_state = pipe_ctx->plane_state;
 
-       if (pipe_ctx->update_flags.bits.dppclk) {
+       if (pipe_ctx->update_flags.bits.dppclk)
                dpp->funcs->dpp_dppclk_control(dpp, false, true);
 
-               dc->res_pool->dccg->funcs->update_dpp_dto(
-                               dc->res_pool->dccg,
-                               dpp->inst,
-                               pipe_ctx->plane_res.bw.dppclk_khz);
-       }
-
        /* TODO: Need input parameter to tell current DCHUB pipe tie to which OTG
         * VTG is within DCHUBBUB which is commond block share by each pipe HUBP.
         * VTG is 1:1 mapping with OTG. Each pipe HUBP will select which VTG