In preparation to have separate workaround lists
for both LRI and MMIO written workarounds, parametrize the
register addition and printing of wa lists.

Cc: Arun Siluvery <[email protected]>
Signed-off-by: Mika Kuoppala <[email protected]>
---
 drivers/gpu/drm/i915/i915_debugfs.c     | 39 +++++++++++++++++++++------------
 drivers/gpu/drm/i915/i915_drv.h         |  2 +-
 drivers/gpu/drm/i915/intel_lrc.c        |  2 +-
 drivers/gpu/drm/i915/intel_ringbuffer.c | 19 ++++++++--------
 4 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index 3f2a7a7..af44808 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3094,33 +3094,44 @@ static int i915_shared_dplls_info(struct seq_file *m, 
void *unused)
        return 0;
 }
 
-static int i915_wa_registers(struct seq_file *m, void *unused)
+static void print_wa_regs(struct seq_file *m,
+                         const struct i915_workarounds *w)
 {
-       int i;
-       int ret;
        struct drm_info_node *node = (struct drm_info_node *) m->private;
        struct drm_device *dev = node->minor->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
+       int i;
 
-       ret = mutex_lock_interruptible(&dev->struct_mutex);
-       if (ret)
-               return ret;
-
-       intel_runtime_pm_get(dev_priv);
-
-       seq_printf(m, "Workarounds applied: %d\n", dev_priv->workarounds.count);
-       for (i = 0; i < dev_priv->workarounds.count; ++i) {
+       for (i = 0; i < w->count; ++i) {
                u32 addr, mask, value, read;
                bool ok;
 
-               addr = dev_priv->workarounds.reg[i].addr;
-               mask = dev_priv->workarounds.reg[i].mask;
-               value = dev_priv->workarounds.reg[i].value;
+               addr = w->reg[i].addr;
+               mask = w->reg[i].mask;
+               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");
        }
+}
+
+static int i915_wa_registers(struct seq_file *m, void *unused)
+{
+       int ret;
+       struct drm_info_node *node = (struct drm_info_node *) m->private;
+       struct drm_device *dev = node->minor->dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+
+       ret = mutex_lock_interruptible(&dev->struct_mutex);
+       if (ret)
+               return ret;
+
+       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);
 
        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 51eea29..aa38d1e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1844,7 +1844,7 @@ struct drm_i915_private {
        struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
        int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
 
-       struct i915_workarounds workarounds;
+       struct i915_workarounds lri_workarounds;
 
        /* Reclocking support */
        bool render_reclock_avail;
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 825fa7a..b9c7d23 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1095,7 +1095,7 @@ static int intel_logical_ring_workarounds_emit(struct 
drm_i915_gem_request *req)
        struct intel_ringbuffer *ringbuf = req->ringbuf;
        struct drm_device *dev = ring->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct i915_workarounds *w = &dev_priv->workarounds;
+       struct i915_workarounds *w = &dev_priv->lri_workarounds;
 
        if (WARN_ON_ONCE(w->count == 0))
                return 0;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
b/drivers/gpu/drm/i915/intel_ringbuffer.c
index c82c74c..71b4fac 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -715,7 +715,7 @@ static int intel_ring_workarounds_emit(struct 
drm_i915_gem_request *req)
        struct intel_engine_cs *ring = req->ring;
        struct drm_device *dev = ring->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct i915_workarounds *w = &dev_priv->workarounds;
+       struct i915_workarounds *w = &dev_priv->lri_workarounds;
 
        if (WARN_ON_ONCE(w->count == 0))
                return 0;
@@ -763,25 +763,26 @@ static int intel_rcs_ctx_init(struct drm_i915_gem_request 
*req)
        return ret;
 }
 
-static int wa_add(struct drm_i915_private *dev_priv,
+static int wa_add(struct i915_workarounds *w,
                  const u32 addr, const u32 mask, const u32 val)
 {
-       const u32 idx = dev_priv->workarounds.count;
+       const u32 idx = w->count;
 
        if (WARN_ON(idx >= I915_MAX_WA_REGS))
                return -ENOSPC;
 
-       dev_priv->workarounds.reg[idx].addr = addr;
-       dev_priv->workarounds.reg[idx].value = val;
-       dev_priv->workarounds.reg[idx].mask = mask;
+       w->reg[idx].addr = addr;
+       w->reg[idx].value = val;
+       w->reg[idx].mask = mask;
 
-       dev_priv->workarounds.count++;
+       w->count++;
 
        return 0;
 }
 
 #define WA_REG(addr, mask, val) do { \
-               const int r = wa_add(dev_priv, (addr), (mask), (val)); \
+               const int r = wa_add(&dev_priv->lri_workarounds, \
+                                    (addr), (mask), (val)); \
                if (r) \
                        return r; \
        } while (0)
@@ -1093,7 +1094,7 @@ int init_workarounds_ring(struct intel_engine_cs *ring)
 
        WARN_ON(ring->id != RCS);
 
-       dev_priv->workarounds.count = 0;
+       dev_priv->lri_workarounds.count = 0;
 
        if (IS_BROADWELL(dev))
                return bdw_init_workarounds(ring);
-- 
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to