Replace the misnamed retrain_disabled flag with a dedicated link
recovery state indicating that no fallback link configurations remain.

This clarifies the meaning of the state: it has always represented the
situation where no further fallback link configurations are available.

While at it, add a TODO comment to the debugfs entry, to expose this
state via a more appropriately named entry.

Signed-off-by: Imre Deak <[email protected]>
---
 .../drm/i915/display/intel_dp_link_training.c | 28 ++++++++++++++++---
 1 file changed, 24 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 a326e9803f2c8..ad67f9df46d7b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -85,13 +85,21 @@
  *   failures trigger further fallback selections and userspace
  *   notifications.
  *
+ * @INTEL_DP_LINK_RECOVERY_NO_FALLBACK:
+ *   Fallback selection is no longer possible, as no usable fallback link
+ *   configurations remain. Recovery must proceed via userspace modesets
+ *   using the remaining allowed link configuration. Userspace continues
+ *   to be notified of subsequent link training failures.
+ *
  * Describes the link recovery state used by the Intel DP link recovery
  * logic.
  *
  * See also:
  *   - link_recovery_autoretrain_pending()
  *   - link_recovery_autoretrain_allowed()
+ *   - link_recovery_has_no_fallback()
  *   - link_recovery_mark_train_failure()
+ *   - link_recovery_mark_no_fallback()
  *   - link_recovery_reset()
  */
 enum intel_dp_link_recovery_state {
@@ -102,6 +110,7 @@ enum intel_dp_link_recovery_state {
        INTEL_DP_LINK_RECOVERY_IDLE,
        INTEL_DP_LINK_RECOVERY_AUTORETRAIN_PENDING,
        INTEL_DP_LINK_RECOVERY_AUTORETRAIN_DISABLED,
+       INTEL_DP_LINK_RECOVERY_NO_FALLBACK,
 };
 
 struct intel_dp_link_training {
@@ -109,7 +118,6 @@ struct intel_dp_link_training {
 
        enum intel_dp_link_recovery_state recovery_state;
 
-       bool retrain_disabled;
        int force_train_failure;
        bool force_retrain;
 };
@@ -1338,6 +1346,12 @@ link_recovery_autoretrain_allowed(struct 
intel_dp_link_training *link_training)
        }
 }
 
+static bool
+link_recovery_has_no_fallback(struct intel_dp_link_training *link_training)
+{
+       return link_training->recovery_state == 
INTEL_DP_LINK_RECOVERY_NO_FALLBACK;
+}
+
 /*
  * Record a link training failure and advance the recovery state to
  * indicate the next required recovery step.
@@ -1367,6 +1381,12 @@ link_recovery_mark_train_failure(struct 
intel_dp_link_training *link_training)
        return link_recovery_autoretrain_allowed(link_training);
 }
 
+/* Record that no more link fallback configuration is available. */
+static void
+link_recovery_mark_no_fallback(struct intel_dp_link_training *link_training)
+{
+       link_training->recovery_state = INTEL_DP_LINK_RECOVERY_NO_FALLBACK;
+}
 
 /**
  * link_recovery_reset - reset the link recovery state
@@ -1973,7 +1993,7 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
        if (intel_dp_schedule_fallback_link_training(state, intel_dp, 
crtc_state))
                return;
 
-       link_training->retrain_disabled = true;
+       link_recovery_mark_no_fallback(link_training);
 
        if (!passed)
                lt_err(intel_dp, DP_PHY_DPRX, "Can't reduce link training 
parameters after failure\n");
@@ -2568,7 +2588,8 @@ static int i915_dp_link_retrain_disabled_show(struct 
seq_file *m, void *data)
 
        intel_dp_flush_connector_commits(connector);
 
-       seq_printf(m, "%s\n", str_yes_no(link_training->retrain_disabled));
+       /* TODO: Expose this via a debugfs entry reflecting what the state 
represents. */
+       seq_printf(m, "%s\n", 
str_yes_no(link_recovery_has_no_fallback(link_training)));
 
        drm_modeset_unlock(&display->drm->mode_config.connection_mutex);
 
@@ -2608,7 +2629,6 @@ void intel_dp_link_training_debugfs_add(struct 
intel_connector *connector)
 
 void intel_dp_link_training_reset(struct intel_dp_link_training *link_training)
 {
-       link_training->retrain_disabled = false;
        link_recovery_reset(link_training);
 }
 
-- 
2.49.1

Reply via email to