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