Commit fdd9b7dc authored by Matt Roper's avatar Matt Roper Committed by Andi Shyti

drm/i915: Check for unreliable MMIO during forcewake

Although we now sanitycheck MMIO access during driver load to make sure
the MMIO BAR isn't returning all 0xFFFFFFFF, there have been a few cases
where (temporarily?) unreliable MMIO access has happened after GPU
resets or power events.  We'll often notice this on our next GT register
access since forcewake handling will fail; let's change our handling
slightly so that when this happens we print a more meaningful message
clarifying that the problem is the MMIO access, not forcewake
specifically.
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Reviewed-by: default avatarAndrzej Hajda <andrzej.hajda@intel.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230327195547.356584-3-andi.shyti@linux.intel.com
parent de414973
...@@ -178,12 +178,19 @@ wait_ack_set(const struct intel_uncore_forcewake_domain *d, ...@@ -178,12 +178,19 @@ wait_ack_set(const struct intel_uncore_forcewake_domain *d,
static inline void static inline void
fw_domain_wait_ack_clear(const struct intel_uncore_forcewake_domain *d) fw_domain_wait_ack_clear(const struct intel_uncore_forcewake_domain *d)
{ {
if (wait_ack_clear(d, FORCEWAKE_KERNEL)) { if (!wait_ack_clear(d, FORCEWAKE_KERNEL))
return;
if (fw_ack(d) == ~0)
drm_err(&d->uncore->i915->drm,
"%s: MMIO unreliable (forcewake register returns 0xFFFFFFFF)!\n",
intel_uncore_forcewake_domain_to_str(d->id));
else
drm_err(&d->uncore->i915->drm, drm_err(&d->uncore->i915->drm,
"%s: timed out waiting for forcewake ack to clear.\n", "%s: timed out waiting for forcewake ack to clear.\n",
intel_uncore_forcewake_domain_to_str(d->id)); intel_uncore_forcewake_domain_to_str(d->id));
add_taint_for_CI(d->uncore->i915, TAINT_WARN); /* CI now unreliable */
} add_taint_for_CI(d->uncore->i915, TAINT_WARN); /* CI now unreliable */
} }
enum ack_type { enum ack_type {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment