[PATCH RFC 2/3] drm/i915/dp: On AUX_CH tx timeout, wake up the sink

Arun R Murthy posted 3 patches 1 month ago
[PATCH RFC 2/3] drm/i915/dp: On AUX_CH tx timeout, wake up the sink
Posted by Arun R Murthy 1 month ago
On a native AUX_CH transaction when the timer on DPTX timesout this can
be due to DPTX sending invalid command or the sink is waking up from
sleept state and hence there is a No Reply from DPRX. In this case try
to wake up the sink device.

Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_aux.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux.c b/drivers/gpu/drm/i915/display/intel_dp_aux.c
index b20ec3e589fadc4972efb77286978f38a527bd1c..0a9e2d6cdbc5d9e0d17b2db60a32cf20a3bad6b6 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_aux.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_aux.c
@@ -372,8 +372,17 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
 			 *   Timeout errors from the HW already meet this
 			 *   requirement so skip to next iteration
 			 */
-			if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR)
+			if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR) {
+				/*
+				 * Timeout can occur when there is no reply
+				 * from the sink and this can be either due to
+				 * DPTX sending wrong command or sink is sleep
+				 * state/waking up from sleep state.
+				 * Spec DP2.1 Section 2.11.7.1.5.8
+				 */
+				drm_dp_wake_sink(&intel_dp->aux);
 				continue;
+			}
 
 			if (status & DP_AUX_CH_CTL_RECEIVE_ERROR) {
 				usleep_range(400, 500);

-- 
2.25.1