aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0114-drm-amd-display-Fix-link-retraining-hw-sequence-for-.patch
blob: 738d62503de970c20cacfb974dc682f9dc3f9e7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
From 64b649acb0163527dee610780fda781f4440d393 Mon Sep 17 00:00:00 2001
From: Hersen Wu <hersenxs.wu@amd.com>
Date: Thu, 29 Dec 2016 14:58:54 -0500
Subject: [PATCH 0114/4131] drm/amd/display: Fix link retraining hw sequence
 for auto test

Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c           |  4 +---
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c   |  4 ++--
 drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c | 27 ++++------------------
 drivers/gpu/drm/amd/display/dc/inc/link_hwss.h     |  4 +---
 4 files changed, 9 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index ad1ce60..a7c6c98 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -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)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
index a4b6a6a..3d5871d 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
@@ -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)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
index f870a0e..e287584 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
@@ -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(
diff --git a/drivers/gpu/drm/amd/display/dc/inc/link_hwss.h b/drivers/gpu/drm/amd/display/dc/inc/link_hwss.h
index 30831c5..75d10e9 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/link_hwss.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/link_hwss.h
@@ -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);
 
-- 
2.7.4