[RFC PATCH] i915/gt: Reapply workarounds in case the previous attempt failed.

Sebastian Brzezinka sebastian.brzezinka at intel.com
Thu Dec 5 15:47:35 UTC 2024


`wa_verify`sporadically detects lost workaround on application; this
is unusual behavior since wa are applied at `intel_gt_init_hw` and
verified right away by `intel_gt_verify_workarounds`, and  `wa_verify`
doesn't fail on initialization as one might suspect would happen.

One approach that may be somewhat beneficial is to reapply workarounds
in the event of failure, or even get rid of verify on application,
since it's redundant to `intel_gt_verify_workarounds`.

This patch aims to resolve: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12668

Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka at intel.com>
---
 drivers/gpu/drm/i915/gt/intel_workarounds.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 570c91878189..4ee623448223 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -1761,6 +1761,17 @@ static void wa_list_apply(const struct i915_wa_list *wal)
 				intel_gt_mcr_read_any_fw(gt, wa->mcr_reg) :
 				intel_uncore_read_fw(uncore, wa->reg);
 
+			if ((val ^ wa->set) & wa->read) { 
+				if (wa->is_mcr)
+					intel_gt_mcr_multicast_write_fw(gt, wa->mcr_reg, val);
+				else
+					intel_uncore_write_fw(uncore, wa->reg, val);
+			}
+
+			val = wa->is_mcr ?
+				intel_gt_mcr_read_any_fw(gt, wa->mcr_reg) :
+				intel_uncore_read_fw(uncore, wa->reg);
+
 			wa_verify(gt, wa, val, wal->name, "application");
 		}
 	}
-- 
2.34.1



More information about the Intel-gfx mailing list