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
