> -----Original Message----- > From: Intel-gfx <[email protected]> On Behalf Of Imre > Deak > Sent: Monday, 1 June 2026 12.38 > To: [email protected]; [email protected] > Subject: [PATCH v2 07/22] drm/i915/dp_link_training: Move link recovery/debug > state to link_training > > 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. >
Reviewed-by: Mika Kahola <[email protected]> > 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
