[Intel-gfx] [PATCH 06/12] drm/i915: Introduce mmio workaround list

Mika Kuoppala mika.kuoppala at linux.intel.com
Tue Oct 6 07:26:47 PDT 2015


Introduce another workaround list for mmio write type of
workarounds. No users yet.

Cc: Arun Siluvery <arun.siluvery at linux.intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala at intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 14 +++++++++-----
 drivers/gpu/drm/i915/i915_drv.h     | 14 ++++++++++----
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index af44808..0c4e6bc 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3095,7 +3095,8 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
 }
 
 static void print_wa_regs(struct seq_file *m,
-			  const struct i915_workarounds *w)
+			  const struct i915_workarounds *w,
+			  const char *type)
 {
 	struct drm_info_node *node = (struct drm_info_node *) m->private;
 	struct drm_device *dev = node->minor->dev;
@@ -3111,8 +3112,8 @@ static void print_wa_regs(struct seq_file *m,
 		value = w->reg[i].value;
 		read = I915_READ(addr);
 		ok = (value & mask) == (read & mask);
-		seq_printf(m, "0x%X: 0x%08X, mask: 0x%08X, read: 0x%08x, status: %s\n",
-			   addr, value, mask, read, ok ? "OK" : "FAIL");
+		seq_printf(m, "0x%X: 0x%08X, mask: 0x%08X, read: 0x%08x, type: %s, status: %s\n",
+			   addr, value, mask, read, type, ok ? "OK" : "FAIL");
 	}
 }
 
@@ -3130,8 +3131,11 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
 	intel_runtime_pm_get(dev_priv);
 
 	seq_printf(m, "Workarounds applied: %d\n",
-		   dev_priv->lri_workarounds.count);
-	print_wa_regs(m, &dev_priv->lri_workarounds);
+		   dev_priv->lri_workarounds.count +
+		   dev_priv->mmio_workarounds.count);
+
+	print_wa_regs(m, &dev_priv->lri_workarounds,  " LRI");
+	print_wa_regs(m, &dev_priv->mmio_workarounds, "MMIO");
 
 	intel_runtime_pm_put(dev_priv);
 	mutex_unlock(&dev->struct_mutex);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0ed790c..ae5b6b3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1845,6 +1845,7 @@ struct drm_i915_private {
 	int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
 
 	struct i915_workarounds lri_workarounds;
+	struct i915_workarounds mmio_workarounds;
 
 	/* Reclocking support */
 	bool render_reclock_avail;
@@ -3519,12 +3520,17 @@ static inline void i915_trace_irq_get(struct intel_engine_cs *ring,
 }
 
 /* Workaround register lists */
-#define WA_REG_LRI(addr, mask, val) do { \
-		const int r = intel_wa_add(&dev_priv->lri_workarounds, \
-					   (addr), (mask), (val)); \
-		WARN_ON(r); \
+#define WA_REG(wlist, addr, mask, val) do { \
+	const int r = intel_wa_add((wlist), (addr), (mask), (val)); \
+	WARN_ON(r); \
 	} while (0)
 
+#define WA_REG_LRI(addr, mask, val) \
+	WA_REG(&dev_priv->lri_workarounds, (addr), (mask), (val))
+
+#define WA_REG_MMIO(addr, mask, val) \
+	WA_REG(&dev_priv->mmio_workarounds, (addr), (mask), (val))
+
 #define WA_SET_BIT_MASKED(t, addr, mask) \
 	WA_REG_##t(addr, (mask), _MASKED_BIT_ENABLE(mask))
 
-- 
2.1.4



More information about the Intel-gfx mailing list