drm/amd/display: Program pipes for ODM when removing planes
[WHY?] Software state expects pipes to be configured for ODM, but due to the transition occurring on a plane disable, the ODM enablement code is not run. [HOW?] Update ODM when removing a plane, and dynamic ODM is active. Also acquire pipe lock when removing a plane. Reviewed-by: Alvin Lee <Alvin.Lee2@amd.com> Acked-by: Tom Chung <chiahsuan.chung@amd.com> Signed-off-by: Dillon Varone <Dillon.Varone@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ee47b8db53
commit
1cb69b4355
|
@ -97,10 +97,12 @@ void dcn10_lock_all_pipes(struct dc *dc,
|
||||||
bool lock)
|
bool lock)
|
||||||
{
|
{
|
||||||
struct pipe_ctx *pipe_ctx;
|
struct pipe_ctx *pipe_ctx;
|
||||||
|
struct pipe_ctx *old_pipe_ctx;
|
||||||
struct timing_generator *tg;
|
struct timing_generator *tg;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < dc->res_pool->pipe_count; i++) {
|
for (i = 0; i < dc->res_pool->pipe_count; i++) {
|
||||||
|
old_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
|
||||||
pipe_ctx = &context->res_ctx.pipe_ctx[i];
|
pipe_ctx = &context->res_ctx.pipe_ctx[i];
|
||||||
tg = pipe_ctx->stream_res.tg;
|
tg = pipe_ctx->stream_res.tg;
|
||||||
|
|
||||||
|
@ -110,7 +112,7 @@ void dcn10_lock_all_pipes(struct dc *dc,
|
||||||
*/
|
*/
|
||||||
if (pipe_ctx->top_pipe ||
|
if (pipe_ctx->top_pipe ||
|
||||||
!pipe_ctx->stream ||
|
!pipe_ctx->stream ||
|
||||||
!pipe_ctx->plane_state ||
|
(!pipe_ctx->plane_state && !old_pipe_ctx->plane_state) ||
|
||||||
!tg->funcs->is_tg_enabled(tg))
|
!tg->funcs->is_tg_enabled(tg))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -1834,6 +1834,17 @@ void dcn20_program_front_end_for_ctx(
|
||||||
context->stream_status[0].plane_count > 1) {
|
context->stream_status[0].plane_count > 1) {
|
||||||
pipe->plane_res.hubp->funcs->hubp_wait_pipe_read_start(pipe->plane_res.hubp);
|
pipe->plane_res.hubp->funcs->hubp_wait_pipe_read_start(pipe->plane_res.hubp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* when dynamic ODM is active, pipes must be reconfigured when all planes are
|
||||||
|
* disabled, as some transitions will leave software and hardware state
|
||||||
|
* mismatched.
|
||||||
|
*/
|
||||||
|
if (dc->debug.enable_single_display_2to1_odm_policy &&
|
||||||
|
pipe->stream &&
|
||||||
|
pipe->update_flags.bits.disable &&
|
||||||
|
!pipe->prev_odm_pipe &&
|
||||||
|
hws->funcs.update_odm)
|
||||||
|
hws->funcs.update_odm(dc, context, pipe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue