From 316b3060252a57e86d846a5355c454e6fc8f400a Mon Sep 17 00:00:00 2001 From: Imre Deak Date: Mon, 1 Jun 2026 12:38:19 +0300 Subject: [PATCH] drm/i915/dp_link_training: Add helpers to access force retrain state Add helpers to get and set the force retrain state in preparation for moving the state from the DP struct to the link training state. Reviewed-by: Mika Kahola Signed-off-by: Imre Deak Link: https://patch.msgid.link/20260601093836.3057345-7-imre.deak@intel.com --- drivers/gpu/drm/i915/display/intel_dp.c | 2 +- .../drm/i915/display/intel_dp_link_training.c | 29 +++++++++++++++---- .../drm/i915/display/intel_dp_link_training.h | 2 ++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 8b3bc20578c8..920d5b5e8caf 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -5689,7 +5689,7 @@ static bool intel_dp_check_mst_status(struct intel_dp *intel_dp) { struct intel_display *display = to_intel_display(intel_dp); - bool force_retrain = intel_dp->link.force_retrain; + bool force_retrain = intel_dp_link_training_get_force_retrain(intel_dp->link.training); bool reprobe_needed = false; for (;;) { 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 4ecc00b7c9ff..831dec86febd 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c @@ -1944,9 +1944,25 @@ intel_dp_read_link_status(struct intel_dp *intel_dp, u8 link_status[DP_LINK_STAT return 0; } +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; +} + +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; +} + static bool intel_dp_needs_link_retrain(struct intel_dp *intel_dp) { + struct intel_dp_link_training *link_training = intel_dp->link.training; u8 link_status[DP_LINK_STATUS_SIZE]; if (!intel_dp->link.active) @@ -1963,7 +1979,7 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp) if (intel_psr_enabled(intel_dp)) return false; - if (intel_dp->link.force_retrain) + if (intel_dp_link_training_get_force_retrain(link_training)) return true; if (intel_dp_read_link_status(intel_dp, link_status) < 0) @@ -2005,6 +2021,8 @@ static int intel_dp_retrain_link(struct intel_encoder *encoder, { struct intel_display *display = to_intel_display(encoder); struct intel_dp *intel_dp = enc_to_intel_dp(encoder); + struct intel_dp_link_training *link_training = + intel_dp->link.training; u8 pipe_mask; int ret; @@ -2032,13 +2050,13 @@ static int intel_dp_retrain_link(struct intel_encoder *encoder, drm_dbg_kms(display->drm, "[ENCODER:%d:%s] retraining link (forced %s)\n", encoder->base.base.id, encoder->base.name, - str_yes_no(intel_dp->link.force_retrain)); + str_yes_no(intel_dp_link_training_get_force_retrain(link_training))); ret = intel_modeset_commit_pipes(display, pipe_mask, ctx); if (ret == -EDEADLK) return ret; - intel_dp->link.force_retrain = false; + intel_dp_link_training_set_force_retrain(link_training, false); if (ret) drm_dbg_kms(display->drm, @@ -2376,7 +2394,6 @@ static int i915_dp_force_link_retrain_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); @@ -2385,7 +2402,7 @@ static int i915_dp_force_link_retrain_show(void *data, u64 *val) intel_dp_flush_connector_commits(connector); - *val = intel_dp->link.force_retrain; + *val = intel_dp_link_training_get_force_retrain(link_training); drm_modeset_unlock(&display->drm->mode_config.connection_mutex); @@ -2406,7 +2423,7 @@ static int i915_dp_force_link_retrain_write(void *data, u64 val) intel_dp_flush_connector_commits(connector); - intel_dp->link.force_retrain = val; + intel_dp_link_training_set_force_retrain(link_training, val); drm_modeset_unlock(&display->drm->mode_config.connection_mutex); diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.h b/drivers/gpu/drm/i915/display/intel_dp_link_training.h index 36ba9535fc34..ef16fcabd6da 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.h +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.h @@ -59,6 +59,8 @@ void intel_dp_128b132b_sdp_crc16(struct intel_dp *intel_dp, bool intel_dp_link_params_valid(struct intel_dp *intel_dp, int link_rate, u8 lane_count); +bool intel_dp_link_training_get_force_retrain(struct intel_dp_link_training *link_training); + void intel_dp_link_check(struct intel_encoder *encoder); void intel_dp_check_link_state(struct intel_dp *intel_dp);