Move all state related to link recovery and link training debugging from
struct intel_dp to struct intel_dp_link_training.

This moves towards grouping all link training and recovery state and
logic in a single place and prepares for follow-up changes in the link
recovery state handling.

Signed-off-by: Imre Deak <[email protected]>
---
 .../drm/i915/display/intel_display_types.h    |  5 --
 drivers/gpu/drm/i915/display/intel_dp.c       |  2 +-
 .../drm/i915/display/intel_dp_link_training.c | 52 +++++++++----------
 3 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index b34848b6ad45b..aa4772a1c208e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1854,11 +1854,6 @@ struct intel_dp {
                int mst_probed_rate;
                int force_lane_count;
                int force_rate;
-               bool retrain_disabled;
-               /* Sequential link training failures after a passing LT */
-               int seq_train_failures;
-               int force_train_failure;
-               bool force_retrain;
                struct intel_dp_link_training *training;
        } link;
        bool reset_link_params;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index b6b5586ea0845..3ebc8bdfab9d7 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5941,7 +5941,7 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
        /*
         * Force checking the link status for DPCD_REV < 1.2
         * TODO: let the link status check depend on LINK_STATUS_CHANGED
-        * or intel_dp->link.force_retrain for DPCD_REV >= 1.2
+        * or intel_dp->link.training.force_retrain for DPCD_REV >= 1.2
         */
        esi[3] |= LINK_STATUS_CHANGED;
        if (intel_dp_handle_link_service_irq(intel_dp, esi[3]))
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 831dec86febd1..154caecacecb2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -66,6 +66,12 @@
 
 struct intel_dp_link_training {
        struct intel_dp *dp;
+
+       bool retrain_disabled;
+       /* Sequential link training failures after a passing LT */
+       int seq_train_failures;
+       int force_train_failure;
+       bool force_retrain;
 };
 
 static struct intel_dp_link_training *connector_to_link_training(struct 
intel_connector *connector)
@@ -1277,6 +1283,7 @@ intel_dp_128b132b_intra_hop(struct intel_dp *intel_dp,
 void intel_dp_stop_link_train(struct intel_dp *intel_dp,
                              const struct intel_crtc_state *crtc_state)
 {
+       struct intel_dp_link_training *link_training = intel_dp->link.training;
        struct intel_display *display = to_intel_display(intel_dp);
        struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
        int ret;
@@ -1297,8 +1304,8 @@ void intel_dp_stop_link_train(struct intel_dp *intel_dp,
        intel_hpd_unblock(encoder);
 
        if (!display->hotplug.ignore_long_hpd &&
-           intel_dp->link.seq_train_failures < MAX_SEQ_TRAIN_FAILURES) {
-               int delay_ms = intel_dp->link.seq_train_failures ? 0 : 2000;
+           link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES) {
+               int delay_ms = link_training->seq_train_failures ? 0 : 2000;
 
                intel_encoder_link_check_queue_work(encoder, delay_ms);
        }
@@ -1791,6 +1798,8 @@ void intel_dp_start_link_train(struct intel_atomic_state 
*state,
        struct intel_display *display = to_intel_display(state);
        struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
        struct intel_encoder *encoder = &dig_port->base;
+       struct intel_dp_link_training *link_training =
+               intel_dp->link.training;
        bool passed;
        /*
         * Reinit the LTTPRs here to ensure that they are switched to
@@ -1814,15 +1823,15 @@ void intel_dp_start_link_train(struct 
intel_atomic_state *state,
        else
                passed = intel_dp_link_train_all_phys(intel_dp, crtc_state, 
lttpr_count);
 
-       if (intel_dp->link.force_train_failure) {
-               intel_dp->link.force_train_failure--;
+       if (link_training->force_train_failure) {
+               link_training->force_train_failure--;
                lt_dbg(intel_dp, DP_PHY_DPRX, "Forcing link training 
failure\n");
        } else if (passed) {
-               intel_dp->link.seq_train_failures = 0;
+               link_training->seq_train_failures = 0;
                return;
        }
 
-       intel_dp->link.seq_train_failures++;
+       link_training->seq_train_failures++;
 
        /*
         * Ignore the link failure in CI
@@ -1841,13 +1850,13 @@ void intel_dp_start_link_train(struct 
intel_atomic_state *state,
                return;
        }
 
-       if (intel_dp->link.seq_train_failures < MAX_SEQ_TRAIN_FAILURES)
+       if (link_training->seq_train_failures < MAX_SEQ_TRAIN_FAILURES)
                return;
 
        if (intel_dp_schedule_fallback_link_training(state, intel_dp, 
crtc_state))
                return;
 
-       intel_dp->link.retrain_disabled = true;
+       link_training->retrain_disabled = true;
 
        if (!passed)
                lt_err(intel_dp, DP_PHY_DPRX, "Can't reduce link training 
parameters after failure\n");
@@ -1946,17 +1955,13 @@ intel_dp_read_link_status(struct intel_dp *intel_dp, u8 
link_status[DP_LINK_STAT
 
 bool intel_dp_link_training_get_force_retrain(struct intel_dp_link_training 
*link_training)
 {
-       struct intel_dp *intel_dp = link_training->dp;
-
-       return intel_dp->link.force_retrain;
+       return link_training->force_retrain;
 }
 
 static void intel_dp_link_training_set_force_retrain(struct 
intel_dp_link_training *link_training,
                                                     bool forced)
 {
-       struct intel_dp *intel_dp = link_training->dp;
-
-       intel_dp->link.force_retrain = forced;
+       link_training->force_retrain = forced;
 }
 
 static bool
@@ -1997,10 +2002,10 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
                                        intel_dp->lane_count))
                return false;
 
-       if (intel_dp->link.retrain_disabled)
+       if (link_training->retrain_disabled)
                return false;
 
-       if (intel_dp->link.seq_train_failures)
+       if (link_training->seq_train_failures)
                return true;
 
        /* Retrain if link not ok */
@@ -2346,7 +2351,6 @@ static int i915_dp_force_link_training_failure_show(void 
*data, u64 *val)
        struct intel_connector *connector = to_intel_connector(data);
        struct intel_display *display = to_intel_display(connector);
        struct intel_dp_link_training *link_training = 
connector_to_link_training(connector);
-       struct intel_dp *intel_dp = link_training->dp;
        int err;
 
        err = 
drm_modeset_lock_single_interruptible(&display->drm->mode_config.connection_mutex);
@@ -2355,7 +2359,7 @@ static int i915_dp_force_link_training_failure_show(void 
*data, u64 *val)
 
        intel_dp_flush_connector_commits(connector);
 
-       *val = intel_dp->link.force_train_failure;
+       *val = link_training->force_train_failure;
 
        drm_modeset_unlock(&display->drm->mode_config.connection_mutex);
 
@@ -2367,7 +2371,6 @@ static int i915_dp_force_link_training_failure_write(void 
*data, u64 val)
        struct intel_connector *connector = to_intel_connector(data);
        struct intel_display *display = to_intel_display(connector);
        struct intel_dp_link_training *link_training = 
connector_to_link_training(connector);
-       struct intel_dp *intel_dp = link_training->dp;
        int err;
 
        if (val > 2)
@@ -2379,7 +2382,7 @@ static int i915_dp_force_link_training_failure_write(void 
*data, u64 val)
 
        intel_dp_flush_connector_commits(connector);
 
-       intel_dp->link.force_train_failure = val;
+       link_training->force_train_failure = val;
 
        drm_modeset_unlock(&display->drm->mode_config.connection_mutex);
 
@@ -2440,7 +2443,6 @@ static int i915_dp_link_retrain_disabled_show(struct 
seq_file *m, void *data)
        struct intel_connector *connector = to_intel_connector(m->private);
        struct intel_display *display = to_intel_display(connector);
        struct intel_dp_link_training *link_training = 
connector_to_link_training(connector);
-       struct intel_dp *intel_dp = link_training->dp;
        int err;
 
        err = 
drm_modeset_lock_single_interruptible(&display->drm->mode_config.connection_mutex);
@@ -2449,7 +2451,7 @@ 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(intel_dp->link.retrain_disabled));
+       seq_printf(m, "%s\n", str_yes_no(link_training->retrain_disabled));
 
        drm_modeset_unlock(&display->drm->mode_config.connection_mutex);
 
@@ -2489,10 +2491,8 @@ void intel_dp_link_training_debugfs_add(struct 
intel_connector *connector)
 
 void intel_dp_link_training_reset(struct intel_dp_link_training *link_training)
 {
-       struct intel_dp *intel_dp = link_training->dp;
-
-       intel_dp->link.retrain_disabled = false;
-       intel_dp->link.seq_train_failures = 0;
+       link_training->retrain_disabled = false;
+       link_training->seq_train_failures = 0;
 }
 
 struct intel_dp_link_training *intel_dp_link_training_init(struct intel_dp 
*intel_dp)
-- 
2.49.1

Reply via email to