From: Tomasz Siemek <[email protected]>

[Why]
Pipe_ctx shouldn't be passed as block sequence block parameter.

[How]
- Adjust arguments for:
        - set_input_transfer_func,
        - populate_mcm_luts,
        - set_mcm_location_post_blend,
        - set_mcm_luts,
        - program_rmcm_luts.
- Remove const qualifier from plane_state in set_mcm_luts since it is
  mutated.

Reviewed-by: Alvin Lee <[email protected]>
Signed-off-by: Tomasz Siemek <[email protected]>
Signed-off-by: Ivan Lipski <[email protected]>
---
 .../drm/amd/display/dc/core/dc_hw_sequencer.c | 68 +++++++++++++++----
 .../amd/display/dc/hwss/dce110/dce110_hwseq.c | 11 ++-
 .../amd/display/dc/hwss/dce60/dce60_hwseq.c   |  3 +-
 .../amd/display/dc/hwss/dcn10/dcn10_hwseq.c   | 35 +++++-----
 .../amd/display/dc/hwss/dcn10/dcn10_hwseq.h   |  3 +-
 .../amd/display/dc/hwss/dcn20/dcn20_hwseq.c   | 63 ++++++++---------
 .../amd/display/dc/hwss/dcn20/dcn20_hwseq.h   |  7 +-
 .../amd/display/dc/hwss/dcn30/dcn30_hwseq.c   | 45 ++++++------
 .../amd/display/dc/hwss/dcn30/dcn30_hwseq.h   |  8 +--
 .../amd/display/dc/hwss/dcn32/dcn32_hwseq.c   | 60 ++++++++--------
 .../amd/display/dc/hwss/dcn32/dcn32_hwseq.h   | 10 +--
 .../amd/display/dc/hwss/dcn401/dcn401_hwseq.c | 29 ++++----
 .../amd/display/dc/hwss/dcn401/dcn401_hwseq.h |  6 +-
 .../amd/display/dc/hwss/dcn42/dcn42_hwseq.c   | 49 +++++++------
 .../amd/display/dc/hwss/dcn42/dcn42_hwseq.h   | 12 ++--
 .../drm/amd/display/dc/hwss/hw_sequencer.h    | 12 +++-
 .../display/dc/hwss/hw_sequencer_private.h    | 18 ++---
 17 files changed, 238 insertions(+), 201 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c
index 9e82980e809b0..d61c4d9488c59 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_hw_sequencer.c
@@ -1514,9 +1514,22 @@ void hwss_build_fast_sequence(struct dc *dc,
                                        (*num_steps)++;
                                }
                                if (hws->funcs.set_input_transfer_func && 
current_mpc_pipe->plane_state->update_bits.gamma_change) {
-                                       
block_sequence[*num_steps].params.set_input_transfer_func_params.dc = dc;
-                                       
block_sequence[*num_steps].params.set_input_transfer_func_params.pipe_ctx = 
current_mpc_pipe;
-                                       
block_sequence[*num_steps].params.set_input_transfer_func_params.plane_state = 
current_mpc_pipe->plane_state;
+                                       struct pipe_ctx *primary_dpp_pipe =
+                                               
resource_get_primary_dpp_pipe(current_mpc_pipe);
+
+                                       
block_sequence[*num_steps].params.set_input_transfer_func_params =
+                                               (struct 
set_input_transfer_func_params) {
+                                               .dc = dc,
+                                               .dpp = 
current_mpc_pipe->plane_res.dpp,
+                                               .hubp = 
current_mpc_pipe->plane_res.hubp,
+                                               .primary_hubp = 
primary_dpp_pipe ?
+                                                       
primary_dpp_pipe->plane_res.hubp : current_mpc_pipe->plane_res.hubp,
+                                               .ipp = 
current_mpc_pipe->plane_res.ipp,
+                                               .mpc = dc->res_pool->mpc,
+                                               .mpcc_id = 
current_mpc_pipe->plane_res.mpcc_inst,
+                                               .stream = 
current_mpc_pipe->stream,
+                                               .plane_state = 
current_mpc_pipe->plane_state,
+                                       };
                                        block_sequence[*num_steps].func = 
DPP_SET_INPUT_TRANSFER_FUNC;
                                        (*num_steps)++;
                                }
@@ -1717,9 +1730,7 @@ void hwss_execute_sequence(struct dc *dc,
                                        
params->update_plane_addr_params.pipe_ctx);
                        break;
                case DPP_SET_INPUT_TRANSFER_FUNC:
-                       
hws->funcs.set_input_transfer_func(params->set_input_transfer_func_params.dc,
-                                       
params->set_input_transfer_func_params.pipe_ctx,
-                                       
params->set_input_transfer_func_params.plane_state);
+                       
hws->funcs.set_input_transfer_func(&params->set_input_transfer_func_params);
                        break;
                case DPP_PROGRAM_GAMUT_REMAP:
                        if (dc->hwss.program_gamut_remap)
