All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH v2] drm/i915/display: Reset message bus after each read/write operation
@ 2023-10-13  6:55 Mika Kahola
  2023-10-13 18:52 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/display: Reset message bus after each read/write operation (rev2) Patchwork
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Mika Kahola @ 2023-10-13  6:55 UTC (permalink / raw)
  To: intel-gfx; +Cc: rodrigo.vivi

Every know and then we receive the following error when running
for example IGT test kms_flip.

[drm] *ERROR* PHY G Read 0d80 failed after 3 retries.
[drm] *ERROR* PHY G Write 0d81 failed after 3 retries.

Since the error is sporadic in nature, the patch proposes
to reset the message bus after every successful or unsuccessful
read or write operation. However, the testing revealed that this
alone is not sufficient method and therefore an additional
delay is introduced anything from 200us to 300us to let HW to
settle down. This delay is experimental value and has no
specification to back it up.

v2: Add FIXME's to indicate the experimental nature of
    this workaround (Rodrigo)

Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cx0_phy.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.c b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
index 6e6a1818071e..7c48ec5e54bd 100644
--- a/drivers/gpu/drm/i915/display/intel_cx0_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
@@ -221,6 +221,14 @@ static u8 __intel_cx0_read(struct drm_i915_private *i915, enum port port,
 	for (i = 0; i < 3; i++) {
 		status = __intel_cx0_read_once(i915, port, lane, addr);
 
+		/*
+		 * FIXME: Workaround to let HW to settle
+		 * down and let the message bus to end up
+		 * in a known state
+		 */
+		intel_cx0_bus_reset(i915, port, lane);
+		usleep_range(200, 300);
+
 		if (status >= 0)
 			return status;
 	}
@@ -300,6 +308,14 @@ static void __intel_cx0_write(struct drm_i915_private *i915, enum port port,
 	for (i = 0; i < 3; i++) {
 		status = __intel_cx0_write_once(i915, port, lane, addr, data, committed);
 
+		/*
+		 * FIXME: Workaround to let HW to settle
+		 * down and let the message bus to end up
+		 * in a known state
+		 */
+		intel_cx0_bus_reset(i915, port, lane);
+		usleep_range(200, 300);
+
 		if (status == 0)
 			return;
 	}
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-10-16 11:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-13  6:55 [Intel-gfx] [PATCH v2] drm/i915/display: Reset message bus after each read/write operation Mika Kahola
2023-10-13 18:52 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/display: Reset message bus after each read/write operation (rev2) Patchwork
2023-10-13 20:21 ` [Intel-gfx] [PATCH v2] drm/i915/display: Reset message bus after each read/write operation Rodrigo Vivi
2023-10-16 11:36   ` Kahola, Mika
2023-10-14 23:02 ` [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915/display: Reset message bus after each read/write operation (rev2) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.