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

Commit 95736720 authored by Chris Wilson's avatar Chris Wilson Committed by Keith Packard
Browse files

drm/i915: Cache GT fifo count for SandyBridge



The read back of the available FIFO entries is vital for system
stability, but extremely costly. However, we only need a guide so as to
avoid eating into the reserved entries and since we are the only
consumer we can cache the read of the count from the last write.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
parent f5a3d0c4
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -348,12 +348,17 @@ void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)

void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
{
	if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES ) {
		int loop = 500;
		u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
	while (fifo < 20 && loop--) {
		while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
			udelay(10);
			fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
		}
		WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES);
		dev_priv->gt_fifo_count = fifo;
	}
	dev_priv->gt_fifo_count--;
}

static int i915_drm_freeze(struct drm_device *dev)
+1 −0
Original line number Diff line number Diff line
@@ -277,6 +277,7 @@ typedef struct drm_i915_private {
	int relative_constants_mode;

	void __iomem *regs;
	u32 gt_fifo_count;

	struct intel_gmbus {
		struct i2c_adapter adapter;
+1 −0
Original line number Diff line number Diff line
@@ -3361,6 +3361,7 @@
#define  FORCEWAKE_ACK				0x130090

#define  GT_FIFO_FREE_ENTRIES			0x120008
#define    GT_FIFO_NUM_RESERVED_ENTRIES		20

#define GEN6_RPNSWREQ				0xA008
#define   GEN6_TURBO_DISABLE			(1<<31)