aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch
new file mode 100644
index 00000000..0a722761
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5012-drm-amd-display-Retry-link-training-again.patch
@@ -0,0 +1,102 @@
+From cd2ca099e3f1063073f5b518d62a691ff784c395 Mon Sep 17 00:00:00 2001
+From: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Date: Fri, 13 Jul 2018 18:00:06 -0400
+Subject: [PATCH 5012/5725] drm/amd/display: Retry link training again
+
+[Why]
+Some receivers seem to fail the first link training but are good on
+subsequent tries. We want to retry link training again. This fixes
+HTC vive pro not lighting up after being disabled.
+
+[How]
+Check if the link training passed without fall back if this is not
+the case then we retry link training.
+
+Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 20 ++++++++++++++++++--
+ drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 5 ++++-
+ drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h | 3 ++-
+ 3 files changed, 24 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+index 838231e..7962141 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -60,7 +60,14 @@
+
+ enum {
+ LINK_RATE_REF_FREQ_IN_MHZ = 27,
+- PEAK_FACTOR_X1000 = 1006
++ PEAK_FACTOR_X1000 = 1006,
++ /*
++ * Some receivers fail to train on first try and are good
++ * on subsequent tries. 2 retries should be plenty. If we
++ * don't have a successful training then we don't expect to
++ * ever get one.
++ */
++ LINK_TRAINING_MAX_VERIFY_RETRY = 2
+ };
+
+ /*******************************************************************************
+@@ -760,7 +767,16 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
+ */
+
+ /* deal with non-mst cases */
+- dp_verify_link_cap(link, &link->reported_link_cap);
++ for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
++ int fail_count = 0;
++
++ dp_verify_link_cap(link,
++ &link->reported_link_cap,
++ &fail_count);
++
++ if (fail_count == 0)
++ break;
++ }
+ }
+
+ /* HDMI-DVI Dongle */
+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 b9db6e6..e8a69d7 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
+@@ -1088,7 +1088,8 @@ static struct dc_link_settings get_max_link_cap(struct dc_link *link)
+
+ bool dp_verify_link_cap(
+ struct dc_link *link,
+- struct dc_link_settings *known_limit_link_setting)
++ struct dc_link_settings *known_limit_link_setting,
++ int *fail_count)
+ {
+ struct dc_link_settings max_link_cap = {0};
+ struct dc_link_settings cur_link_setting = {0};
+@@ -1160,6 +1161,8 @@ bool dp_verify_link_cap(
+ skip_video_pattern);
+ if (status == LINK_TRAINING_SUCCESS)
+ success = true;
++ else
++ (*fail_count)++;
+ }
+
+ if (success)
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h b/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h
+index 697b5ee..a37255c 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h
+@@ -35,7 +35,8 @@ struct dc_link_settings;
+
+ bool dp_verify_link_cap(
+ struct dc_link *link,
+- struct dc_link_settings *known_limit_link_setting);
++ struct dc_link_settings *known_limit_link_setting,
++ int *fail_count);
+
+ bool dp_validate_mode_timing(
+ struct dc_link *link,
+--
+2.7.4
+