Skip to content

Commit

Permalink
drm/i915: Extract forcewake ack timeout
Browse files Browse the repository at this point in the history
It's used all over the place, and we want to be able to play around with
the value, apparently. Note that it doesn't touch other timeouts of the
same value (like gtfifo, and thread C0 wait).

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Chris Wilson <chris@chris-wilson.oc.uk>
[danvet: fixup conflict with vlv forcewake patches.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Ben Widawsky authored and Daniel Vetter committed Sep 3, 2012
1 parent 5fa7ac9 commit b67a437
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions drivers/gpu/drm/i915/intel_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
#include "../../../platform/x86/intel_ips.h"
#include <linux/module.h>

#define FORCEWAKE_ACK_TIMEOUT_US 500

/* FBC, or Frame Buffer Compression, is a technique employed to compress the
* framebuffer contents in-memory, aiming at reducing the required bandwidth
* during in-memory transfers and, therefore, reduce the power packet.
Expand Down Expand Up @@ -3962,13 +3964,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, 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");

I915_WRITE_NOTRACE(FORCEWAKE, 1);
POSTING_READ(FORCEWAKE);

if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1), 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1),
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake to ack request.\n");

__gen6_gt_wait_for_thread_c0(dev_priv);
Expand All @@ -3983,13 +3987,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, 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1) == 0,
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake old ack to clear.\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), 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(forcewake_ack) & 1),
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake to ack request.\n");

__gen6_gt_wait_for_thread_c0(dev_priv);
Expand Down Expand Up @@ -4069,12 +4075,14 @@ int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)

static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
{
if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0, 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0,
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");

I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(1));

if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1), 500))
if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1),
FORCEWAKE_ACK_TIMEOUT_US))
DRM_ERROR("Timed out waiting for forcewake to ack request.\n");

__gen6_gt_wait_for_thread_c0(dev_priv);
Expand Down

0 comments on commit b67a437

Please sign in to comment.