Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b67a4376 authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter
Browse files

drm/i915: Extract forcewake ack timeout



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: default avatarBen Widawsky <ben@bwidawsk.net>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.oc.uk>
[danvet: fixup conflict with vlv forcewake patches.]
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 5fa7ac9c
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -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.
@@ -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);
@@ -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);
@@ -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);