Skip to content

Commit 38da63e

Browse files
mkaholagregkh
authored andcommitted
drm/i915: Revert DisplayPort fast link training feature
commit 34511dce4b35685d3988d5c8b100d11a068db5bd upstream. It has been found out that in some HW combination the DisplayPort fast link training feature caused screen flickering. Let's revert this feature for now until we can ensure that the feature works for all platforms. This is a manual revert of commits 5fa836a ("drm/i915: DP link training optimization") and 4e96c97 ("drm/i915: eDP link training optimization"). Fixes: 5fa836a ("drm/i915: DP link training optimization") Fixes: 4e96c97 ("drm/i915: eDP link training optimization") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91393 Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Mika Kahola <mika.kahola@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1466410226-19543-1-git-send-email-mika.kahola@intel.com (cherry picked from commit 91df09d92ad82c8778ca218097bf827f154292ca) Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 8fc8232 commit 38da63e

2 files changed

Lines changed: 2 additions & 27 deletions

File tree

drivers/gpu/drm/i915/intel_dp.c

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3628,8 +3628,7 @@ static bool
36283628
intel_dp_reset_link_train(struct intel_dp *intel_dp, uint32_t *DP,
36293629
uint8_t dp_train_pat)
36303630
{
3631-
if (!intel_dp->train_set_valid)
3632-
memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
3631+
memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
36333632
intel_dp_set_signal_levels(intel_dp, DP);
36343633
return intel_dp_set_link_train(intel_dp, DP, dp_train_pat);
36353634
}
@@ -3746,22 +3745,6 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp)
37463745
break;
37473746
}
37483747

3749-
/*
3750-
* if we used previously trained voltage and pre-emphasis values
3751-
* and we don't get clock recovery, reset link training values
3752-
*/
3753-
if (intel_dp->train_set_valid) {
3754-
DRM_DEBUG_KMS("clock recovery not ok, reset");
3755-
/* clear the flag as we are not reusing train set */
3756-
intel_dp->train_set_valid = false;
3757-
if (!intel_dp_reset_link_train(intel_dp, &DP,
3758-
DP_TRAINING_PATTERN_1 |
3759-
DP_LINK_SCRAMBLING_DISABLE)) {
3760-
DRM_ERROR("failed to enable link training\n");
3761-
return;
3762-
}
3763-
continue;
3764-
}
37653748

37663749
/* Check to see if we've tried the max voltage */
37673750
for (i = 0; i < intel_dp->lane_count; i++)
@@ -3854,7 +3837,6 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
38543837
/* Make sure clock is still ok */
38553838
if (!drm_dp_clock_recovery_ok(link_status,
38563839
intel_dp->lane_count)) {
3857-
intel_dp->train_set_valid = false;
38583840
intel_dp_link_training_clock_recovery(intel_dp);
38593841
intel_dp_set_link_train(intel_dp, &DP,
38603842
training_pattern |
@@ -3871,7 +3853,6 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
38713853

38723854
/* Try 5 times, then try clock recovery if that fails */
38733855
if (tries > 5) {
3874-
intel_dp->train_set_valid = false;
38753856
intel_dp_link_training_clock_recovery(intel_dp);
38763857
intel_dp_set_link_train(intel_dp, &DP,
38773858
training_pattern |
@@ -3893,10 +3874,8 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
38933874

38943875
intel_dp->DP = DP;
38953876

3896-
if (channel_eq) {
3897-
intel_dp->train_set_valid = true;
3877+
if (channel_eq)
38983878
DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n");
3899-
}
39003879
}
39013880

39023881
void intel_dp_stop_link_train(struct intel_dp *intel_dp)
@@ -5159,9 +5138,6 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
51595138
intel_display_power_get(dev_priv, power_domain);
51605139

51615140
if (long_hpd) {
5162-
/* indicate that we need to restart link training */
5163-
intel_dp->train_set_valid = false;
5164-
51655141
if (!intel_digital_port_connected(dev_priv, intel_dig_port))
51665142
goto mst_fail;
51675143

drivers/gpu/drm/i915/intel_drv.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,6 @@ struct intel_dp {
783783
bool has_aux_irq,
784784
int send_bytes,
785785
uint32_t aux_clock_divider);
786-
bool train_set_valid;
787786

788787
/* Displayport compliance testing */
789788
unsigned long compliance_test_type;

0 commit comments

Comments
 (0)