[Intel-gfx] [PATCH v2 09/12] drm/i915/dp: Prevent link training fallback on disconnected port

Ville Syrjälä ville.syrjala at linux.intel.com
Thu May 4 14:54:44 UTC 2023


On Thu, May 04, 2023 at 02:10:45AM +0300, Imre Deak wrote:
> Prevent downgrading the link training maximum lane count/rate if the
> sink is disconnected - and so the link training failure is expected. In
> such cases modeset failures due to the reduced max link params would be
> just confusing for user space (instead of which the correct thing it
> should act on is the sink disconnect signaled by a hotplug event,
> requiring a disabling modeset).
> 
> Signed-off-by: Imre Deak <imre.deak at intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_dp.h               | 1 +
>  drivers/gpu/drm/i915/display/intel_dp_link_training.c | 5 +++++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
> index 488da392fafe5..ca12a1733df6f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -102,6 +102,7 @@ void intel_dp_set_infoframes(struct intel_encoder *encoder, bool enable,
>  void intel_read_dp_sdp(struct intel_encoder *encoder,
>  		       struct intel_crtc_state *crtc_state,
>  		       unsigned int type);
> +bool intel_dp_is_connected(struct intel_dp *intel_dp);
>  bool intel_digital_port_connected(struct intel_encoder *encoder);
>  int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 dsc_max_bpc);
>  u16 intel_dp_dsc_get_output_bpp(struct drm_i915_private *i915,
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> index 2fe076e2d64b3..fcccf410f7693 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -1088,6 +1088,11 @@ static void intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
>  {
>  	struct intel_connector *intel_connector = intel_dp->attached_connector;
>  
> +	if (!intel_dp_is_connected(intel_dp)) {
> +		lt_dbg(intel_dp, DP_PHY_DPRX, "Link Training failed on disconnected sink.\n");
> +		return;
> +	}
> +
>  	if (intel_dp->hobl_active) {
>  		lt_dbg(intel_dp, DP_PHY_DPRX,
>  		       "Link Training failed with HOBL active, not enabling it from now on\n");
> -- 
> 2.37.2

-- 
Ville Syrjälä
Intel


More information about the Intel-gfx mailing list