diff options
| author | Jani Nikula <jani.nikula@intel.com> | 2022-01-12 13:03:14 +0200 |
|---|---|---|
| committer | Jani Nikula <jani.nikula@intel.com> | 2022-01-21 12:55:17 +0200 |
| commit | 603801d0f2f418941d2524ffc43fa6d8c95873b3 (patch) | |
| tree | a2b6fb3381f6aacf46c6932d55cf7df0ac691d0d /drivers/gpu/drm/i915/display/intel_dp.c | |
| parent | 26950f2968e873301c8c536ba0615ba04c17a0de (diff) | |
drm/i915/mst: abstract intel_dp_ack_sink_irq_esi()
Smaller functions make the thing easier to read. Debug log failures to
ack.
Note: Looks like we have the retry loop simply because of hysterical
raisins, dating back to the original DP MST enabling. Keep it, though I
have no idea why we have it.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220112110319.1172110-2-jani.nikula@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_dp.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dp.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index e789ecbc69f3..a301220ce2ad 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -2821,6 +2821,19 @@ intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *sink_irq_vector) DP_DPRX_ESI_LEN; } +static bool intel_dp_ack_sink_irq_esi(struct intel_dp *intel_dp, u8 esi[4]) +{ + int retry; + + for (retry = 0; retry < 3; retry++) { + if (drm_dp_dpcd_write(&intel_dp->aux, DP_SINK_COUNT_ESI + 1, + &esi[1], 3) == 3) + return true; + } + + return false; +} + bool intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state, const struct drm_connector_state *conn_state) @@ -3661,7 +3674,6 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp) */ u8 esi[DP_DPRX_ESI_LEN+2] = {}; bool handled; - int retry; if (!intel_dp_get_sink_irq_esi(intel_dp, esi)) { drm_dbg_kms(&i915->drm, @@ -3686,15 +3698,8 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp) if (!handled) break; - for (retry = 0; retry < 3; retry++) { - int wret; - - wret = drm_dp_dpcd_write(&intel_dp->aux, - DP_SINK_COUNT_ESI+1, - &esi[1], 3); - if (wret == 3) - break; - } + if (!intel_dp_ack_sink_irq_esi(intel_dp, esi)) + drm_dbg_kms(&i915->drm, "Failed to ack ESI\n"); } return link_ok; |
