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

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
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -178,13 +178,20 @@ wait_ack_set(const struct intel_uncore_forcewake_domain *d,
static inline void
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,
			"%s: timed out waiting for forcewake ack to clear.\n",
			intel_uncore_forcewake_domain_to_str(d->id));

	add_taint_for_CI(d->uncore->i915, TAINT_WARN); /* CI now unreliable */
}
}

enum ack_type {
	ACK_CLEAR = 0,