drm/amd/display: update pixel clock params after stream slice count change in context
[why] When ODM slice count is changed, otg master pipe's pixel clock params is no longer valid as the value is dependent on ODM slice count. Reviewed-by: Chaitanya Dhere <chaitanya.dhere@amd.com> Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com> Signed-off-by: Wenjing Liu <wenjing.liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
2e9b152325
commit
cfab803884
@@ -2256,7 +2256,7 @@ static struct pipe_ctx *get_last_dpp_pipe_in_mpcc_combine(
|
||||
}
|
||||
|
||||
static bool update_pipe_params_after_odm_slice_count_change(
|
||||
const struct dc_stream_state *stream,
|
||||
struct pipe_ctx *otg_master,
|
||||
struct dc_state *context,
|
||||
const struct resource_pool *pool)
|
||||
{
|
||||
@@ -2266,9 +2266,12 @@ static bool update_pipe_params_after_odm_slice_count_change(
|
||||
|
||||
for (i = 0; i < pool->pipe_count && result; i++) {
|
||||
pipe = &context->res_ctx.pipe_ctx[i];
|
||||
if (pipe->stream == stream && pipe->plane_state)
|
||||
if (pipe->stream == otg_master->stream && pipe->plane_state)
|
||||
result = resource_build_scaling_params(pipe);
|
||||
}
|
||||
|
||||
if (pool->funcs->build_pipe_pix_clk_params)
|
||||
pool->funcs->build_pipe_pix_clk_params(otg_master);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2951,7 +2954,7 @@ bool resource_update_pipes_for_stream_with_slice_count(
|
||||
otg_master, new_ctx, pool);
|
||||
if (result)
|
||||
result = update_pipe_params_after_odm_slice_count_change(
|
||||
otg_master->stream, new_ctx, pool);
|
||||
otg_master, new_ctx, pool);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1237,15 +1237,11 @@ static void update_pipes_with_slice_table(struct dc *dc, struct dc_state *contex
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < table->odm_combine_count; i++) {
|
||||
for (i = 0; i < table->odm_combine_count; i++)
|
||||
resource_update_pipes_for_stream_with_slice_count(context,
|
||||
dc->current_state, dc->res_pool,
|
||||
table->odm_combines[i].stream,
|
||||
table->odm_combines[i].slice_count);
|
||||
/* TODO: move this into the function above */
|
||||
dcn20_build_mapped_resource(dc, context,
|
||||
table->odm_combines[i].stream);
|
||||
}
|
||||
|
||||
for (i = 0; i < table->mpc_combine_count; i++)
|
||||
resource_update_pipes_for_plane_with_slice_count(context,
|
||||
|
||||
@@ -205,6 +205,7 @@ struct resource_funcs {
|
||||
void (*get_panel_config_defaults)(struct dc_panel_config *panel_config);
|
||||
void (*save_mall_state)(struct dc *dc, struct dc_state *context, struct mall_temp_config *temp_config);
|
||||
void (*restore_mall_state)(struct dc *dc, struct dc_state *context, struct mall_temp_config *temp_config);
|
||||
void (*build_pipe_pix_clk_params)(struct pipe_ctx *pipe_ctx);
|
||||
};
|
||||
|
||||
struct audio_support{
|
||||
|
||||
@@ -1273,15 +1273,19 @@ static void build_clamping_params(struct dc_stream_state *stream)
|
||||
stream->clamping.pixel_encoding = stream->timing.pixel_encoding;
|
||||
}
|
||||
|
||||
void dcn20_build_pipe_pix_clk_params(struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->stream_res.pix_clk_params);
|
||||
pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
|
||||
pipe_ctx->clock_source,
|
||||
&pipe_ctx->stream_res.pix_clk_params,
|
||||
&pipe_ctx->pll_settings);
|
||||
}
|
||||
|
||||
static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
|
||||
get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->stream_res.pix_clk_params);
|
||||
|
||||
pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
|
||||
pipe_ctx->clock_source,
|
||||
&pipe_ctx->stream_res.pix_clk_params,
|
||||
&pipe_ctx->pll_settings);
|
||||
dcn20_build_pipe_pix_clk_params(pipe_ctx);
|
||||
|
||||
pipe_ctx->stream->clamping.pixel_encoding = pipe_ctx->stream->timing.pixel_encoding;
|
||||
|
||||
|
||||
@@ -165,6 +165,7 @@ enum dc_status dcn20_add_stream_to_ctx(struct dc *dc, struct dc_state *new_ctx,
|
||||
enum dc_status dcn20_add_dsc_to_stream_resource(struct dc *dc, struct dc_state *dc_ctx, struct dc_stream_state *dc_stream);
|
||||
enum dc_status dcn20_remove_stream_from_ctx(struct dc *dc, struct dc_state *new_ctx, struct dc_stream_state *dc_stream);
|
||||
enum dc_status dcn20_patch_unknown_plane_state(struct dc_plane_state *plane_state);
|
||||
void dcn20_build_pipe_pix_clk_params(struct pipe_ctx *pipe_ctx);
|
||||
|
||||
#endif /* __DC_RESOURCE_DCN20_H__ */
|
||||
|
||||
|
||||
@@ -2041,6 +2041,7 @@ static struct resource_funcs dcn32_res_pool_funcs = {
|
||||
.retain_phantom_pipes = dcn32_retain_phantom_pipes,
|
||||
.save_mall_state = dcn32_save_mall_state,
|
||||
.restore_mall_state = dcn32_restore_mall_state,
|
||||
.build_pipe_pix_clk_params = dcn20_build_pipe_pix_clk_params,
|
||||
};
|
||||
|
||||
static uint32_t read_pipe_fuses(struct dc_context *ctx)
|
||||
|
||||
@@ -1609,6 +1609,7 @@ static struct resource_funcs dcn321_res_pool_funcs = {
|
||||
.retain_phantom_pipes = dcn32_retain_phantom_pipes,
|
||||
.save_mall_state = dcn32_save_mall_state,
|
||||
.restore_mall_state = dcn32_restore_mall_state,
|
||||
.build_pipe_pix_clk_params = dcn20_build_pipe_pix_clk_params,
|
||||
};
|
||||
|
||||
static uint32_t read_pipe_fuses(struct dc_context *ctx)
|
||||
|
||||
Reference in New Issue
Block a user