@@ -2290,15 +2301,25 @@ void hwss_add_hubp_update_plane_addr(struct 
block_sequence_state *seq_state,
 /*
  * Helper function to add DPP set input transfer function to block sequence
  */
-void hwss_add_dpp_set_input_transfer_func(struct block_sequence_state 
*seq_state,
-               struct dc *dc,
-               struct pipe_ctx *pipe_ctx,
-               struct dc_plane_state *plane_state)
+void hwss_add_dpp_set_input_transfer_func(struct block_sequence_state 
*seq_state, struct dc *dc,
+       struct pipe_ctx *pipe_ctx)
 {
        if (*seq_state->num_steps < MAX_HWSS_BLOCK_SEQUENCE_SIZE) {
-               
seq_state->steps[*seq_state->num_steps].params.set_input_transfer_func_params.dc
 = dc;
-               
seq_state->steps[*seq_state->num_steps].params.set_input_transfer_func_params.pipe_ctx
 = pipe_ctx;
-               
seq_state->steps[*seq_state->num_steps].params.set_input_transfer_func_params.plane_state
 = plane_state;
+               struct pipe_ctx *primary_dpp_pipe = 
resource_get_primary_dpp_pipe(pipe_ctx);
+
+               
seq_state->steps[*seq_state->num_steps].params.set_input_transfer_func_params =
+                       (struct set_input_transfer_func_params) {
+                       .dc = dc,
+                       .dpp = pipe_ctx->plane_res.dpp,
+                       .hubp = pipe_ctx->plane_res.hubp,
+                       .primary_hubp = primary_dpp_pipe ?
+                               primary_dpp_pipe->plane_res.hubp : 
pipe_ctx->plane_res.hubp,
+                       .ipp = pipe_ctx->plane_res.ipp,
+                       .mpc = dc->res_pool->mpc,
+                       .mpcc_id = pipe_ctx->plane_res.mpcc_inst,
+                       .plane_state = pipe_ctx->plane_state,
+                       .stream = pipe_ctx->stream,
+               };
                seq_state->steps[*seq_state->num_steps].func = 
DPP_SET_INPUT_TRANSFER_FUNC;
                (*seq_state->num_steps)++;
        }
@@ -4544,6 +4565,26 @@ void hwss_disable_audio_stream(struct dc *dc, union 
block_sequence_params *param
                        params->disable_audio_stream_params.pipe_ctx);
 }
 
+void hwss_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx)
+{
+       if (dc->hwseq->funcs.set_input_transfer_func) {
+               struct pipe_ctx *primary_dpp_pipe = 
resource_get_primary_dpp_pipe(pipe_ctx);
+
+               dc->hwseq->funcs.set_input_transfer_func(&(struct 
set_input_transfer_func_params) {
+                       .dc = dc,
+                       .dpp = pipe_ctx->plane_res.dpp,
+                       .hubp = pipe_ctx->plane_res.hubp,
+                       .primary_hubp = primary_dpp_pipe ?
+                               primary_dpp_pipe->plane_res.hubp : 
pipe_ctx->plane_res.hubp,
+                       .ipp = pipe_ctx->plane_res.ipp,
+                       .mpc = dc->res_pool->mpc,
+                       .mpcc_id = pipe_ctx->plane_res.mpcc_inst,
+                       .plane_state = pipe_ctx->plane_state,
+                       .stream = pipe_ctx->stream,
+               });
+       }
+}
+
 void hwss_prepare_bandwidth(struct dc *dc, union block_sequence_params *params)
 {
        if (dc && dc->hwss.prepare_bandwidth)
@@ -6203,4 +6244,3 @@ void hwss_hubp_wait_for_dcc_meta_prop(struct dc *dc, 
struct pipe_ctx *top_pipe_t
                dc->hwss.wait_for_dcc_meta_propagation(delay);
        }
 }
-
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
index ff0c6e64c2b4a..ef91c61033a33 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
@@ -283,11 +283,10 @@ static void dce110_prescale_params(struct 
ipp_prescale_params *prescale_params,
 }
 
 static bool
