> -----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
