Commit d544d000 authored by Imre Deak's avatar Imre Deak

drm/i915/dp: Abort AUX on disconnected native DP ports

An AUX transfer on any disconnected DP port results in long
timeout/retry delays the same way as this is described for TypeC port in

commit a972cd3f ("drm/i915/tc: Abort DP AUX transfer on a disconnected TC port")

Prevent the delay on non-TypeC ports as well by aborting the transfer if
the port is disconnected. For eDP keep the current behavior as the
support for HPD signaling is optional for it.

Link: https://patchwork.freedesktop.org/patch/msgid/20240104083008.2715733-13-imre.deak@intel.comReviewed-by: default avatarJouni Högander <jouni.hogander@intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
parent 2e4b90fb
...@@ -231,8 +231,6 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp, ...@@ -231,8 +231,6 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
struct intel_encoder *encoder = &dig_port->base; struct intel_encoder *encoder = &dig_port->base;
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
enum phy phy = intel_port_to_phy(i915, dig_port->base.port);
bool is_tc_port = intel_phy_is_tc(i915, phy);
i915_reg_t ch_ctl, ch_data[5]; i915_reg_t ch_ctl, ch_data[5];
u32 aux_clock_divider; u32 aux_clock_divider;
enum intel_display_power_domain aux_domain; enum intel_display_power_domain aux_domain;
...@@ -252,9 +250,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp, ...@@ -252,9 +250,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
* Abort transfers on a disconnected port as required by * Abort transfers on a disconnected port as required by
* DP 1.4a link CTS 4.2.1.5, also avoiding the long AUX * DP 1.4a link CTS 4.2.1.5, also avoiding the long AUX
* timeouts that would otherwise happen. * timeouts that would otherwise happen.
* TODO: abort the transfer on non-TC ports as well.
*/ */
if (is_tc_port && if (!intel_dp_is_edp(intel_dp) &&
!intel_digital_port_connected_locked(&dig_port->base)) { !intel_digital_port_connected_locked(&dig_port->base)) {
ret = -ENXIO; ret = -ENXIO;
goto out_unlock; goto out_unlock;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment