mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
drm/amd/display: Refactor DPP_PROGRAM_GAMUT_REMAP to drop pipe_ctx param
[why] Pipe_ctx shouldn't be passed as block sequence block parameter. [how] - Adjust program_gamut_remap_params struct. - Adjust program_gamut_remap interface and implementations. - Adjust program_gamut_remap callsites to match new signature. Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Signed-off-by: Tomasz Siemek <tomasz.siemek@amd.com> Signed-off-by: Wayne Lin <wayne.lin@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
1eefee5466
commit
d5622bd3a7
|
|
@ -831,7 +831,15 @@ bool dc_stream_set_gamut_remap(struct dc *dc, const struct dc_stream_state *stre
|
|||
for (i = 0; i < MAX_PIPES; i++) {
|
||||
if (dc->current_state->res_ctx.pipe_ctx[i].stream == stream) {
|
||||
pipes = &dc->current_state->res_ctx.pipe_ctx[i];
|
||||
dc->hwss.program_gamut_remap(pipes);
|
||||
dc->hwss.program_gamut_remap(&(struct program_gamut_remap_params) {
|
||||
.xfm = pipes->plane_res.xfm,
|
||||
.dpp = pipes->plane_res.dpp,
|
||||
.mpc = dc->res_pool->mpc,
|
||||
.mpcc_id = pipes->plane_res.mpcc_inst,
|
||||
.stream = pipes->stream,
|
||||
.plane = pipes->plane_state,
|
||||
.is_top_pipe = pipes->top_pipe == NULL,
|
||||
});
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1069,7 +1069,14 @@ void hwss_build_fast_sequence(struct dc *dc,
|
|||
if (dc->hwss.program_gamut_remap &&
|
||||
(current_mpc_pipe->plane_state->update_bits.gamut_remap_change ||
|
||||
current_mpc_pipe->stream->update_flags.bits.gamut_remap)) {
|
||||
block_sequence[*num_steps].params.program_gamut_remap_params.pipe_ctx = current_mpc_pipe;
|
||||
struct program_gamut_remap_params *params = &block_sequence[*num_steps].params.program_gamut_remap_params;
|
||||
params->dpp = current_mpc_pipe->plane_res.dpp;
|
||||
params->mpc = dc->res_pool->mpc;
|
||||
params->xfm = current_mpc_pipe->plane_res.xfm;
|
||||
params->mpcc_id = current_mpc_pipe->plane_res.hubp->inst;
|
||||
params->plane = current_mpc_pipe->plane_state;
|
||||
params->stream = current_mpc_pipe->stream;
|
||||
params->is_top_pipe = current_mpc_pipe->top_pipe == NULL;
|
||||
block_sequence[*num_steps].func = DPP_PROGRAM_GAMUT_REMAP;
|
||||
(*num_steps)++;
|
||||
}
|
||||
|
|
@ -1236,7 +1243,8 @@ void hwss_execute_sequence(struct dc *dc,
|
|||
params->set_input_transfer_func_params.plane_state);
|
||||
break;
|
||||
case DPP_PROGRAM_GAMUT_REMAP:
|
||||
hwss_program_gamut_remap(params);
|
||||
if (dc->hwss.program_gamut_remap)
|
||||
dc->hwss.program_gamut_remap(¶ms->program_gamut_remap_params);
|
||||
break;
|
||||
case HUBP_ENABLE_3DLUT_FL:
|
||||
hwss_hubp_enable_3dlut_fl(params);
|
||||
|
|
@ -1779,7 +1787,14 @@ void hwss_add_dpp_program_gamut_remap(struct block_sequence_state *seq_state,
|
|||
struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
if (*seq_state->num_steps < MAX_HWSS_BLOCK_SEQUENCE_SIZE) {
|
||||
seq_state->steps[*seq_state->num_steps].params.program_gamut_remap_params.pipe_ctx = pipe_ctx;
|
||||
struct program_gamut_remap_params *params = &seq_state->steps[*seq_state->num_steps].params.program_gamut_remap_params;
|
||||
params->xfm = pipe_ctx->plane_res.xfm;
|
||||
params->dpp = pipe_ctx->plane_res.dpp;
|
||||
params->mpc = pipe_ctx->stream->ctx->dc->res_pool->mpc;
|
||||
params->mpcc_id = pipe_ctx->plane_res.hubp->inst;
|
||||
params->plane = pipe_ctx->plane_state;
|
||||
params->stream = pipe_ctx->stream;
|
||||
params->is_top_pipe = pipe_ctx->top_pipe == NULL;
|
||||
seq_state->steps[*seq_state->num_steps].func = DPP_PROGRAM_GAMUT_REMAP;
|
||||
(*seq_state->num_steps)++;
|
||||
}
|
||||
|
|
@ -3617,12 +3632,20 @@ void hwss_set_cursor_sdr_white_level(union block_sequence_params *params)
|
|||
dc->hwss.set_cursor_sdr_white_level(pipe_ctx);
|
||||
}
|
||||
|
||||
void hwss_program_gamut_remap(union block_sequence_params *params)
|
||||
void hwss_program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
struct dc *dc = params->program_gamut_remap_params.pipe_ctx->stream->ctx->dc;
|
||||
struct dc *dc = pipe_ctx->stream->ctx->dc;
|
||||
|
||||
if (dc && dc->hwss.program_gamut_remap)
|
||||
dc->hwss.program_gamut_remap(params->program_gamut_remap_params.pipe_ctx);
|
||||
if (dc->hwss.program_gamut_remap)
|
||||
dc->hwss.program_gamut_remap(&(struct program_gamut_remap_params) {
|
||||
.xfm = pipe_ctx->plane_res.xfm,
|
||||
.dpp = pipe_ctx->plane_res.dpp,
|
||||
.mpc = dc->res_pool->mpc,
|
||||
.mpcc_id = pipe_ctx->plane_res.hubp->inst,
|
||||
.stream = pipe_ctx->stream,
|
||||
.plane = pipe_ctx->plane_state,
|
||||
.is_top_pipe = pipe_ctx->top_pipe == NULL,
|
||||
});
|
||||
}
|
||||
|
||||
void hwss_program_output_csc(union block_sequence_params *params)
|
||||
|
|
|
|||
|
|
@ -2810,23 +2810,26 @@ static void program_surface_visibility(const struct dc *dc,
|
|||
|
||||
}
|
||||
|
||||
static void program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
||||
static void program_gamut_remap(struct program_gamut_remap_params *params)
|
||||
{
|
||||
struct transform *xfm = params->xfm;
|
||||
const struct dc_stream_state *stream = params->stream;
|
||||
int i = 0;
|
||||
struct xfm_grph_csc_adjustment adjust;
|
||||
|
||||
memset(&adjust, 0, sizeof(adjust));
|
||||
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
|
||||
|
||||
if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
|
||||
if (stream->gamut_remap_matrix.enable_remap == true) {
|
||||
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
adjust.temperature_matrix[i] =
|
||||
pipe_ctx->stream->gamut_remap_matrix.matrix[i];
|
||||
stream->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
|
||||
pipe_ctx->plane_res.xfm->funcs->transform_set_gamut_remap(pipe_ctx->plane_res.xfm, &adjust);
|
||||
xfm->funcs->transform_set_gamut_remap(xfm, &adjust);
|
||||
}
|
||||
static void update_plane_addr(const struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx)
|
||||
|
|
|
|||
|
|
@ -2814,28 +2814,32 @@ static void dcn10_enable_plane(
|
|||
|
||||
}
|
||||
|
||||
void dcn10_program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
||||
void dcn10_program_gamut_remap(struct program_gamut_remap_params *params)
|
||||
{
|
||||
struct dpp *dpp = params->dpp;
|
||||
const struct dc_stream_state *stream = params->stream;
|
||||
const struct dc_plane_state *plane = params->plane;
|
||||
int i = 0;
|
||||
struct dpp_grph_csc_adjustment adjust;
|
||||
|
||||
memset(&adjust, 0, sizeof(adjust));
|
||||
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
|
||||
|
||||
if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
|
||||
if (stream->gamut_remap_matrix.enable_remap == true) {
|
||||
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
adjust.temperature_matrix[i] =
|
||||
pipe_ctx->stream->gamut_remap_matrix.matrix[i];
|
||||
} else if (pipe_ctx->plane_state &&
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.enable_remap == true) {
|
||||
stream->gamut_remap_matrix.matrix[i];
|
||||
} else if (plane &&
|
||||
plane->gamut_remap_matrix.enable_remap == true) {
|
||||
adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
adjust.temperature_matrix[i] =
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.matrix[i];
|
||||
plane->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
|
||||
pipe_ctx->plane_res.dpp->funcs->dpp_set_gamut_remap(pipe_ctx->plane_res.dpp, &adjust);
|
||||
dpp->funcs->dpp_set_gamut_remap(dpp, &adjust);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3152,7 +3156,7 @@ static void dcn10_update_dchubp_dpp(
|
|||
|
||||
if (plane_state->update_bits.full_update) {
|
||||
/*gamut remap*/
|
||||
dc->hwss.program_gamut_remap(pipe_ctx);
|
||||
hwss_program_gamut_remap(pipe_ctx);
|
||||
|
||||
dc->hwss.program_output_csc(dc,
|
||||
pipe_ctx,
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ void dcn10_program_pipe(
|
|||
struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
struct dc_state *context);
|
||||
void dcn10_program_gamut_remap(struct pipe_ctx *pipe_ctx);
|
||||
void dcn10_program_gamut_remap(struct program_gamut_remap_params *params);
|
||||
void dcn10_init_hw(struct dc *dc);
|
||||
void dcn10_init_pipes(struct dc *dc, struct dc_state *context);
|
||||
void dcn10_power_down_on_boot(struct dc *dc);
|
||||
|
|
|
|||
|
|
@ -1815,7 +1815,7 @@ void dcn20_update_dchubp_dpp(
|
|||
|| plane_state->update_bits.gamut_remap_change
|
||||
|| pipe_ctx->stream->update_flags.bits.out_csc) {
|
||||
/* dpp/cm gamut remap*/
|
||||
dc->hwss.program_gamut_remap(pipe_ctx);
|
||||
hwss_program_gamut_remap(pipe_ctx);
|
||||
|
||||
/*call the dcn2 method which uses mpc csc*/
|
||||
dc->hwss.program_output_csc(dc,
|
||||
|
|
|
|||
|
|
@ -357,37 +357,41 @@ bool dcn30_set_input_transfer_func(struct dc *dc,
|
|||
return result;
|
||||
}
|
||||
|
||||
void dcn30_program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
||||
void dcn30_program_gamut_remap(struct program_gamut_remap_params *params)
|
||||
{
|
||||
struct dpp *dpp = params->dpp;
|
||||
struct mpc *mpc = params->mpc;
|
||||
int mpcc_id = params->mpcc_id;
|
||||
const struct dc_stream_state *stream = params->stream;
|
||||
const struct dc_plane_state *plane = params->plane;
|
||||
bool is_top_pipe = params->is_top_pipe;
|
||||
int i = 0;
|
||||
struct dpp_grph_csc_adjustment dpp_adjust;
|
||||
struct mpc_grph_gamut_adjustment mpc_adjust;
|
||||
int mpcc_id = pipe_ctx->plane_res.hubp->inst;
|
||||
struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
|
||||
|
||||
memset(&dpp_adjust, 0, sizeof(dpp_adjust));
|
||||
dpp_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
|
||||
if (pipe_ctx->plane_state &&
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.enable_remap == true) {
|
||||
if (plane &&
|
||||
plane->gamut_remap_matrix.enable_remap == true) {
|
||||
dpp_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
dpp_adjust.temperature_matrix[i] =
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.matrix[i];
|
||||
plane->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
|
||||
pipe_ctx->plane_res.dpp->funcs->dpp_set_gamut_remap(pipe_ctx->plane_res.dpp,
|
||||
dpp->funcs->dpp_set_gamut_remap(dpp,
|
||||
&dpp_adjust);
|
||||
|
||||
memset(&mpc_adjust, 0, sizeof(mpc_adjust));
|
||||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
|
||||
if (pipe_ctx->top_pipe == NULL) {
|
||||
if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
|
||||
if (is_top_pipe) {
|
||||
if (stream->gamut_remap_matrix.enable_remap == true) {
|
||||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
mpc_adjust.temperature_matrix[i] =
|
||||
pipe_ctx->stream->gamut_remap_matrix.matrix[i];
|
||||
stream->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ bool dcn30_set_input_transfer_func(struct dc *dc,
|
|||
struct pipe_ctx *pipe_ctx,
|
||||
const struct dc_plane_state *plane_state);
|
||||
|
||||
void dcn30_program_gamut_remap(struct pipe_ctx *pipe_ctx);
|
||||
void dcn30_program_gamut_remap(struct program_gamut_remap_params *params);
|
||||
|
||||
bool dcn30_set_output_transfer_func(struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
|
|
|
|||
|
|
@ -89,28 +89,31 @@ void dcn401_initialize_min_clocks(struct dc *dc)
|
|||
true);
|
||||
}
|
||||
|
||||
void dcn401_program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
||||
void dcn401_program_gamut_remap(struct program_gamut_remap_params *params)
|
||||
{
|
||||
struct mpc *mpc = params->mpc;
|
||||
int mpcc_id = params->mpcc_id;
|
||||
const struct dc_stream_state *stream = params->stream;
|
||||
const struct dc_plane_state *plane = params->plane;
|
||||
bool is_top_pipe = params->is_top_pipe;
|
||||
unsigned int i = 0;
|
||||
struct mpc_grph_gamut_adjustment mpc_adjust;
|
||||
unsigned int mpcc_id = pipe_ctx->plane_res.mpcc_inst;
|
||||
struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
|
||||
|
||||
//For now assert if location is not pre-blend
|
||||
if (pipe_ctx->plane_state)
|
||||
ASSERT(pipe_ctx->plane_state->mcm_location == MPCC_MOVABLE_CM_LOCATION_BEFORE);
|
||||
if (plane)
|
||||
ASSERT(plane->mcm_location == MPCC_MOVABLE_CM_LOCATION_BEFORE);
|
||||
|
||||
// program MPCC_MCM_FIRST_GAMUT_REMAP
|
||||
memset(&mpc_adjust, 0, sizeof(mpc_adjust));
|
||||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
mpc_adjust.mpcc_gamut_remap_block_id = MPCC_MCM_FIRST_GAMUT_REMAP;
|
||||
|
||||
if (pipe_ctx->plane_state &&
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.enable_remap == true) {
|
||||
if (plane &&
|
||||
plane->gamut_remap_matrix.enable_remap == true) {
|
||||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
mpc_adjust.temperature_matrix[i] =
|
||||
pipe_ctx->plane_state->gamut_remap_matrix.matrix[i];
|
||||
plane->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
|
||||
mpc->funcs->set_gamut_remap(mpc, mpcc_id, &mpc_adjust);
|
||||
|
|
@ -126,12 +129,12 @@ void dcn401_program_gamut_remap(struct pipe_ctx *pipe_ctx)
|
|||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
|
||||
mpc_adjust.mpcc_gamut_remap_block_id = MPCC_OGAM_GAMUT_REMAP;
|
||||
|
||||
if (pipe_ctx->top_pipe == NULL) {
|
||||
if (pipe_ctx->stream->gamut_remap_matrix.enable_remap == true) {
|
||||
if (is_top_pipe) {
|
||||
if (stream->gamut_remap_matrix.enable_remap == true) {
|
||||
mpc_adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
|
||||
for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
|
||||
mpc_adjust.temperature_matrix[i] =
|
||||
pipe_ctx->stream->gamut_remap_matrix.matrix[i];
|
||||
stream->gamut_remap_matrix.matrix[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ struct ips_ono_region_state {
|
|||
uint32_t current_pwr_state;
|
||||
};
|
||||
|
||||
void dcn401_program_gamut_remap(struct pipe_ctx *pipe_ctx);
|
||||
void dcn401_program_gamut_remap(struct program_gamut_remap_params *params);
|
||||
|
||||
void dcn401_init_hw(struct dc *dc);
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,13 @@ struct set_input_transfer_func_params {
|
|||
};
|
||||
|
||||
struct program_gamut_remap_params {
|
||||
struct pipe_ctx *pipe_ctx;
|
||||
struct transform *xfm;
|
||||
struct dpp *dpp;
|
||||
struct mpc *mpc;
|
||||
int mpcc_id;
|
||||
const struct dc_stream_state *stream;
|
||||
const struct dc_plane_state *plane;
|
||||
bool is_top_pipe;
|
||||
};
|
||||
|
||||
struct hubp_enable_3dlut_fl_params {
|
||||
|
|
@ -1389,7 +1395,7 @@ struct hw_sequencer_funcs {
|
|||
void (*program_cursor_offload_now)(struct dc *dc, const struct pipe_ctx *pipe);
|
||||
|
||||
/* Colour Related */
|
||||
void (*program_gamut_remap)(struct pipe_ctx *pipe_ctx);
|
||||
void (*program_gamut_remap)(struct program_gamut_remap_params *params);
|
||||
void (*program_output_csc)(struct dc *dc, struct pipe_ctx *pipe_ctx,
|
||||
enum dc_color_space colorspace,
|
||||
uint16_t *matrix, int opp_id);
|
||||
|
|
@ -1940,7 +1946,7 @@ void hwss_set_cursor_position(union block_sequence_params *params);
|
|||
|
||||
void hwss_set_cursor_sdr_white_level(union block_sequence_params *params);
|
||||
|
||||
void hwss_program_gamut_remap(union block_sequence_params *params);
|
||||
void hwss_program_gamut_remap(struct pipe_ctx *pipe_ctx);
|
||||
|
||||
void hwss_program_output_csc(union block_sequence_params *params);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user