-dce110_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx,
-                              const struct dc_plane_state *plane_state)
+dce110_set_input_transfer_func(struct set_input_transfer_func_params *params)
 {
-       (void)dc;
-       struct input_pixel_processor *ipp = pipe_ctx->plane_res.ipp;
+       struct input_pixel_processor *ipp = params->ipp;
+       struct dc_plane_state *plane_state = params->plane_state;
        const struct dc_transfer_func *tf = NULL;
        struct ipp_prescale_params prescale_params = { 0 };
        bool result = true;
@@ -3140,7 +3139,6 @@ static void dce110_program_front_end_for_pipe(
        struct xfm_grph_csc_adjustment adjust;
        struct out_csc_color_matrix tbl_entry;
        unsigned int i;
-       struct dce_hwseq *hws = dc->hwseq;
 
        memset(&tbl_entry, 0, sizeof(tbl_entry));
 
@@ -3199,7 +3197,7 @@ static void dce110_program_front_end_for_pipe(
        if (pipe_ctx->plane_state->update_bits.full_update ||
                        
pipe_ctx->plane_state->update_bits.in_transfer_func_change ||
                        pipe_ctx->plane_state->update_bits.gamma_change)
-               hws->funcs.set_input_transfer_func(dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_set_input_transfer_func(dc, pipe_ctx);
 
        if (pipe_ctx->plane_state->update_bits.full_update)
                hwss_set_output_transfer_func(dc, pipe_ctx);
@@ -3689,5 +3687,6 @@ void dce110_hw_sequencer_construct(struct dc *dc)
        dc->hwss = dce110_funcs;
        dc->hwseq->funcs = dce110_private_funcs;
 }
+
 #endif /* CONFIG_DRM_AMD_DC_DCE */
 
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce60/dce60_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dce60/dce60_hwseq.c
index 221996b348abf..1652e47716a0a 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dce60/dce60_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dce60/dce60_hwseq.c
@@ -275,7 +275,6 @@ dce60_program_front_end_for_pipe(
        struct xfm_grph_csc_adjustment adjust;
        struct out_csc_color_matrix tbl_entry;
        unsigned int i;
-       struct dce_hwseq *hws = dc->hwseq;
 
        DC_LOGGER_INIT();
        memset(&tbl_entry, 0, sizeof(tbl_entry));
@@ -335,7 +334,7 @@ dce60_program_front_end_for_pipe(
        if (pipe_ctx->plane_state->update_bits.full_update ||
                        
pipe_ctx->plane_state->update_bits.in_transfer_func_change ||
                        pipe_ctx->plane_state->update_bits.gamma_change)
-               hws->funcs.set_input_transfer_func(dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_set_input_transfer_func(dc, pipe_ctx);
 
        if (pipe_ctx->plane_state->update_bits.full_update)
                hwss_set_output_transfer_func(dc, pipe_ctx);
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
index 2739f7acce988..d76fc6ef38c4e 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
@@ -2083,39 +2083,38 @@ void dcn10_update_plane_addr(const struct dc *dc, 
struct pipe_ctx *pipe_ctx)
                pipe_ctx->plane_state->address.grph_stereo.left_addr = addr;
 }
 
-bool dcn10_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state)
+bool dcn10_set_input_transfer_func(struct set_input_transfer_func_params 
*params)
 {
-       (void)dc;
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
+       struct dpp *dpp = params->dpp;
+       struct dc_plane_state *plane_state = params->plane_state;
        const struct dc_transfer_func *tf = NULL;
        bool result = true;
 
-       if (dpp_base == NULL)
+       if (dpp == NULL)
                return false;
 
        tf = &plane_state->in_transfer_func;
 
-       if (!dpp_base->ctx->dc->debug.always_use_regamma
+       if (!dpp->ctx->dc->debug.always_use_regamma
                && !plane_state->gamma_correction.is_identity
                        && dce_use_lut(plane_state->format))
-               dpp_base->funcs->dpp_program_input_lut(dpp_base, 
&plane_state->gamma_correction);
+               dpp->funcs->dpp_program_input_lut(dpp, 
&plane_state->gamma_correction);
 
        if (tf->type == TF_TYPE_PREDEFINED) {
                switch (tf->tf) {
                case TRANSFER_FUNCTION_SRGB:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_HW_sRGB);
+                       dpp->funcs->dpp_set_degamma(dpp, 
IPP_DEGAMMA_MODE_HW_sRGB);
                        break;
                case TRANSFER_FUNCTION_BT709:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_HW_xvYCC);
+                       dpp->funcs->dpp_set_degamma(dpp, 
IPP_DEGAMMA_MODE_HW_xvYCC);
                        break;
                case TRANSFER_FUNCTION_LINEAR:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_BYPASS);
+                       dpp->funcs->dpp_set_degamma(dpp, 
IPP_DEGAMMA_MODE_BYPASS);
                        break;
                case TRANSFER_FUNCTION_PQ:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_USER_PWL);
-                       cm_helper_translate_curve_to_degamma_hw_format(tf, 
&dpp_base->degamma_params);
-                       dpp_base->funcs->dpp_program_degamma_pwl(dpp_base, 
&dpp_base->degamma_params);
+                       dpp->funcs->dpp_set_degamma(dpp, 
IPP_DEGAMMA_MODE_USER_PWL);
+                       cm_helper_translate_curve_to_degamma_hw_format(tf, 
&dpp->degamma_params);
+                       dpp->funcs->dpp_program_degamma_pwl(dpp, 
&dpp->degamma_params);
                        result = true;
                        break;
                default:
@@ -2123,12 +2122,12 @@ bool dcn10_set_input_transfer_func(struct dc *dc, 
struct pipe_ctx *pipe_ctx,
                        break;
                }
        } else if (tf->type == TF_TYPE_BYPASS) {
-               dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_BYPASS);
+               dpp->funcs->dpp_set_degamma(dpp, IPP_DEGAMMA_MODE_BYPASS);
        } else {
                cm_helper_translate_curve_to_degamma_hw_format(tf,
-                                       &dpp_base->degamma_params);
-               dpp_base->funcs->dpp_program_degamma_pwl(dpp_base,
-                               &dpp_base->degamma_params);
+                                       &dpp->degamma_params);
+               dpp->funcs->dpp_program_degamma_pwl(dpp,
+                               &dpp->degamma_params);
                result = true;
        }
 
@@ -3303,7 +3302,7 @@ void dcn10_program_pipe(
        if (pipe_ctx->plane_state->update_bits.full_update ||
                        
pipe_ctx->plane_state->update_bits.in_transfer_func_change ||
                        pipe_ctx->plane_state->update_bits.gamma_change)
-               hws->funcs.set_input_transfer_func(dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_set_input_transfer_func(dc, pipe_ctx);
 
        /* dcn10_translate_regamma_to_hw_format takes 750us to finish
         * only do gamma programming for full update.
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.h
index a93109c2199b1..1f36bd58beb24 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.h
@@ -74,8 +74,7 @@ void dcn10_program_output_csc(struct dc *dc,
                uint16_t *matrix,
                int opp_id);
 bool dcn10_set_output_transfer_func(struct set_output_transfer_func_params 
*params);
-bool dcn10_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state);
+bool dcn10_set_input_transfer_func(struct set_input_transfer_func_params 
*params);
 void dcn10_update_plane_addr(const struct dc *dc, struct pipe_ctx *pipe_ctx);
 void dcn10_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx);
 void dcn10_reset_hw_ctx_wrap(
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
index 66e2a6eb41c09..23e191d472991 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
@@ -1065,9 +1065,8 @@ bool dcn20_set_output_transfer_func(struct 
set_output_transfer_func_params *otf_
 }
 
 bool dcn20_set_blend_lut(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state)
+       struct dpp *dpp, struct dc_plane_state *plane_state)
 {
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
        bool result = true;
        const struct pwl_params *blend_lut = NULL;
 
@@ -1076,18 +1075,17 @@ bool dcn20_set_blend_lut(
        else if (plane_state->cm.blend_func.type == TF_TYPE_DISTRIBUTED_POINTS) 
{
                cm_helper_translate_curve_to_hw_format(plane_state->ctx,
                                &plane_state->cm.blend_func,
-                               &dpp_base->regamma_params, false);
-               blend_lut = &dpp_base->regamma_params;
+                               &dpp->regamma_params, false);
+               blend_lut = &dpp->regamma_params;
        }
-       result = dpp_base->funcs->dpp_program_blnd_lut(dpp_base, blend_lut);
+       result = dpp->funcs->dpp_program_blnd_lut(dpp, blend_lut);
 
        return result;
 }
 
 bool dcn20_set_shaper_3dlut(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state)
+       struct dpp *dpp, struct dc_plane_state *plane_state)
 {
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
        bool result = true;
        const struct pwl_params *shaper_lut = NULL;
 
@@ -1096,35 +1094,34 @@ bool dcn20_set_shaper_3dlut(
        else if (plane_state->cm.shaper_func.type == 
TF_TYPE_DISTRIBUTED_POINTS) {
                cm_helper_translate_curve_to_hw_format(plane_state->ctx,
                                &plane_state->cm.shaper_func,
-                               &dpp_base->shaper_params, true);
-               shaper_lut = &dpp_base->shaper_params;
+                               &dpp->shaper_params, true);
+               shaper_lut = &dpp->shaper_params;
        }
 
-       result = dpp_base->funcs->dpp_program_shaper_lut(dpp_base, shaper_lut);
+       dpp->funcs->dpp_program_shaper_lut(dpp, shaper_lut);
        if (plane_state->cm.lut3d_func.state.bits.initialized == 1)
-               result = dpp_base->funcs->dpp_program_3dlut(dpp_base,
+               result = dpp->funcs->dpp_program_3dlut(dpp,
                                                                
&plane_state->cm.lut3d_func.lut_3d);
        else
-               result = dpp_base->funcs->dpp_program_3dlut(dpp_base, NULL);
+               result = dpp->funcs->dpp_program_3dlut(dpp, NULL);
 
        return result;
 }
 
-bool dcn20_set_input_transfer_func(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state)
+bool dcn20_set_input_transfer_func(struct set_input_transfer_func_params 
*params)
 {
-       struct dce_hwseq *hws = dc->hwseq;
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
+       struct dpp *dpp = params->dpp;
+       struct dc_plane_state *plane_state = params->plane_state;
+       struct dce_hwseq *hws = params->dc->hwseq;
        const struct dc_transfer_func *tf = NULL;
        bool result = true;
        bool use_degamma_ram = false;
 
-       if (dpp_base == NULL || plane_state == NULL)
+       if (dpp == NULL || plane_state == NULL)
                return false;
 
-       hws->funcs.set_shaper_3dlut(pipe_ctx, plane_state);
-       hws->funcs.set_blend_lut(pipe_ctx, plane_state);
+       hws->funcs.set_shaper_3dlut(dpp, plane_state);
+       hws->funcs.set_blend_lut(dpp, plane_state);
 
        tf = &plane_state->in_transfer_func;
 
@@ -1133,13 +1130,13 @@ bool dcn20_set_input_transfer_func(struct dc *dc,
 
        if (use_degamma_ram == true) {
                if (tf->type == TF_TYPE_HWPWL)
-                       dpp_base->funcs->dpp_program_degamma_pwl(dpp_base,
+                       dpp->funcs->dpp_program_degamma_pwl(dpp,
                                        &tf->pwl);
                else if (tf->type == TF_TYPE_DISTRIBUTED_POINTS) {
                        cm_helper_translate_curve_to_degamma_hw_format(tf,
-                                       &dpp_base->degamma_params);
-                       dpp_base->funcs->dpp_program_degamma_pwl(dpp_base,
-                               &dpp_base->degamma_params);
+                                       &dpp->degamma_params);
+                       dpp->funcs->dpp_program_degamma_pwl(dpp,
+                               &dpp->degamma_params);
                }
                return true;
        }
@@ -1149,21 +1146,21 @@ bool dcn20_set_input_transfer_func(struct dc *dc,
        if (tf->type == TF_TYPE_PREDEFINED) {
                switch (tf->tf) {
                case TRANSFER_FUNCTION_SRGB:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base,
+                       dpp->funcs->dpp_set_degamma(dpp,
                                        IPP_DEGAMMA_MODE_HW_sRGB);
                        break;
                case TRANSFER_FUNCTION_BT709:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base,
+                       dpp->funcs->dpp_set_degamma(dpp,
                                        IPP_DEGAMMA_MODE_HW_xvYCC);
                        break;
                case TRANSFER_FUNCTION_LINEAR:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base,
+                       dpp->funcs->dpp_set_degamma(dpp,
                                        IPP_DEGAMMA_MODE_BYPASS);
                        break;
                case TRANSFER_FUNCTION_PQ:
-                       dpp_base->funcs->dpp_set_degamma(dpp_base, 
IPP_DEGAMMA_MODE_USER_PWL);
-                       cm_helper_translate_curve_to_degamma_hw_format(tf, 
&dpp_base->degamma_params);
-                       dpp_base->funcs->dpp_program_degamma_pwl(dpp_base, 
&dpp_base->degamma_params);
+                       dpp->funcs->dpp_set_degamma(dpp, 
IPP_DEGAMMA_MODE_USER_PWL);
+                       cm_helper_translate_curve_to_degamma_hw_format(tf, 
&dpp->degamma_params);
+                       dpp->funcs->dpp_program_degamma_pwl(dpp, 
&dpp->degamma_params);
                        result = true;
                        break;
                default:
@@ -1171,7 +1168,7 @@ bool dcn20_set_input_transfer_func(struct dc *dc,
                        break;
                }
        } else if (tf->type == TF_TYPE_BYPASS)
-               dpp_base->funcs->dpp_set_degamma(dpp_base,
+               dpp->funcs->dpp_set_degamma(dpp,
                                IPP_DEGAMMA_MODE_BYPASS);
        else {
                /*
@@ -1179,7 +1176,7 @@ bool dcn20_set_input_transfer_func(struct dc *dc,
                 * fix is required for this use case
                 */
                BREAK_TO_DEBUGGER();
-               dpp_base->funcs->dpp_set_degamma(dpp_base,
+               dpp->funcs->dpp_set_degamma(dpp,
                                IPP_DEGAMMA_MODE_BYPASS);
        }
 
@@ -1987,7 +1984,7 @@ static void dcn20_program_pipe(
                        pipe_ctx->plane_state->update_bits.gamma_change ||
                        pipe_ctx->plane_state->update_bits.lut_3d ||
                        pipe_ctx->update_flags.bits.enable))
-               hws->funcs.set_input_transfer_func(dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_set_input_transfer_func(dc, pipe_ctx);
 
        /* dcn10_translate_regamma_to_hw_format takes 750us to finish
         * only do gamma programming for powering on, internal memcmp to avoid
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.h
index 749348d3c7938..9312c88e31ad9 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.h
@@ -31,9 +31,9 @@
 void dcn20_log_color_state(struct dc *dc,
                           struct dc_log_buffer_ctx *log_ctx);
 bool dcn20_set_blend_lut(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state);
+       struct dpp *dpp, struct dc_plane_state *plane_state);
 bool dcn20_set_shaper_3dlut(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state);
+       struct dpp *dpp, struct dc_plane_state *plane_state);
 void dcn20_program_front_end_for_ctx(
                struct dc *dc,
                struct dc_state *context);
@@ -42,8 +42,7 @@ void dcn20_post_unlock_program_front_end(
                struct dc_state *context);
 void dcn20_update_plane_addr(const struct dc *dc, struct pipe_ctx *pipe_ctx);
 void dcn20_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx);
-bool dcn20_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state);
+bool dcn20_set_input_transfer_func(struct set_input_transfer_func_params 
*params);
 bool dcn20_set_output_transfer_func(struct set_output_transfer_func_params 
*params);
 void dcn20_program_output_csc(struct dc *dc,
                struct pipe_ctx *pipe_ctx,
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
index 8c29aa2cd2c92..71608f07be938 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
@@ -234,9 +234,8 @@ void dcn30_log_color_state(struct dc *dc,
 }
 
 bool dcn30_set_blend_lut(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state)
+       struct dpp *dpp, struct dc_plane_state *plane_state)
 {
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
        bool result = true;
        const struct pwl_params *blend_lut = NULL;
 
@@ -245,14 +244,14 @@ bool dcn30_set_blend_lut(
        else if (plane_state->cm.blend_func.type == TF_TYPE_DISTRIBUTED_POINTS) 
{
                result = 
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
                                &plane_state->cm.blend_func,
-                               &dpp_base->regamma_params,
+                               &dpp->regamma_params,
                                false);
                if (!result)
                        return result;
 
-               blend_lut = &dpp_base->regamma_params;
+               blend_lut = &dpp->regamma_params;
        }
-       result = dpp_base->funcs->dpp_program_blnd_lut(dpp_base, blend_lut);
+       result = dpp->funcs->dpp_program_blnd_lut(dpp, blend_lut);
 
        return result;
 }
@@ -314,17 +313,16 @@ static bool dcn30_set_mpc_shaper_3dlut(struct dpp *dpp, 
struct mpc *mpc,
        return result;
 }
 
-bool dcn30_set_input_transfer_func(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state)
+bool dcn30_set_input_transfer_func(struct set_input_transfer_func_params 
*params)
 {
-       struct dce_hwseq *hws = dc->hwseq;
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
+       struct dpp *dpp = params->dpp;
+       struct dce_hwseq *hws = params->dc->hwseq;
+       struct dc_plane_state *plane_state = params->plane_state;
        enum dc_transfer_func_predefined tf;
        bool result = true;
-       const struct pwl_params *params = NULL;
+       const struct pwl_params *pwl_params = NULL;
 
-       if (dpp_base == NULL || plane_state == NULL)
+       if (dpp == NULL || plane_state == NULL)
                return false;
 
        tf = TRANSFER_FUNCTION_UNITY;
@@ -332,25 +330,24 @@ bool dcn30_set_input_transfer_func(struct dc *dc,
        if (plane_state->in_transfer_func.type == TF_TYPE_PREDEFINED)
                tf = plane_state->in_transfer_func.tf;
 
-       dpp_base->funcs->dpp_set_pre_degam(dpp_base, tf);
+       dpp->funcs->dpp_set_pre_degam(dpp, tf);
 
        if (plane_state->in_transfer_func.type == TF_TYPE_HWPWL)
-               params = &plane_state->in_transfer_func.pwl;
+               pwl_params = &plane_state->in_transfer_func.pwl;
        else if (plane_state->in_transfer_func.type == 
TF_TYPE_DISTRIBUTED_POINTS &&
                cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
                                                        
&plane_state->in_transfer_func,
-                                                       
&dpp_base->degamma_params, false))
-               params = &dpp_base->degamma_params;
+                                                       &dpp->degamma_params, 
false))
+               pwl_params = &dpp->degamma_params;
 
-       result = dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params);
+       result = dpp->funcs->dpp_program_gamcor_lut(dpp, pwl_params);
+
+       if (dpp->funcs->dpp_program_blnd_lut)
+               hws->funcs.set_blend_lut(dpp, plane_state);
+       if (dpp->funcs->dpp_program_shaper_lut &&
+                       dpp->funcs->dpp_program_3dlut)
+               hws->funcs.set_shaper_3dlut(dpp, plane_state);
 
-       if (pipe_ctx->stream_res.opp && pipe_ctx->stream_res.opp->ctx) {
-               if (dpp_base->funcs->dpp_program_blnd_lut)
-                       hws->funcs.set_blend_lut(pipe_ctx, plane_state);
-               if (dpp_base->funcs->dpp_program_shaper_lut &&
-                               dpp_base->funcs->dpp_program_3dlut)
-                       hws->funcs.set_shaper_3dlut(pipe_ctx, plane_state);
-       }
 
        return result;
 }
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.h
index 0399642076eb5..65014d42195ca 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.h
@@ -56,12 +56,10 @@ bool dcn30_mmhubbub_warmup(
 void dcn30_log_color_state(struct dc *dc,
                           struct dc_log_buffer_ctx *log_ctx);
 
-bool dcn30_set_blend_lut(struct pipe_ctx *pipe_ctx,
-               const struct dc_plane_state *plane_state);
+bool dcn30_set_blend_lut(struct dpp *dpp,
+               struct dc_plane_state *plane_state);
 
-bool dcn30_set_input_transfer_func(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state);
+bool dcn30_set_input_transfer_func(struct set_input_transfer_func_params 
*params);
 
 void dcn30_program_gamut_remap(struct program_gamut_remap_params *params);
 
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c
index e188796cf272d..ec38fc2ba65cc 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c
@@ -477,26 +477,30 @@ bool dcn32_set_mpc_shaper_3dlut(struct dpp *dpp, struct 
mpc *mpc,
        return result;
 }
 
-bool dcn32_set_mcm_luts(
-       struct pipe_ctx *pipe_ctx, const struct dc_plane_state *plane_state)
+bool dcn32_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+       struct hubp *primary_hubp, struct mpc *mpc, int mpcc_id,
+       struct dc_stream_state *stream,
+       struct dc_plane_state *plane_state)
 {
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
-       int mpcc_id = pipe_ctx->plane_res.hubp->inst;
-       struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
        bool rval, result;
        const struct pwl_params *lut_params = NULL;
 
+       (void)dc;
+       (void)hubp;
+       (void)primary_hubp;
+       (void)stream;
+
        // 1D LUT
        if (plane_state->cm.blend_func.type == TF_TYPE_HWPWL)
                lut_params = &plane_state->cm.blend_func.pwl;
        else if (plane_state->cm.blend_func.type == TF_TYPE_DISTRIBUTED_POINTS) 
{
                result = cm3_helper_translate_curve_to_degamma_hw_format(
                        &plane_state->cm.blend_func,
-                       &dpp_base->regamma_params);
+                       &dpp->regamma_params);
                if (!result)
                        return result;
 
-               lut_params = &dpp_base->regamma_params;
+               lut_params = &dpp->regamma_params;
        }
        mpc->funcs->program_1dlut(mpc, lut_params, mpcc_id);
        lut_params = NULL;
@@ -505,12 +509,12 @@ bool dcn32_set_mcm_luts(
        if (plane_state->cm.shaper_func.type == TF_TYPE_HWPWL)
                lut_params = &plane_state->cm.shaper_func.pwl;
        else if (plane_state->cm.shaper_func.type == 
TF_TYPE_DISTRIBUTED_POINTS) {
-               // TODO: dpp_base replace
+               // TODO: dpp replace
                rval = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
                        &plane_state->cm.shaper_func,
-                       &dpp_base->shaper_params,
+                       &dpp->shaper_params,
                        true);
-               lut_params = rval ? &dpp_base->shaper_params : NULL;
+               lut_params = rval ? &dpp->shaper_params : NULL;
        }
 
        mpc->funcs->program_shaper(mpc, lut_params, mpcc_id);
@@ -524,19 +528,17 @@ bool dcn32_set_mcm_luts(
        return result;
 }
 
-bool dcn32_set_input_transfer_func(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state)
+bool dcn32_set_input_transfer_func(struct set_input_transfer_func_params 
*params)
 {
-       struct dce_hwseq *hws = dc->hwseq;
-       struct mpc *mpc = dc->res_pool->mpc;
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
+       struct dce_hwseq *hws = params->dc->hwseq;
+       struct dpp *dpp = params->dpp;
+       struct dc_plane_state *plane_state = params->plane_state;
 
        enum dc_transfer_func_predefined tf;
        bool result = true;
-       const struct pwl_params *params = NULL;
+       const struct pwl_params *pwl_params = NULL;
 
-       if (mpc == NULL || plane_state == NULL)
+       if (params->mpc == NULL || plane_state == NULL)
                return false;
 
        tf = TRANSFER_FUNCTION_UNITY;
@@ -544,24 +546,24 @@ bool dcn32_set_input_transfer_func(struct dc *dc,
        if (plane_state->in_transfer_func.type == TF_TYPE_PREDEFINED)
                tf = plane_state->in_transfer_func.tf;
 
-       if (dpp_base->funcs->dpp_set_pregam_state)
-               dpp_base->funcs->dpp_set_pregam_state(dpp_base, tf, 
plane_state->scaling_linearity);
+       if (dpp->funcs->dpp_set_pregam_state)
+               dpp->funcs->dpp_set_pregam_state(dpp, tf, 
plane_state->scaling_linearity);
        else
-               dpp_base->funcs->dpp_set_pre_degam(dpp_base, tf);
+               dpp->funcs->dpp_set_pre_degam(dpp, tf);
 
        if (plane_state->in_transfer_func.type == TF_TYPE_HWPWL)
-               params = &plane_state->in_transfer_func.pwl;
+               pwl_params = &plane_state->in_transfer_func.pwl;
        else if (plane_state->in_transfer_func.type == 
TF_TYPE_DISTRIBUTED_POINTS &&
                
cm3_helper_translate_curve_to_degamma_hw_format(&plane_state->in_transfer_func,
-                                                               
&dpp_base->degamma_params))
-               params = &dpp_base->degamma_params;
+                                                               
&dpp->degamma_params))
+               pwl_params = &dpp->degamma_params;
 
-       dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params);
+       dpp->funcs->dpp_program_gamcor_lut(dpp, pwl_params);
 
-       if (pipe_ctx->stream_res.opp &&
-                       pipe_ctx->stream_res.opp->ctx &&
-                       hws->funcs.set_mcm_luts)
-               result = hws->funcs.set_mcm_luts(pipe_ctx, plane_state);
+       if (hws->funcs.set_mcm_luts)
+               result = hws->funcs.set_mcm_luts(params->dc, dpp, params->hubp,
+                       params->primary_hubp, params->mpc, params->mpcc_id,
+                       params->stream, plane_state);
 
        return result;
 }
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.h
index 090d94d38343b..c85ff14596afb 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.h
@@ -47,12 +47,12 @@ void dcn32_cab_for_ss_control(struct dc *dc, bool enable);
 
 void dcn32_commit_subvp_config(struct dc *dc, struct dc_state *context);
 
-bool dcn32_set_mcm_luts(struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state);
+bool dcn32_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+                               struct hubp *primary_hubp, struct mpc *mpc, int 
mpcc_id,
+                               struct dc_stream_state *stream,
+                               struct dc_plane_state *plane_state);
 
-bool dcn32_set_input_transfer_func(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state);
+bool dcn32_set_input_transfer_func(struct set_input_transfer_func_params 
*params);
 
 bool dcn32_set_mpc_shaper_3dlut(struct dpp *dpp_base, struct mpc *mpc,
        int mpcc_id, const struct dc_stream_state *stream);
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
index bdefe699f8ca2..0e107754c891e 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
@@ -421,18 +421,12 @@ void dcn401_trigger_3dlut_dma_load(struct pipe_ctx 
*pipe_ctx)
        }
 }
 
-bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state)
+bool dcn401_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+                               struct hubp *primary_hubp, struct mpc *mpc, int 
mpcc_id,
+                               struct dc_stream_state *stream,
+                               struct dc_plane_state *plane_state)
 {
-       struct dc *dc = pipe_ctx->plane_res.hubp->ctx->dc;
-       const struct pipe_ctx *primary_dpp_pipe_ctx = 
resource_get_primary_dpp_pipe(pipe_ctx);
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
-       struct hubp *hubp = pipe_ctx->plane_res.hubp;
-       struct hubp *primary_hubp = primary_dpp_pipe_ctx ?
-                       primary_dpp_pipe_ctx->plane_res.hubp : hubp;   /* fall 
back to current pipe */
        const struct dc_plane_cm *cm = &plane_state->cm;
-       int mpcc_id = hubp->inst;
-       struct mpc *mpc = dc->res_pool->mpc;
        union mcm_lut_params m_lut_params;
        struct dc_3dlut_dma lut3d_dma;
        bool lut_enable;
@@ -440,6 +434,9 @@ bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
        bool rval;
        bool result = true;
 
+       (void)dc;
+       (void)stream;
+
        /* decide LUT bank based on current in use */
        mpc->funcs->get_lut_mode(mpc, MCM_LUT_1DLUT, mpcc_id, &lut_enable, 
&lut_bank_a);
        if (!lut_enable) {
@@ -466,9 +463,9 @@ bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
                else if (cm->blend_func.type == TF_TYPE_DISTRIBUTED_POINTS) {
                        rval = 
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
                                        &cm->blend_func,
-                                       &dpp_base->regamma_params,
+                                       &dpp->regamma_params,
                                        false);
-                       m_lut_params.pwl = rval ? &dpp_base->regamma_params : 
NULL;
+                       m_lut_params.pwl = rval ? &dpp->regamma_params : NULL;
                }
 
                if (!m_lut_params.pwl) {
@@ -493,9 +490,9 @@ bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
                        ASSERT(false);
                        rval = 
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
                                        &cm->shaper_func,
-                                       &dpp_base->shaper_params,
+                                       &dpp->shaper_params,
                                        true);
-                       m_lut_params.pwl = rval ? &dpp_base->shaper_params : 
NULL;
+                       m_lut_params.pwl = rval ? &dpp->shaper_params : NULL;
                }
                if (!m_lut_params.pwl) {
                        lut_enable = false;
@@ -2291,7 +2288,7 @@ void dcn401_program_pipe(
                        pipe_ctx->plane_state->update_bits.gamma_change ||
                        pipe_ctx->plane_state->update_bits.lut_3d ||
                        pipe_ctx->update_flags.bits.enable))
-               hws->funcs.set_input_transfer_func(dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_set_input_transfer_func(dc, pipe_ctx);
 
        /* dcn10_translate_regamma_to_hw_format takes 750us to finish
         * only do gamma programming for powering on, internal memcmp to avoid
@@ -2448,7 +2445,7 @@ void dcn401_program_pipe_sequence(
                        pipe_ctx->plane_state->update_bits.lut_3d ||
                        pipe_ctx->update_flags.bits.enable)) {
 
-               hwss_add_dpp_set_input_transfer_func(seq_state, dc, pipe_ctx, 
pipe_ctx->plane_state);
+               hwss_add_dpp_set_input_transfer_func(seq_state, dc, pipe_ctx);
        }
 
        /* dcn10_translate_regamma_to_hw_format takes 750us to finish
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
index 2e3392c963d03..c08fd359b38b0 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
@@ -36,8 +36,10 @@ void dcn401_program_gamut_remap(struct 
program_gamut_remap_params *params);
 
 void dcn401_init_hw(struct dc *dc);
 
-bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state);
+bool dcn401_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+                               struct hubp *primary_hubp, struct mpc *mpc, int 
mpcc_id,
+                               struct dc_stream_state *stream,
+                               struct dc_plane_state *plane_state);
 bool dcn401_set_output_transfer_func(struct set_output_transfer_func_params 
*params);
 void dcn401_trigger_3dlut_dma_load(struct pipe_ctx *pipe_ctx);
 void dcn401_calculate_dccg_tmds_div_value(struct pipe_ctx *pipe_ctx,
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.c
index 13580d9f9303e..23d4786ea2464 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.c
@@ -413,19 +413,18 @@ static bool dc_is_rmcm_3dlut_supported(struct hubp *hubp, 
struct mpc *mpc)
 }
 
 bool dcn42_program_rmcm_luts(
+       struct dc *dc,
+       struct dpp *dpp,
        struct hubp *hubp,
-       struct pipe_ctx *pipe_ctx,
        const struct dc_plane_cm *cm,
        struct mpc *mpc,
-       int mpcc_id)
+       int mpcc_id,
+       struct dc_stream_state *stream)
 {
-       struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
        union mcm_lut_params m_lut_params = {0};
 
-       struct dc *dc = hubp->ctx->dc;
        struct mpc_fl_3dlut_config mpc_fl_config;
 
-       struct dc_stream_state *stream = pipe_ctx->stream;
        bool bypass_rmcm_shaper = false;
        // true->false when it can be allocated at DI time
        struct dc_rmcm_3dlut *rmcm_3dlut = dc_stream_get_3dlut_for_stream(dc, 
stream, false);
@@ -457,8 +456,8 @@ bool dcn42_program_rmcm_luts(
                        cm_helper_translate_curve_to_hw_format(
                                        dc->ctx,
                                        &cm->shaper_func,
-                                       &dpp_base->shaper_params, true);
-                       m_lut_params.pwl = &dpp_base->shaper_params;
+                                       &dpp->shaper_params, true);
+                       m_lut_params.pwl = &dpp->shaper_params;
                }
                if (m_lut_params.pwl) {
                        if (mpc->funcs->rmcm.populate_lut)
@@ -511,31 +510,29 @@ bool dcn42_program_rmcm_luts(
        return true;
 }
 
-bool dcn42_set_mcm_luts(struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state)
+bool dcn42_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+                               struct hubp *primary_hubp, struct mpc *mpc, int 
mpcc_id,
+                               struct dc_stream_state *stream,
+                               struct dc_plane_state *plane_state)
 {
        bool result;
+       const struct dc_plane_cm *cm = &plane_state->cm;
 
        /* MCM */
-       result = dcn401_set_mcm_luts(pipe_ctx, plane_state);
+       result = dcn401_set_mcm_luts(dc, dpp, hubp, primary_hubp, mpc, mpcc_id,
+                       stream, plane_state);
 
        /* RMCM */
-       {
-               struct dc *dc = pipe_ctx->plane_res.hubp->ctx->dc;
-               struct hubp *hubp = pipe_ctx->plane_res.hubp;
-               const struct dc_plane_cm *cm = &plane_state->cm;
-               struct mpc *mpc = dc->res_pool->mpc;
-               int mpcc_id = hubp->inst;
-
-               if (cm->flags.bits.rmcm_enable && 
cm->flags.bits.lut3d_dma_enable) {
-                       /* TODO - move RMCM to its own block */
-                       dcn42_program_rmcm_luts(
-                               hubp,
-                               pipe_ctx,
-                               cm,
-                               mpc,
-                               mpcc_id);
-               }
+       if (cm->flags.bits.rmcm_enable && cm->flags.bits.lut3d_dma_enable) {
+               /* TODO - move RMCM to its own block */
+               dcn42_program_rmcm_luts(
+                       dc,
+                       dpp,
+                       hubp,
+                       cm,
+                       mpc,
+                       mpcc_id,
+                       stream);
        }
 
        return result;
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.h
index c4cfeed45b190..61d1217a30df5 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn42/dcn42_hwseq.h
@@ -15,15 +15,19 @@ void dcn42_program_cm_hist(
        struct pipe_ctx *pipe_ctx,
        const struct dc_plane_state *plane_state);
 
-bool dcn42_set_mcm_luts(struct pipe_ctx *pipe_ctx,
-       const struct dc_plane_state *plane_state);
+bool dcn42_set_mcm_luts(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+       struct hubp *primary_hubp, struct mpc *mpc, int mpcc_id,
+       struct dc_stream_state *stream,
+       struct dc_plane_state *plane_state);
 
 bool dcn42_program_rmcm_luts(
+       struct dc *dc,
+       struct dpp *dpp,
        struct hubp *hubp,
-       struct pipe_ctx *pipe_ctx,
        const struct dc_plane_cm *cm,
        struct mpc *mpc,
-       int mpcc_id);
+       int mpcc_id,
+       struct dc_stream_state *stream);
 void dcn42_hardware_release(struct dc *dc);
 
 void dcn42_prepare_bandwidth(
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h 
b/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h
index bf63281a8cd2c..169f3420ac6dd 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer.h
@@ -90,7 +90,13 @@ struct update_plane_addr_params {
 
 struct set_input_transfer_func_params {
        struct dc *dc;
-       struct pipe_ctx *pipe_ctx;
+       struct dpp *dpp;
+       struct hubp *hubp;
+       struct hubp *primary_hubp;
+       struct mpc *mpc;
+       int mpcc_id;
+       struct dc_stream_state *stream;
+       struct input_pixel_processor *ipp;
        struct dc_plane_state *plane_state;
 };
 
@@ -2119,6 +2125,8 @@ void hwss_disable_audio_stream(struct dc *dc, union 
block_sequence_params *param
 
 void hwss_hubp_wait_for_dcc_meta_prop(struct dc *dc, struct pipe_ctx 
*top_pipe_to_program);
 
+void hwss_set_input_transfer_func(struct dc *dc, struct pipe_ctx *pipe_ctx);
+
 void hwss_add_optc_pipe_control_lock(struct block_sequence_state *seq_state,
                struct dc *dc, struct pipe_ctx *pipe_ctx, bool lock);
 
@@ -2132,7 +2140,7 @@ void hwss_add_hubp_update_plane_addr(struct 
block_sequence_state *seq_state,
                struct dc *dc, struct pipe_ctx *pipe_ctx);
 
 void hwss_add_dpp_set_input_transfer_func(struct block_sequence_state 
*seq_state,
-               struct dc *dc, struct pipe_ctx *pipe_ctx, struct dc_plane_state 
*plane_state);
+               struct dc *dc, struct pipe_ctx *pipe_ctx);
 
 void hwss_add_dpp_program_gamut_remap(struct block_sequence_state *seq_state,
                struct pipe_ctx *pipe_ctx);
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer_private.h 
b/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer_private.h
index 0f7881a214620..956513125be0b 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer_private.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/hw_sequencer_private.h
@@ -90,9 +90,7 @@ struct hwseq_private_funcs {
        void (*update_mpcc)(struct dc *dc, struct pipe_ctx *pipe_ctx);
        void (*update_mpcc_sequence)(struct dc *dc, struct pipe_ctx *pipe_ctx,
                        struct block_sequence_state *seq_state);
-       bool (*set_input_transfer_func)(struct dc *dc,
-                               struct pipe_ctx *pipe_ctx,
-                               const struct dc_plane_state *plane_state);
+       bool (*set_input_transfer_func)(struct set_input_transfer_func_params 
*params);
        bool (*set_output_transfer_func)(struct set_output_transfer_func_params 
*params);
        void (*power_down)(struct dc *dc);
        void (*enable_display_pipe_clock_gating)(struct dc_context *ctx,
@@ -187,12 +185,14 @@ struct hwseq_private_funcs {
                struct block_sequence_state *seq_state);
        bool (*wait_for_blank_complete)(struct output_pixel_processor *opp);
        void (*dccg_init)(struct dce_hwseq *hws);
-       bool (*set_blend_lut)(struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state);
-       bool (*set_shaper_3dlut)(struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state);
-       bool (*set_mcm_luts)(struct pipe_ctx *pipe_ctx,
-                       const struct dc_plane_state *plane_state);
+       bool (*set_blend_lut)(struct dpp *dpp,
+                       struct dc_plane_state *plane_state);
+       bool (*set_shaper_3dlut)(struct dpp *dpp,
+                       struct dc_plane_state *plane_state);
+       bool (*set_mcm_luts)(struct dc *dc, struct dpp *dpp, struct hubp *hubp,
+                       struct hubp *primary_hubp, struct mpc *mpc, int mpcc_id,
+                       struct dc_stream_state *stream,
+                       struct dc_plane_state *plane_state);
        void (*PLAT_58856_wa)(struct dc_state *context,
                        struct pipe_ctx *pipe_ctx);
        void (*setup_hpo_hw_control)(const struct dce_hwseq *hws, bool enable);
-- 
2.43.0

Reply via email to