Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: [PATCH 4/5] drm/i915/dp: Queue a link check after link training is complete
Date: Mon, 24 Feb 2025 21:31:14 +0200	[thread overview]
Message-ID: <20250224193115.2058512-5-imre.deak@intel.com> (raw)
In-Reply-To: <20250224193115.2058512-1-imre.deak@intel.com>

After link training - both in case of a passing and failing LT result -
a work is scheduled to check the link state. This check should take
place after the link training is completed by disabling the link
training pattern and setting intel_dp::link_trained=true. Atm, the work
is scheduled before these steps, which may result in checking the link
state too early (and thus not retraining the link as expected).

Fix the above by scheduling the link check work after link training is
complete.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 .../gpu/drm/i915/display/intel_dp_link_training.c   | 13 +++++++++----
 1 file changed, 9 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 1519c202bf8c1..75bc7cde8165e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -1123,6 +1123,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_display *display = to_intel_display(intel_dp);
 	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 
 	intel_dp->link_trained = true;
@@ -1137,6 +1138,13 @@ void intel_dp_stop_link_train(struct intel_dp *intel_dp,
 	}
 
 	intel_hpd_resume(encoder);
+
+	if (!display->hotplug.ignore_long_hpd &&
+	    intel_dp->link.seq_train_failures < 2) {
+		int delay_ms = intel_dp->link.seq_train_failures ? 0 : 2000;
+
+		intel_encoder_link_check_queue_work(encoder, delay_ms);
+	}
 }
 
 static bool
@@ -1641,7 +1649,6 @@ void intel_dp_start_link_train(struct intel_atomic_state *state,
 		lt_dbg(intel_dp, DP_PHY_DPRX, "Forcing link training failure\n");
 	} else if (passed) {
 		intel_dp->link.seq_train_failures = 0;
-		intel_encoder_link_check_queue_work(encoder, 2000);
 		return;
 	}
 
@@ -1664,10 +1671,8 @@ void intel_dp_start_link_train(struct intel_atomic_state *state,
 		return;
 	}
 
-	if (intel_dp->link.seq_train_failures < 2) {
-		intel_encoder_link_check_queue_work(encoder, 0);
+	if (intel_dp->link.seq_train_failures < 2)
 		return;
-	}
 
 	if (intel_dp_schedule_fallback_link_training(state, intel_dp, crtc_state))
 		return;
-- 
2.44.2


  parent reply	other threads:[~2025-02-24 19:30 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-24 19:31 [PATCH 0/5] drm/dp: Fix link training interrupted by HPD pulse Imre Deak
2025-02-24 19:31 ` [PATCH 1/5] drm/i915/hpd: Let an HPD pin be in the disabled state when handling missed IRQs Imre Deak
2025-02-24 19:31 ` [PATCH 2/5] drm/i915/hpd: Add support for suspending the IRQ handling on an HPD pin Imre Deak
2025-02-25 12:15   ` [PATCH v2 " Imre Deak
2025-02-25 16:25     ` Jani Nikula
2025-02-25 17:15       ` Imre Deak
2025-02-24 19:31 ` [PATCH 3/5] drm/i915/dp: Fix link training interrupted by a short HPD pulse Imre Deak
2025-02-24 19:31 ` Imre Deak [this message]
2025-02-24 19:31 ` [PATCH 5/5] drm/i915/crt: Use intel_hpd_suspend/resume() instead of intel_hpd_disable/enable() Imre Deak
2025-02-25 12:15   ` [PATCH v2 " Imre Deak
2025-02-25  1:54 ` ✓ CI.Patch_applied: success for drm/dp: Fix link training interrupted by HPD pulse Patchwork
2025-02-25  1:54 ` ✓ CI.checkpatch: " Patchwork
2025-02-25  1:56 ` ✓ CI.KUnit: " Patchwork
2025-02-25  2:12 ` ✓ CI.Build: " Patchwork
2025-02-25  2:14 ` ✓ CI.Hooks: " Patchwork
2025-02-25  2:16 ` ✗ CI.checksparse: warning " Patchwork
2025-02-25  2:35 ` ✓ Xe.CI.BAT: success " Patchwork
2025-02-25  6:13 ` ✗ Xe.CI.Full: failure " Patchwork
2025-02-25 12:20 ` ✓ CI.Patch_applied: success for drm/dp: Fix link training interrupted by HPD pulse (rev3) Patchwork
2025-02-25 12:20 ` ✓ CI.checkpatch: " Patchwork
2025-02-25 12:21 ` ✓ CI.KUnit: " Patchwork
2025-02-25 12:38 ` ✓ CI.Build: " Patchwork
2025-02-25 12:40 ` ✓ CI.Hooks: " Patchwork
2025-02-25 12:42 ` ✗ CI.checksparse: warning " Patchwork
2025-02-25 12:59 ` ✓ Xe.CI.BAT: success " Patchwork
2025-02-25 19:15 ` ✗ Xe.CI.Full: failure " Patchwork
2025-02-26 12:55 ` [PATCH 0/5] drm/dp: Fix link training interrupted by HPD pulse Jani Nikula
2025-02-26 13:17   ` Imre Deak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250224193115.2058512-5-imre.deak@intel.com \
    --to=imre.deak@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox