|
@@ -385,16 +385,27 @@ void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
|
|
|
spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
|
|
|
}
|
|
|
|
|
|
+static void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
|
|
|
+{
|
|
|
+ u32 gtfifodbg;
|
|
|
+ gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
|
|
|
+ if (WARN(gtfifodbg & GT_FIFO_CPU_ERROR_MASK,
|
|
|
+ "MMIO read or write has been dropped %x\n", gtfifodbg))
|
|
|
+ I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
|
|
|
+}
|
|
|
+
|
|
|
void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
I915_WRITE_NOTRACE(FORCEWAKE, 0);
|
|
|
- POSTING_READ(FORCEWAKE);
|
|
|
+ /* The below doubles as a POSTING_READ */
|
|
|
+ gen6_gt_check_fifodbg(dev_priv);
|
|
|
}
|
|
|
|
|
|
void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
I915_WRITE_NOTRACE(FORCEWAKE_MT, (1<<16) | 0);
|
|
|
- POSTING_READ(FORCEWAKE_MT);
|
|
|
+ /* The below doubles as a POSTING_READ */
|
|
|
+ gen6_gt_check_fifodbg(dev_priv);
|
|
|
}
|
|
|
|
|
|
/*
|