diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-18 04:15:24 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-22 16:23:36 -0400 |
commit | 1ffdff134eb2d943bde3e4901ac48a9656a7e7a5 (patch) | |
tree | a173f28a4d7f9b961645ed16f64857cf734b8113 /drivers/gpu/drm/i915/intel_dp.c | |
parent | 00ae9a456dd9a3e26db2265c0d25dec0d1e74b07 (diff) |
drm: dp helper: extract drm_dp_channel_eq_ok
radeon and intel use the exact same definition.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Dave Airlie <airlied@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 38305c93754c..f69044b7f008 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include "i915_drv.h" | 37 | #include "i915_drv.h" |
38 | 38 | ||
39 | #define DP_RECEIVER_CAP_SIZE 0xf | 39 | #define DP_RECEIVER_CAP_SIZE 0xf |
40 | #define DP_LINK_STATUS_SIZE 6 | ||
41 | #define DP_LINK_CHECK_TIMEOUT (10 * 1000) | 40 | #define DP_LINK_CHECK_TIMEOUT (10 * 1000) |
42 | 41 | ||
43 | /** | 42 | /** |
@@ -1437,13 +1436,6 @@ intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_ | |||
1437 | } | 1436 | } |
1438 | 1437 | ||
1439 | static uint8_t | 1438 | static uint8_t |
1440 | intel_dp_link_status(uint8_t link_status[DP_LINK_STATUS_SIZE], | ||
1441 | int r) | ||
1442 | { | ||
1443 | return link_status[r - DP_LANE0_1_STATUS]; | ||
1444 | } | ||
1445 | |||
1446 | static uint8_t | ||
1447 | intel_get_adjust_request_voltage(uint8_t adjust_request[2], | 1439 | intel_get_adjust_request_voltage(uint8_t adjust_request[2], |
1448 | int lane) | 1440 | int lane) |
1449 | { | 1441 | { |
@@ -1728,29 +1720,6 @@ intel_clock_recovery_ok(uint8_t link_status[DP_LINK_STATUS_SIZE], int lane_count | |||
1728 | return true; | 1720 | return true; |
1729 | } | 1721 | } |
1730 | 1722 | ||
1731 | /* Check to see if channel eq is done on all channels */ | ||
1732 | #define CHANNEL_EQ_BITS (DP_LANE_CR_DONE|\ | ||
1733 | DP_LANE_CHANNEL_EQ_DONE|\ | ||
1734 | DP_LANE_SYMBOL_LOCKED) | ||
1735 | static bool | ||
1736 | intel_channel_eq_ok(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]) | ||
1737 | { | ||
1738 | uint8_t lane_align; | ||
1739 | uint8_t lane_status; | ||
1740 | int lane; | ||
1741 | |||
1742 | lane_align = intel_dp_link_status(link_status, | ||
1743 | DP_LANE_ALIGN_STATUS_UPDATED); | ||
1744 | if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0) | ||
1745 | return false; | ||
1746 | for (lane = 0; lane < intel_dp->lane_count; lane++) { | ||
1747 | lane_status = intel_get_lane_status(link_status, lane); | ||
1748 | if ((lane_status & CHANNEL_EQ_BITS) != CHANNEL_EQ_BITS) | ||
1749 | return false; | ||
1750 | } | ||
1751 | return true; | ||
1752 | } | ||
1753 | |||
1754 | static bool | 1723 | static bool |
1755 | intel_dp_set_link_train(struct intel_dp *intel_dp, | 1724 | intel_dp_set_link_train(struct intel_dp *intel_dp, |
1756 | uint32_t dp_reg_value, | 1725 | uint32_t dp_reg_value, |
@@ -2004,7 +1973,7 @@ intel_dp_complete_link_train(struct intel_dp *intel_dp) | |||
2004 | continue; | 1973 | continue; |
2005 | } | 1974 | } |
2006 | 1975 | ||
2007 | if (intel_channel_eq_ok(intel_dp, link_status)) { | 1976 | if (drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) { |
2008 | channel_eq = true; | 1977 | channel_eq = true; |
2009 | break; | 1978 | break; |
2010 | } | 1979 | } |
@@ -2223,7 +2192,7 @@ intel_dp_check_link_status(struct intel_dp *intel_dp) | |||
2223 | DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n"); | 2192 | DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n"); |
2224 | } | 2193 | } |
2225 | 2194 | ||
2226 | if (!intel_channel_eq_ok(intel_dp, link_status)) { | 2195 | if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) { |
2227 | DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n", | 2196 | DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n", |
2228 | drm_get_encoder_name(&intel_dp->base.base)); | 2197 | drm_get_encoder_name(&intel_dp->base.base)); |
2229 | intel_dp_start_link_train(intel_dp); | 2198 | intel_dp_start_link_train(intel_dp); |