SRII(DPP_CONTROL, DPP_TOP, 1), \
        SRII(DPP_CONTROL, DPP_TOP, 2), \
        SRII(DPP_CONTROL, DPP_TOP, 3), \
+       SRII(OPP_PIPE_CONTROL, OPP_PIPE, 0), \
+       SRII(OPP_PIPE_CONTROL, OPP_PIPE, 1), \
+       SRII(OPP_PIPE_CONTROL, OPP_PIPE, 2), \
+       SRII(OPP_PIPE_CONTROL, OPP_PIPE, 3), \
        SR(REFCLK_CNTL), \
        SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \
        SR(DC_IP_REQUEST_CNTL), \
        uint32_t DCHUBP_CNTL[4];
        uint32_t HUBP_CLK_CNTL[4];
        uint32_t DPP_CONTROL[4];
+       uint32_t OPP_PIPE_CONTROL[4];
        uint32_t REFCLK_CNTL;
        uint32_t DCHUBBUB_GLOBAL_TIMER_CNTL;
        uint32_t DC_IP_REQUEST_CNTL;
        HWS_SF(HUBP0_, DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh), \
        HWS_SF(HUBP0_, HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh), \
        HWS_SF(DPP_TOP0_, DPP_CONTROL, DPP_CLOCK_ENABLE, mask_sh), \
+       HWS_SF(OPP_PIPE0_, OPP_PIPE_CONTROL, OPP_PIPE_CLOCK_EN, mask_sh),\
        HWS_SF(, DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, mask_sh), \
        HWS_SF(, DC_IP_REQUEST_CNTL, IP_REQUEST_EN, mask_sh), \
        HWS_SF(, DOMAIN0_PG_CONFIG, DOMAIN0_POWER_FORCEON, mask_sh), \
        type DPP_CLOCK_ENABLE; \
        type DPPCLK_RATE_CONTROL; \
        type DCHUBBUB_GLOBAL_TIMER_ENABLE; \
+       type OPP_PIPE_CLOCK_EN;\
        type IP_REQUEST_EN; \
        type DOMAIN0_POWER_FORCEON; \
        type DOMAIN0_POWER_GATE; \
 
        struct transform *xfm = dc->res_pool->transforms[fe_idx];
        struct mpcc *mpcc = dc->res_pool->mpcc[fe_idx];
        struct timing_generator *tg = dc->res_pool->timing_generators[mpcc->opp_id];
+       unsigned int opp_id = mpcc->opp_id;
 
        /*Already reset*/
-       if (mpcc->opp_id == 0xf)
+       if (opp_id == 0xf)
                return;
 
        tg->funcs->lock(tg);
 
        mpcc->funcs->wait_for_idle(mpcc);
 
-       REG_UPDATE(HUBP_CLK_CNTL[fe_idx], HUBP_CLOCK_ENABLE, 0);
-       REG_UPDATE(DPP_CONTROL[fe_idx], DPP_CLOCK_ENABLE, 0);
+       REG_UPDATE(HUBP_CLK_CNTL[fe_idx],
+                       HUBP_CLOCK_ENABLE, 0);
+       REG_UPDATE(DPP_CONTROL[fe_idx],
+                       DPP_CLOCK_ENABLE, 0);
+       REG_UPDATE(OPP_PIPE_CONTROL[opp_id],
+                       OPP_PIPE_CLOCK_EN, 0);
 
        xfm->funcs->transform_reset(xfm);
 
                pipe_ctx->pipe_idx);
 
        /* enable DCFCLK current DCHUB */
-       REG_UPDATE(HUBP_CLK_CNTL[pipe_ctx->pipe_idx], HUBP_CLOCK_ENABLE, 1);
+       REG_UPDATE(HUBP_CLK_CNTL[pipe_ctx->pipe_idx],
+                       HUBP_CLOCK_ENABLE, 1);
+
+       /* make sure OPP_PIPE_CLOCK_EN = 1 */
+       REG_UPDATE(OPP_PIPE_CONTROL[pipe_ctx->tg->inst],
+                       OPP_PIPE_CLOCK_EN, 1);
 
        if (dc_surface) {
                dm_logger_write(dc->ctx->logger, LOG_DC,
 
 {
        ASSERT(mpcc10->base.opp_id == 0xf || opp_id == mpcc10->base.opp_id);
        mpcc10->base.opp_id = opp_id;
-       REG_UPDATE(OPP_PIPE_CONTROL[opp_id], OPP_PIPE_CLOCK_EN, 1);
        REG_SET(MUX[opp_id], 0, MPC_OUT_MUX, mpcc_id);
 }
 
 static void reset_output_mux(struct dcn10_mpcc *mpcc10)
 {
        REG_SET(MUX[mpcc10->base.opp_id], 0, MPC_OUT_MUX, 0xf);
-       REG_UPDATE(OPP_PIPE_CONTROL[mpcc10->base.opp_id], OPP_PIPE_CLOCK_EN, 0);
        mpcc10->base.opp_id = 0xf;
 }
 
 
 #define MAX_OPP 6
 
 #define MPC_COMMON_REG_LIST_DCN1_0(inst) \
-       SRII(MUX, MPC_OUT, inst),\
-       SRII(OPP_PIPE_CONTROL, OPP_PIPE, inst)
+       SRII(MUX, MPC_OUT, inst)
 
 #define MPCC_COMMON_REG_LIST_DCN1_0(inst) \
        SRI(MPCC_TOP_SEL, MPCC, inst),\
        uint32_t MPCC_BG_G_Y;
        uint32_t MPCC_BG_R_CR;
        uint32_t MPCC_BG_B_CB;
-       uint32_t OPP_PIPE_CONTROL[MAX_OPP];
        uint32_t MUX[MAX_OPP];
 };
 
        SF(MPCC0_MPCC_BG_G_Y, MPCC_BG_G_Y, mask_sh),\
        SF(MPCC0_MPCC_BG_R_CR, MPCC_BG_R_CR, mask_sh),\
        SF(MPCC0_MPCC_BG_B_CB, MPCC_BG_B_CB, mask_sh),\
-       SF(MPC_OUT0_MUX, MPC_OUT_MUX, mask_sh),\
-       SF(OPP_PIPE0_OPP_PIPE_CONTROL, OPP_PIPE_CLOCK_EN, mask_sh)
+       SF(MPC_OUT0_MUX, MPC_OUT_MUX, mask_sh)
 
 #define MPCC_REG_FIELD_LIST(type) \
        type MPCC_TOP_SEL;\
        type MPCC_BG_R_CR;\
        type MPCC_BG_B_CB;\
        type MPC_OUT_MUX;\
-       type OPP_PIPE_CLOCK_EN;\
 
 struct dcn_mpcc_shift {
        MPCC_REG_FIELD_LIST(uint8_t)