[Intel-gfx] [RFC PATCH 09/20] drm/i915: Do not store the total counts of WAs

Oscar Mateo oscar.mateo at intel.com
Fri Nov 3 18:09:37 UTC 2017


Simply recalculate as needed so that we can remove the
workarounds structure in dev_priv.

Signed-off-by: Oscar Mateo <oscar.mateo at intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c      | 34 ++++++++++++++++++++++++--------
 drivers/gpu/drm/i915/i915_drv.h          |  9 ---------
 drivers/gpu/drm/i915/intel_workarounds.c |  4 ----
 3 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 8a6fef4..8fa8c68 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3392,11 +3392,28 @@ static void check_wa_registers(struct seq_file *m,
 	}
 }
 
+static uint count_wa_registers(const struct i915_wa_reg_table *wa_table,
+			       uint table_count)
+{
+	uint total = 0;
+	int i, j;
+
+	for (i = 0; i < table_count; i++) {
+		const struct i915_wa_reg *wa = wa_table[i].table;
+
+		for (j = 0; j < wa_table[i].count; j++) {
+			if (wa[j].applied)
+				total++;
+		}
+	}
+
+	return total;
+}
+
 static int i915_wa_registers(struct seq_file *m, void *unused)
 {
 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
 	struct drm_device *dev = &dev_priv->drm;
-	struct i915_workarounds *workarounds = &dev_priv->workarounds;
 	const struct i915_wa_reg_table *wa_table;
 	uint table_count;
 	int i, j, ret;
@@ -3407,9 +3424,9 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
 
 	intel_runtime_pm_get(dev_priv);
 
-	seq_printf(m, "Context workarounds applied: %d\n",
-		   workarounds->ctx_count);
 	intel_ctx_workarounds_get(dev_priv, &wa_table, &table_count);
+	seq_printf(m, "Context workarounds applied: %d\n",
+		   count_wa_registers(wa_table, table_count));
 	for (i = 0; i < table_count; i++) {
 		const struct i915_wa_reg *wa = wa_table[i].table;
 
@@ -3427,20 +3444,21 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
 
 	intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
 
-	seq_printf(m, "GT workarounds applied: %d\n", workarounds->gt_count);
 	intel_gt_workarounds_get(dev_priv, &wa_table, &table_count);
+	seq_printf(m, "GT workarounds applied: %d\n",
+		   count_wa_registers(wa_table, table_count));
 	check_wa_registers(m, wa_table, table_count);
 	seq_putc(m, '\n');
 
-	seq_printf(m, "Display workarounds applied: %d\n",
-		   workarounds->disp_count);
 	intel_display_workarounds_get(dev_priv, &wa_table, &table_count);
+	seq_printf(m, "Display workarounds applied: %d\n",
+		   count_wa_registers(wa_table, table_count));
 	check_wa_registers(m, wa_table, table_count);
 	seq_putc(m, '\n');
 
-	seq_printf(m, "Whitelist workarounds applied: %d\n",
-		   workarounds->hw_whitelist_count[RCS]);
 	intel_whitelist_workarounds_get(dev_priv, &wa_table, &table_count);
+	seq_printf(m, "Whitelist workarounds applied: %d\n",
+		   count_wa_registers(wa_table, table_count));
 	check_wa_registers(m, wa_table, table_count);
 	seq_putc(m, '\n');
 
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f781d1c..7efb59b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2007,13 +2007,6 @@ struct i915_wa_reg_table {
 	int count;
 };
 
-struct i915_workarounds {
-	u32 ctx_count;
-	u32 gt_count;
-	u32 disp_count;
-	u32 hw_whitelist_count[I915_NUM_ENGINES];
-};
-
 struct i915_virtual_gpu {
 	bool active;
 	u32 caps;
@@ -2452,8 +2445,6 @@ struct drm_i915_private {
 
 	int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
 
-	struct i915_workarounds workarounds;
-
 	struct i915_frontbuffer_tracking fb_tracking;
 
 	struct intel_atomic_helper {
diff --git a/drivers/gpu/drm/i915/intel_workarounds.c b/drivers/gpu/drm/i915/intel_workarounds.c
index 5a532a0..74e59bb 100644
--- a/drivers/gpu/drm/i915/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/intel_workarounds.c
@@ -551,7 +551,6 @@ static uint ctx_workarounds_init(struct drm_i915_private *dev_priv,
 		}
 	}
 
-	dev_priv->workarounds.ctx_count = total_count;
 	DRM_DEBUG_DRIVER("Number of context specific w/a: %u\n", total_count);
 
 	return total_count;
@@ -868,7 +867,6 @@ void intel_gt_workarounds_apply(struct drm_i915_private *dev_priv)
 	intel_gt_workarounds_get(dev_priv, &wa_table, &table_count);
 	total_count = mmio_workarounds_apply(dev_priv, wa_table, table_count);
 
-	dev_priv->workarounds.gt_count = total_count;
 	DRM_DEBUG_DRIVER("Number of GT specific w/a: %u\n", total_count);
 }
 
@@ -988,7 +986,6 @@ void intel_display_workarounds_apply(struct drm_i915_private *dev_priv)
 	intel_display_workarounds_get(dev_priv, &wa_table, &table_count);
 	total_count = mmio_workarounds_apply(dev_priv, wa_table, table_count);
 
-	dev_priv->workarounds.disp_count = total_count;
 	DRM_DEBUG_DRIVER("Number of Display specific w/a: %u\n", total_count);
 }
 
@@ -1133,7 +1130,6 @@ int intel_whitelist_workarounds_apply(struct intel_engine_cs *engine)
 		}
 	}
 
-	dev_priv->workarounds.hw_whitelist_count[engine->id] = total_count;
 	DRM_DEBUG_DRIVER("%s: Number of whitelist w/a: %u\n", engine->name,
 			 total_count);
 
-- 
1.9.1



More information about the Intel-gfx mailing list