From: Jani Nikula <jani.nikula@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, Ben Widawsky <ben@bwidawsk.net>
Subject: Re: [PATCH 2/3] drm/i915: Change forcewake timeout to 2ms
Date: Mon, 27 Aug 2012 09:59:49 +0300 [thread overview]
Message-ID: <87zk5gakgq.fsf@intel.com> (raw)
In-Reply-To: <1345836671-1180-3-git-send-email-ben@bwidawsk.net>
On Fri, 24 Aug 2012, Ben Widawsky <ben@bwidawsk.net> wrote:
> A designer familiar with the hardware has stated that the forcewake
> timeout can theoretically be as high as a little over 1ms. Therefore we
> modify our code to use 2ms (appropriate fudge and because we don't want
> to round down).
>
> Hopefully this can't prevent spurious timeouts.
>
> Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
> ---
> drivers/gpu/drm/i915/intel_pm.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index f42c142..2a8468d 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -31,7 +31,7 @@
> #include "../../../platform/x86/intel_ips.h"
> #include <linux/module.h>
>
> -#define FORCEWAKE_ACK_TIMEOUT_US 500
> +#define FORCEWAKE_ACK_TIMEOUT_MS 2
>
> /* FBC, or Frame Buffer Compression, is a technique employed to compress the
> * framebuffer contents in-memory, aiming at reducing the required bandwidth
> @@ -3970,15 +3970,15 @@ static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
> else
> forcewake_ack = FORCEWAKE_ACK;
>
> - if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
> - FORCEWAKE_ACK_TIMEOUT_US))
> + if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
> + FORCEWAKE_ACK_TIMEOUT_MS))
Superficially this looks okay, but the implementation of
wait_for_atomic() not so. As a surprise, this change drops cpu_relax()
from the busy loop, even thought the timeout is potentially much longer.
The quick fix here would be to just use 2000 us with
wait_for_atomic_us(), but we should do something about wait_for_atomic()
too. Luckily it's only ever used at one place.
BR,
Jani.
> DRM_ERROR("Force wake wait timed out\n");
>
> I915_WRITE_NOTRACE(FORCEWAKE, 1);
> POSTING_READ(FORCEWAKE);
>
> - if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1),
> - FORCEWAKE_ACK_TIMEOUT_US))
> + if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
> + FORCEWAKE_ACK_TIMEOUT_MS))
> DRM_ERROR("Force wake wait timed out\n");
>
> __gen6_gt_wait_for_thread_c0(dev_priv);
> @@ -3993,15 +3993,15 @@ static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
> else
> forcewake_ack = FORCEWAKE_MT_ACK;
>
> - if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
> - FORCEWAKE_ACK_TIMEOUT_US))
> + if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
> + FORCEWAKE_ACK_TIMEOUT_MS))
> DRM_ERROR("Force wake wait timed out\n");
>
> I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
> POSTING_READ(FORCEWAKE_MT);
>
> - if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1),
> - FORCEWAKE_ACK_TIMEOUT_US))
> + if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
> + FORCEWAKE_ACK_TIMEOUT_MS))
> DRM_ERROR("Force wake wait timed out\n");
>
> __gen6_gt_wait_for_thread_c0(dev_priv);
> @@ -4088,8 +4088,8 @@ static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
> I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
> POSTING_READ(FORCEWAKE_VLV);
>
> - if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1),
> - FORCEWAKE_ACK_TIMEOUT_US))
> + if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1),
> + FORCEWAKE_ACK_TIMEOUT_MS))
> DRM_ERROR("Force wake wait timed out\n");
>
> __gen6_gt_wait_for_thread_c0(dev_priv);
> --
> 1.7.12
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2012-08-27 6:55 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-24 19:31 [PATCH 0/3] Some forcewake fixes Ben Widawsky
2012-08-24 19:31 ` [PATCH 1/3] drm/i915: Extract forcewake ack timeout Ben Widawsky
2012-08-24 19:31 ` [PATCH 2/3] drm/i915: Change forcewake timeout to 2ms Ben Widawsky
2012-08-27 6:59 ` Jani Nikula [this message]
2012-08-28 15:51 ` Ben Widawsky
2012-08-28 16:00 ` Daniel Vetter
2012-08-28 16:07 ` Ben Widawsky
2012-08-28 16:27 ` Daniel Vetter
2012-08-24 19:31 ` [PATCH 3/3] drm/i915: Never read FORCEWAKE Ben Widawsky
2012-08-24 19:48 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zk5gakgq.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=ben@bwidawsk.net \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.