aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Bride <jim.bride@linux.intel.com>2015-05-27 13:21:48 -0400
committerJani Nikula <jani.nikula@intel.com>2015-06-01 03:55:51 -0400
commite058c945e03a629c99606452a6931f632dd28903 (patch)
tree8634b8c8419493e9c0861b364ecb2403da91c668
parentc65b99f046843d2455aa231747b5a07a999a9f3d (diff)
drm/i915/hsw: Fix workaround for server AUX channel clock divisor
According to the HSW b-spec we need to try clock divisors of 63 and 72, each 3 or more times, when attempting DP AUX channel communication on a server chipset. This actually wasn't happening due to a short-circuit that only checked the DP_AUX_CH_CTL_DONE bit in status rather than checking that the operation was done and that DP_AUX_CH_CTL_TIME_OUT_ERROR was not set. [v2] Implemented alternate solution suggested by Jani Nikula. Cc: stable@vger.kernel.org Signed-off-by: Jim Bride <jim.bride@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f27346e907b1..d714a4b5711e 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -880,10 +880,8 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
880 DP_AUX_CH_CTL_RECEIVE_ERROR)) 880 DP_AUX_CH_CTL_RECEIVE_ERROR))
881 continue; 881 continue;
882 if (status & DP_AUX_CH_CTL_DONE) 882 if (status & DP_AUX_CH_CTL_DONE)
883 break; 883 goto done;
884 } 884 }
885 if (status & DP_AUX_CH_CTL_DONE)
886 break;
887 } 885 }
888 886
889 if ((status & DP_AUX_CH_CTL_DONE) == 0) { 887 if ((status & DP_AUX_CH_CTL_DONE) == 0) {
@@ -892,6 +890,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
892 goto out; 890 goto out;
893 } 891 }
894 892
893done:
895 /* Check for timeout or receive error. 894 /* Check for timeout or receive error.
896 * Timeouts occur when the sink is not connected 895 * Timeouts occur when the sink is not connected
897 */ 896 */