Message ID | 20240220211841.448846-21-imre.deak@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Add Display Port tunnel BW allocation support | expand |
> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Imre > Deak > Sent: Wednesday, February 21, 2024 2:49 AM > To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org > Subject: [PATCH v2 20/21] drm/i915/dp: Read DPRX for all long HPD pulses > > The TBT DP tunnel BW request logic in the Thunderbolt Connection Manager > depends on the GFX driver reading out the sink's DPRX capabilities in response to > a long HPD pulse. Since in i915 this read-out can be blocked by another > connector's/encoder's hotplug event handling (which is serialized by > drm_mode_config::connection_mutex), do a dummy DPRX read-out in the > encoder's HPD pulse handler (which is not blocked by other encoders). Looks Good to me. Reviewed-by: Uma Shankar <uma.shankar@intel.com> > Signed-off-by: Imre Deak <imre.deak@intel.com> > --- > drivers/gpu/drm/i915/display/intel_dp.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c > b/drivers/gpu/drm/i915/display/intel_dp.c > index 35ef17439038a..f7f8bd5742ad4 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -6162,6 +6162,7 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, > bool long_hpd) { > struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); > struct intel_dp *intel_dp = &dig_port->dp; > + u8 dpcd[DP_RECEIVER_CAP_SIZE]; > > if (dig_port->base.type == INTEL_OUTPUT_EDP && > (long_hpd || !intel_pps_have_panel_power_or_vdd(intel_dp))) { @@ - > 6184,6 +6185,17 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, > bool long_hpd) > dig_port->base.base.name, > long_hpd ? "long" : "short"); > > + /* > + * TBT DP tunnels require the GFX driver to read out the DPRX caps in > + * response to long HPD pulses. The DP hotplug handler does that, > + * however the hotplug handler may be blocked by another > + * connector's/encoder's hotplug handler. Since the TBT CM may not > + * complete the DP tunnel BW request for the latter connector/encoder > + * waiting for this encoder's DPRX read, perform a dummy read here. > + */ > + if (long_hpd) > + intel_dp_read_dprx_caps(intel_dp, dpcd); > + > if (long_hpd) { > intel_dp->reset_link_params = true; > return IRQ_NONE; > -- > 2.39.2
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 35ef17439038a..f7f8bd5742ad4 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -6162,6 +6162,7 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, bool long_hpd) { struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); struct intel_dp *intel_dp = &dig_port->dp; + u8 dpcd[DP_RECEIVER_CAP_SIZE]; if (dig_port->base.type == INTEL_OUTPUT_EDP && (long_hpd || !intel_pps_have_panel_power_or_vdd(intel_dp))) { @@ -6184,6 +6185,17 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, bool long_hpd) dig_port->base.base.name, long_hpd ? "long" : "short"); + /* + * TBT DP tunnels require the GFX driver to read out the DPRX caps in + * response to long HPD pulses. The DP hotplug handler does that, + * however the hotplug handler may be blocked by another + * connector's/encoder's hotplug handler. Since the TBT CM may not + * complete the DP tunnel BW request for the latter connector/encoder + * waiting for this encoder's DPRX read, perform a dummy read here. + */ + if (long_hpd) + intel_dp_read_dprx_caps(intel_dp, dpcd); + if (long_hpd) { intel_dp->reset_link_params = true; return IRQ_NONE;
The TBT DP tunnel BW request logic in the Thunderbolt Connection Manager depends on the GFX driver reading out the sink's DPRX capabilities in response to a long HPD pulse. Since in i915 this read-out can be blocked by another connector's/encoder's hotplug event handling (which is serialized by drm_mode_config::connection_mutex), do a dummy DPRX read-out in the encoder's HPD pulse handler (which is not blocked by other encoders). Signed-off-by: Imre Deak <imre.deak@intel.com> --- drivers/gpu/drm/i915/display/intel_dp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)