Commit 73c72602 authored by Hersen Wu's avatar Hersen Wu Committed by Alex Deucher
Browse files

drm/amd/display: Fix link retraining hw sequence for auto test

parent 88639168
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -366,9 +366,7 @@ static void set_preferred_link_settings(struct dc *dc,
				link_setting->lane_count;
	core_link->public.verified_link_cap.link_rate =
				link_setting->link_rate;
	dp_retrain_link_physi(core_link,
			link_setting,
			false);
	dp_retrain_link_dp_test(core_link, link_setting, false);
}

static void enable_hpd(const struct dc_link *link)
+2 −2
Original line number Diff line number Diff line
@@ -1532,7 +1532,7 @@ static bool handle_hpd_irq_psr_sink(const struct core_link *link)

static void dp_test_send_link_training(struct core_link *link)
{
	struct dc_link_settings link_settings;
	struct dc_link_settings link_settings = {0};

	core_link_read_dpcd(
			link,
@@ -1549,7 +1549,7 @@ static void dp_test_send_link_training(struct core_link *link)
	link->public.verified_link_cap.lane_count = link_settings.lane_count;
	link->public.verified_link_cap.link_rate = link_settings.link_rate;

	dp_retrain_link(link);
	dp_retrain_link_dp_test(link, &link_settings, false);
}

static void dp_test_send_phy_test_pattern(struct core_link *link)
+5 −22
Original line number Diff line number Diff line
@@ -200,28 +200,7 @@ void dp_set_hw_test_pattern(
	encoder->funcs->dp_set_phy_pattern(encoder, &pattern_param);
}

void dp_retrain_link(struct core_link *link)
{
	struct pipe_ctx *pipes = link->dc->current_context->res_ctx.pipe_ctx;
	unsigned int i;

	for (i = 0; i < MAX_PIPES; i++) {
		if (pipes[i].stream_enc != NULL) {
			dm_delay_in_microseconds(link->ctx, 100);
			pipes->stream_enc->funcs->dp_blank(pipes[i].stream_enc);
			link->dc->hwss.disable_stream(&pipes[i]);
			dc_link_dp_perform_link_training(
					&link->public,
					&link->public.verified_link_cap,
					true);
			link->dc->hwss.enable_stream(&pipes[i]);
			link->dc->hwss.unblank_stream(&pipes[i],
					&link->public.verified_link_cap);
		}
	}
}

void dp_retrain_link_physi(struct core_link *link,
void dp_retrain_link_dp_test(struct core_link *link,
			struct dc_link_settings *link_setting,
			bool skip_video_pattern)
{
@@ -240,6 +219,10 @@ void dp_retrain_link_physi(struct core_link *link,
			pipes[i].stream_enc->funcs->dp_blank(
					pipes[i].stream_enc);

			/* disable any test pattern that might be active */
			dp_set_hw_test_pattern(link,
					DP_TEST_PATTERN_VIDEO_MODE, NULL, 0);

			dp_receiver_power_ctrl(link, false);

			link->link_enc->funcs->disable_output(
+1 −3
Original line number Diff line number Diff line
@@ -68,9 +68,7 @@ void dp_set_hw_test_pattern(

enum dp_panel_mode dp_get_panel_mode(struct core_link *link);

void dp_retrain_link(struct core_link *link);

void dp_retrain_link_physi(struct core_link *link,
void dp_retrain_link_dp_test(struct core_link *link,
		struct dc_link_settings *link_setting,
		bool skip_video_pattern);