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 <arun.siluvery@xxxxxxxxxxxxxxx> Signed-off-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> --- 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 Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx