mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04:00
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 <mika.kahola@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patch.msgid.link/20260601093836.3057345-7-imre.deak@intel.com
This commit is contained in:
@@ -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 (;;) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user