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.d...@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrj...@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

Reply via email to