Commit 7cf5ceb3 authored by Jingwen Zhu's avatar Jingwen Zhu Committed by Alex Deucher
Browse files

drm/amd/display: avoid disable otg when dig was disabled



[Why]
This is a workaround for an dcn3.1 hang that happens if otg dispclk
is ramped while otg is on and stream enc is off.
But this w/a should not trigger when we have a dig active.

[How]
Avoid disable otg when dig was disabled.

Reviewed-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: default avatarAlan Liu <HaoPing.Liu@amd.com>
Signed-off-by: default avatarJingwen Zhu <Jingwen.Zhu@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0cf8307a
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -87,6 +87,16 @@ static int dcn315_get_active_display_cnt_wa(
	return display_count;
}

bool should_disable_otg(struct pipe_ctx *pipe)
{
	bool ret = true;

	if (pipe->stream->link->link_enc && pipe->stream->link->link_enc->funcs->is_dig_enabled &&
			pipe->stream->link->link_enc->funcs->is_dig_enabled(pipe->stream->link->link_enc))
		ret = false;
	return ret;
}

static void dcn315_disable_otg_wa(struct clk_mgr *clk_mgr_base, struct dc_state *context, bool disable)
{
	struct dc *dc = clk_mgr_base->ctx->dc;
@@ -99,6 +109,9 @@ static void dcn315_disable_otg_wa(struct clk_mgr *clk_mgr_base, struct dc_state
			continue;
		if (pipe->stream && (pipe->stream->dpms_off || pipe->plane_state == NULL ||
					dc_is_virtual_signal(pipe->stream->signal))) {

			/* This w/a should not trigger when we have a dig active */
			if (should_disable_otg(pipe)) {
				if (disable) {
					pipe->stream_res.tg->funcs->immediate_disable_crtc(pipe->stream_res.tg);
					reset_sync_context_for_pipe(dc, context, i);
@@ -107,6 +120,7 @@ static void dcn315_disable_otg_wa(struct clk_mgr *clk_mgr_base, struct dc_state
			}
		}
	}
}

static void dcn315_update_clocks(struct clk_mgr *clk_mgr_base,
			struct dc_state *context,