[Intel-gfx] [PATCH] drm/i915: Show stack (by WARN) for hitting forcewake errors
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Tue Jul 24 10:33:47 UTC 2018
On 20/07/2018 12:11, Chris Wilson wrote:
> On Sandybridge, we need a workaround to wait for the CPU thread to wake
> up before we are sure that we have enabled the GT power well. However,
> we do see the errors being reported and failed reads returning spurious
> results. To try and capture more details as it fails, promote the error
> into a WARN so we grab the stacktrace, and to try and reduce the
> frequency of error increase the timeout from 500us to 5ms.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/intel_uncore.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index b892ca8396e8..284be151f645 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -283,14 +283,24 @@ fw_domains_reset(struct drm_i915_private *i915,
> fw_domain_reset(i915, d);
> }
>
> +static inline u32 gt_thread_status(struct drm_i915_private *dev_priv)
> +{
> + u32 val;
> +
> + val = __raw_i915_read32(dev_priv, GEN6_GT_THREAD_STATUS_REG);
> + val &= GEN6_GT_THREAD_STATUS_CORE_MASK;
> +
> + return val;
> +}
> +
> static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
> {
> - /* w/a for a sporadic read returning 0 by waiting for the GT
> + /*
> + * w/a for a sporadic read returning 0 by waiting for the GT
> * thread to wake up.
> */
> - if (wait_for_atomic_us((__raw_i915_read32(dev_priv, GEN6_GT_THREAD_STATUS_REG) &
> - GEN6_GT_THREAD_STATUS_CORE_MASK) == 0, 500))
> - DRM_ERROR("GT thread status wait timed out\n");
> + WARN_ONCE(wait_for_atomic_us(gt_thread_status(dev_priv) == 0, 5000),
> + "GT thread status wait timed out\n");
> }
>
> static void fw_domains_get_with_thread_status(struct drm_i915_private *dev_priv,
>
Quite a large increase - but I guess nothing we can do if it's hit, nor
it's better to time out faster if the wait needs to be longer.
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list