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 <[email protected]>
---
 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

Reply via email to