[PATCH 2/2] drm/amd/display: Retry link training at verify_link_cap stage
Harry Wentland
harry.wentland at amd.com
Thu Jun 14 17:43:32 UTC 2018
Some receivers seem to fail the first link training but are on good on
subsequent tries. Set a limit of 2 retries for each level before falling
back.
Signed-off-by: Harry Wentland <harry.wentland at amd.com>
CC: Wenjing Liu <Wenjing.Liu at amd.com>
---
.../gpu/drm/amd/display/dc/core/dc_link_dp.c | 28 +++++++++++++------
1 file changed, 20 insertions(+), 8 deletions(-)
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 72a8a55565c8..037d3bcfc2cc 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
@@ -31,7 +31,14 @@ enum {
/* to avoid infinite loop where-in the receiver
* switches between different VS
*/
- LINK_TRAINING_MAX_CR_RETRY = 100
+ LINK_TRAINING_MAX_CR_RETRY = 100,
+ /*
+ * 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
};
static bool decide_fallback_link_setting(
@@ -1142,15 +1149,20 @@ bool dp_hbr_verify_link_cap(
cur);
- if (skip_link_training)
+ if (skip_link_training) {
success = true;
- else {
- status = dc_link_dp_perform_link_training(
- link,
- cur,
+ } else {
+ int i;
+
+ for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
+ status = dc_link_dp_perform_link_training(
+ link, cur,
skip_video_pattern);
- if (status == LINK_TRAINING_SUCCESS)
- success = true;
+ if (status == LINK_TRAINING_SUCCESS) {
+ success = true;
+ break;
+ }
+ }
}
if (success)
--
2.17.1
More information about the amd-gfx
mailing list