Commit 1cb69b43 authored by Dillon Varone's avatar Dillon Varone Committed by Alex Deucher
Browse files

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: default avatarAlvin Lee <Alvin.Lee2@amd.com>
Acked-by: default avatarTom Chung <chiahsuan.chung@amd.com>
Signed-off-by: default avatarDillon Varone <Dillon.Varone@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ee47b8db
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -97,10 +97,12 @@ void dcn10_lock_all_pipes(struct dc *dc,
	bool lock)
{
	struct pipe_ctx *pipe_ctx;
	struct pipe_ctx *old_pipe_ctx;
	struct timing_generator *tg;
	int 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];
		tg = pipe_ctx->stream_res.tg;

@@ -110,7 +112,7 @@ void dcn10_lock_all_pipes(struct dc *dc,
		 */
		if (pipe_ctx->top_pipe ||
		    !pipe_ctx->stream ||
		    !pipe_ctx->plane_state ||
		    (!pipe_ctx->plane_state && !old_pipe_ctx->plane_state) ||
		    !tg->funcs->is_tg_enabled(tg))
			continue;

+11 −0
Original line number Diff line number Diff line
@@ -1834,6 +1834,17 @@ void dcn20_program_front_end_for_ctx(
			context->stream_status[0].plane_count > 1) {
			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);
	}
}