Rev 6937 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6937 | Rev 7144 | ||
---|---|---|---|
Line 83... | Line 83... | ||
83 | 83 | ||
84 | static bool |
84 | static bool |
85 | intel_dp_reset_link_train(struct intel_dp *intel_dp, |
85 | intel_dp_reset_link_train(struct intel_dp *intel_dp, |
86 | uint8_t dp_train_pat) |
86 | uint8_t dp_train_pat) |
87 | { |
- | |
88 | if (!intel_dp->train_set_valid) |
87 | { |
89 | memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set)); |
88 | memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set)); |
90 | intel_dp_set_signal_levels(intel_dp); |
89 | intel_dp_set_signal_levels(intel_dp); |
91 | return intel_dp_set_link_train(intel_dp, dp_train_pat); |
90 | return intel_dp_set_link_train(intel_dp, dp_train_pat); |
Line 159... | Line 158... | ||
159 | if (drm_dp_clock_recovery_ok(link_status, intel_dp->lane_count)) { |
158 | if (drm_dp_clock_recovery_ok(link_status, intel_dp->lane_count)) { |
160 | DRM_DEBUG_KMS("clock recovery OK\n"); |
159 | DRM_DEBUG_KMS("clock recovery OK\n"); |
161 | break; |
160 | break; |
162 | } |
161 | } |
Line 163... | Line -... | ||
163 | - | ||
164 | /* |
- | |
165 | * if we used previously trained voltage and pre-emphasis values |
- | |
166 | * and we don't get clock recovery, reset link training values |
- | |
167 | */ |
- | |
168 | if (intel_dp->train_set_valid) { |
- | |
169 | DRM_DEBUG_KMS("clock recovery not ok, reset"); |
- | |
170 | /* clear the flag as we are not reusing train set */ |
- | |
171 | intel_dp->train_set_valid = false; |
- | |
172 | if (!intel_dp_reset_link_train(intel_dp, |
- | |
173 | DP_TRAINING_PATTERN_1 | |
- | |
174 | DP_LINK_SCRAMBLING_DISABLE)) { |
- | |
175 | DRM_ERROR("failed to enable link training\n"); |
- | |
176 | return; |
- | |
177 | } |
- | |
178 | continue; |
- | |
Line 179... | Line 162... | ||
179 | } |
162 | |
180 | 163 | ||
181 | /* Check to see if we've tried the max voltage */ |
164 | /* Check to see if we've tried the max voltage */ |
182 | for (i = 0; i < intel_dp->lane_count; i++) |
165 | for (i = 0; i < intel_dp->lane_count; i++) |
Line 282... | Line 265... | ||
282 | } |
265 | } |
Line 283... | Line 266... | ||
283 | 266 | ||
284 | /* Make sure clock is still ok */ |
267 | /* Make sure clock is still ok */ |
285 | if (!drm_dp_clock_recovery_ok(link_status, |
268 | if (!drm_dp_clock_recovery_ok(link_status, |
286 | intel_dp->lane_count)) { |
- | |
287 | intel_dp->train_set_valid = false; |
269 | intel_dp->lane_count)) { |
288 | intel_dp_link_training_clock_recovery(intel_dp); |
270 | intel_dp_link_training_clock_recovery(intel_dp); |
289 | intel_dp_set_link_train(intel_dp, |
271 | intel_dp_set_link_train(intel_dp, |
290 | training_pattern | |
272 | training_pattern | |
291 | DP_LINK_SCRAMBLING_DISABLE); |
273 | DP_LINK_SCRAMBLING_DISABLE); |
Line 299... | Line 281... | ||
299 | break; |
281 | break; |
300 | } |
282 | } |
Line 301... | Line 283... | ||
301 | 283 | ||
302 | /* Try 5 times, then try clock recovery if that fails */ |
284 | /* Try 5 times, then try clock recovery if that fails */ |
303 | if (tries > 5) { |
- | |
304 | intel_dp->train_set_valid = false; |
285 | if (tries > 5) { |
305 | intel_dp_link_training_clock_recovery(intel_dp); |
286 | intel_dp_link_training_clock_recovery(intel_dp); |
306 | intel_dp_set_link_train(intel_dp, |
287 | intel_dp_set_link_train(intel_dp, |
307 | training_pattern | |
288 | training_pattern | |
308 | DP_LINK_SCRAMBLING_DISABLE); |
289 | DP_LINK_SCRAMBLING_DISABLE); |
Line 320... | Line 301... | ||
320 | ++tries; |
301 | ++tries; |
321 | } |
302 | } |
Line 322... | Line 303... | ||
322 | 303 | ||
Line 323... | Line 304... | ||
323 | intel_dp_set_idle_link_train(intel_dp); |
304 | intel_dp_set_idle_link_train(intel_dp); |
324 | - | ||
325 | if (channel_eq) { |
305 | |
326 | intel_dp->train_set_valid = true; |
306 | if (channel_eq) |
327 | DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n"); |
- | |
Line 328... | Line 307... | ||
328 | } |
307 | DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n"); |
329 | } |
308 | } |
330 | 309 | ||
331 | void intel_dp_stop_link_train(struct intel_dp *intel_dp) |
310 | void intel_dp_stop_link_train(struct intel_dp *intel_dp) |