> -----Original Message-----
> From: Intel-xe <[email protected]> On Behalf Of Imre Deak
> Sent: Monday, 1 June 2026 12.38
> To: [email protected]; [email protected]
> Cc: Nikula, Jani <[email protected]>
> Subject: [PATCH v2 12/22] drm/i915/dp_link_training: Add helper to query 
> allowed autoretrain
> 
> Add link_recovery_autoretrain_allowed() to make it clearer what the
> condition is about at its callers: queuing work for and starting an
> autoretrain is allowed.
> 
> This also prepares for replacing the sequential link training failure
> counter with an enum in a follow-up change.
> 
> v2: Convert link_recovery_autoretrain_allowed()'s documentation to be a
>     non kernel-doc comment and detail what an allowed autoretrain is.
>     (Jani)
> 
> Cc: Jani Nikula <[email protected]>

Reviewed-by: Mika Kahola <[email protected]>

> Signed-off-by: Imre Deak <[email protected]>
> ---
>  .../drm/i915/display/intel_dp_link_training.c | 30 ++++++++++++++++---
>  1 file changed, 26 insertions(+), 4 deletions(-)
> 
> 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 f6a8102a300c1..6c48219d770bd 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -1270,6 +1270,28 @@ link_recovery_autoretrain_pending(struct 
> intel_dp_link_training *link_training)
>       return link_training->seq_train_failures == 1;
>  }
> 
> +/*
> + * Automatic retraining is a driver-driven link recovery mechanism that
> + * retrains the link with the current userspace provided modeset
> + * configuration and link parameters.
> + *
> + * Autoretrain is allowed while the link configurations available for
> + * retraining, i.e. those not disabled yet via fallback selection, still
> + * make it possible to retrain the link for the current userspace provided
> + * modeset configuration.
> + *
> + * Once automatic retraining is no longer allowed, userspace driven link
> + * recovery via userspace notifications and userspace modesets takes over.
> + *
> + * See also:
> + *   - DOC: DisplayPort link training
> + */
> +static bool
> +link_recovery_autoretrain_allowed(struct intel_dp_link_training 
> *link_training)
> +{
> +     return link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES;
> +}
> +
>  /**
>   * intel_dp_stop_link_train - stop link training
>   * @intel_dp: DP struct
> @@ -1310,7 +1332,7 @@ void intel_dp_stop_link_train(struct intel_dp *intel_dp,
>       intel_hpd_unblock(encoder);
> 
>       if (!display->hotplug.ignore_long_hpd &&
> -         link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES) {
> +         link_recovery_autoretrain_allowed(link_training)) {
>               int delay_ms = link_recovery_autoretrain_pending(link_training) 
> ? 0 : 2000;
> 
>               intel_encoder_link_check_queue_work(encoder, delay_ms);
> @@ -1837,7 +1859,7 @@ void intel_dp_start_link_train(struct 
> intel_atomic_state *state,
>               return;
>       }
> 
> -     if (link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES)
> +     if (link_recovery_autoretrain_allowed(link_training))
>               link_training->seq_train_failures++;
> 
>       /*
> @@ -1857,7 +1879,7 @@ void intel_dp_start_link_train(struct 
> intel_atomic_state *state,
>               return;
>       }
> 
> -     if (link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES)
> +     if (link_recovery_autoretrain_allowed(link_training))
>               return;
> 
>       if (intel_dp_schedule_fallback_link_training(state, intel_dp, 
> crtc_state))
> @@ -2009,7 +2031,7 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
>                                       intel_dp->lane_count))
>               return false;
> 
> -     if (link_training->seq_train_failures >= MAX_SEQ_TRAIN_FAILURES)
> +     if (!link_recovery_autoretrain_allowed(link_training))
>               return false;
> 
>       if (link_recovery_autoretrain_pending(link_training))
> --
> 2.49.1

Reply via email to