|
@@ -150,7 +150,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
|
|
obj->base.size / 1024,
|
|
obj->base.size / 1024,
|
|
obj->base.read_domains,
|
|
obj->base.read_domains,
|
|
obj->base.write_domain);
|
|
obj->base.write_domain);
|
|
- for_each_engine_id(engine, dev_priv, id)
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id)
|
|
seq_printf(m, "%x ",
|
|
seq_printf(m, "%x ",
|
|
i915_gem_active_get_seqno(&obj->last_read[id],
|
|
i915_gem_active_get_seqno(&obj->last_read[id],
|
|
&obj->base.dev->struct_mutex));
|
|
&obj->base.dev->struct_mutex));
|
|
@@ -323,11 +323,12 @@ static void print_batch_pool_stats(struct seq_file *m,
|
|
struct drm_i915_gem_object *obj;
|
|
struct drm_i915_gem_object *obj;
|
|
struct file_stats stats;
|
|
struct file_stats stats;
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int j;
|
|
int j;
|
|
|
|
|
|
memset(&stats, 0, sizeof(stats));
|
|
memset(&stats, 0, sizeof(stats));
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
|
|
for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
|
|
list_for_each_entry(obj,
|
|
list_for_each_entry(obj,
|
|
&engine->batch_pool.cache_list[j],
|
|
&engine->batch_pool.cache_list[j],
|
|
@@ -596,6 +597,7 @@ static int i915_gem_batch_pool_info(struct seq_file *m, void *data)
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct drm_i915_gem_object *obj;
|
|
struct drm_i915_gem_object *obj;
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int total = 0;
|
|
int total = 0;
|
|
int ret, j;
|
|
int ret, j;
|
|
|
|
|
|
@@ -603,7 +605,7 @@ static int i915_gem_batch_pool_info(struct seq_file *m, void *data)
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
|
|
for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
|
|
int count;
|
|
int count;
|
|
|
|
|
|
@@ -655,8 +657,9 @@ static int i915_gem_request_info(struct seq_file *m, void *data)
|
|
{
|
|
{
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
- struct intel_engine_cs *engine;
|
|
|
|
struct drm_i915_gem_request *req;
|
|
struct drm_i915_gem_request *req;
|
|
|
|
+ struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int ret, any;
|
|
int ret, any;
|
|
|
|
|
|
ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
@@ -664,7 +667,7 @@ static int i915_gem_request_info(struct seq_file *m, void *data)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
any = 0;
|
|
any = 0;
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
int count;
|
|
int count;
|
|
|
|
|
|
count = 0;
|
|
count = 0;
|
|
@@ -710,8 +713,9 @@ static int i915_gem_seqno_info(struct seq_file *m, void *data)
|
|
{
|
|
{
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
|
|
|
|
- for_each_engine(engine, dev_priv)
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id)
|
|
i915_ring_seqno_info(m, engine);
|
|
i915_ring_seqno_info(m, engine);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -722,6 +726,7 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
|
|
{
|
|
{
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int i, pipe;
|
|
int i, pipe;
|
|
|
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
intel_runtime_pm_get(dev_priv);
|
|
@@ -890,7 +895,7 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
|
|
seq_printf(m, "Graphics Interrupt mask: %08x\n",
|
|
seq_printf(m, "Graphics Interrupt mask: %08x\n",
|
|
I915_READ(GTIMR));
|
|
I915_READ(GTIMR));
|
|
}
|
|
}
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
if (INTEL_GEN(dev_priv) >= 6) {
|
|
if (INTEL_GEN(dev_priv) >= 6) {
|
|
seq_printf(m,
|
|
seq_printf(m,
|
|
"Graphics Interrupt mask (%s): %08x\n",
|
|
"Graphics Interrupt mask (%s): %08x\n",
|
|
@@ -938,7 +943,7 @@ static int i915_hws_info(struct seq_file *m, void *data)
|
|
const u32 *hws;
|
|
const u32 *hws;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
- engine = &dev_priv->engine[(uintptr_t)node->info_ent->data];
|
|
|
|
|
|
+ engine = dev_priv->engine[(uintptr_t)node->info_ent->data];
|
|
hws = engine->status_page.page_addr;
|
|
hws = engine->status_page.page_addr;
|
|
if (hws == NULL)
|
|
if (hws == NULL)
|
|
return 0;
|
|
return 0;
|
|
@@ -1329,12 +1334,12 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
|
|
|
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
|
|
|
- for_each_engine_id(engine, dev_priv, id) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
acthd[id] = intel_engine_get_active_head(engine);
|
|
acthd[id] = intel_engine_get_active_head(engine);
|
|
seqno[id] = intel_engine_get_seqno(engine);
|
|
seqno[id] = intel_engine_get_seqno(engine);
|
|
}
|
|
}
|
|
|
|
|
|
- intel_engine_get_instdone(&dev_priv->engine[RCS], &instdone);
|
|
|
|
|
|
+ intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
|
|
|
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
|
|
|
@@ -1345,7 +1350,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
|
|
} else
|
|
} else
|
|
seq_printf(m, "Hangcheck inactive\n");
|
|
seq_printf(m, "Hangcheck inactive\n");
|
|
|
|
|
|
- for_each_engine_id(engine, dev_priv, id) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
struct intel_breadcrumbs *b = &engine->breadcrumbs;
|
|
struct intel_breadcrumbs *b = &engine->breadcrumbs;
|
|
struct rb_node *rb;
|
|
struct rb_node *rb;
|
|
|
|
|
|
@@ -1944,6 +1949,7 @@ static int i915_context_status(struct seq_file *m, void *unused)
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
struct i915_gem_context *ctx;
|
|
struct i915_gem_context *ctx;
|
|
|
|
+ enum intel_engine_id id;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
@@ -1970,7 +1976,7 @@ static int i915_context_status(struct seq_file *m, void *unused)
|
|
seq_putc(m, ctx->remap_slice ? 'R' : 'r');
|
|
seq_putc(m, ctx->remap_slice ? 'R' : 'r');
|
|
seq_putc(m, '\n');
|
|
seq_putc(m, '\n');
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
struct intel_context *ce = &ctx->engine[engine->id];
|
|
struct intel_context *ce = &ctx->engine[engine->id];
|
|
|
|
|
|
seq_printf(m, "%s: ", engine->name);
|
|
seq_printf(m, "%s: ", engine->name);
|
|
@@ -2037,6 +2043,7 @@ static int i915_dump_lrc(struct seq_file *m, void *unused)
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct drm_device *dev = &dev_priv->drm;
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
struct i915_gem_context *ctx;
|
|
struct i915_gem_context *ctx;
|
|
|
|
+ enum intel_engine_id id;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
if (!i915.enable_execlists) {
|
|
if (!i915.enable_execlists) {
|
|
@@ -2049,7 +2056,7 @@ static int i915_dump_lrc(struct seq_file *m, void *unused)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
list_for_each_entry(ctx, &dev_priv->context_list, link)
|
|
list_for_each_entry(ctx, &dev_priv->context_list, link)
|
|
- for_each_engine(engine, dev_priv)
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id)
|
|
i915_dump_lrc_obj(m, ctx, engine);
|
|
i915_dump_lrc_obj(m, ctx, engine);
|
|
|
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
mutex_unlock(&dev->struct_mutex);
|
|
@@ -2158,14 +2165,15 @@ static int per_file_ctx(int id, void *ptr, void *data)
|
|
static void gen8_ppgtt_info(struct seq_file *m,
|
|
static void gen8_ppgtt_info(struct seq_file *m,
|
|
struct drm_i915_private *dev_priv)
|
|
struct drm_i915_private *dev_priv)
|
|
{
|
|
{
|
|
- struct intel_engine_cs *engine;
|
|
|
|
struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
|
|
struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
|
|
|
|
+ struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
if (!ppgtt)
|
|
if (!ppgtt)
|
|
return;
|
|
return;
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
seq_printf(m, "%s\n", engine->name);
|
|
seq_printf(m, "%s\n", engine->name);
|
|
for (i = 0; i < 4; i++) {
|
|
for (i = 0; i < 4; i++) {
|
|
u64 pdp = I915_READ(GEN8_RING_PDP_UDW(engine, i));
|
|
u64 pdp = I915_READ(GEN8_RING_PDP_UDW(engine, i));
|
|
@@ -2180,11 +2188,12 @@ static void gen6_ppgtt_info(struct seq_file *m,
|
|
struct drm_i915_private *dev_priv)
|
|
struct drm_i915_private *dev_priv)
|
|
{
|
|
{
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
|
|
|
|
if (IS_GEN6(dev_priv))
|
|
if (IS_GEN6(dev_priv))
|
|
seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
|
|
seq_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
seq_printf(m, "%s\n", engine->name);
|
|
seq_printf(m, "%s\n", engine->name);
|
|
if (IS_GEN7(dev_priv))
|
|
if (IS_GEN7(dev_priv))
|
|
seq_printf(m, "GFX_MODE: 0x%08x\n",
|
|
seq_printf(m, "GFX_MODE: 0x%08x\n",
|
|
@@ -2253,9 +2262,10 @@ out_unlock:
|
|
static int count_irq_waiters(struct drm_i915_private *i915)
|
|
static int count_irq_waiters(struct drm_i915_private *i915)
|
|
{
|
|
{
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
int count = 0;
|
|
int count = 0;
|
|
|
|
|
|
- for_each_engine(engine, i915)
|
|
|
|
|
|
+ for_each_engine(engine, i915, id)
|
|
count += intel_engine_has_waiter(engine);
|
|
count += intel_engine_has_waiter(engine);
|
|
|
|
|
|
return count;
|
|
return count;
|
|
@@ -2418,7 +2428,7 @@ static void i915_guc_client_info(struct seq_file *m,
|
|
seq_printf(m, "\tFailed doorbell: %u\n", client->b_fail);
|
|
seq_printf(m, "\tFailed doorbell: %u\n", client->b_fail);
|
|
seq_printf(m, "\tLast submission result: %d\n", client->retcode);
|
|
seq_printf(m, "\tLast submission result: %d\n", client->retcode);
|
|
|
|
|
|
- for_each_engine_id(engine, dev_priv, id) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
u64 submissions = client->submissions[id];
|
|
u64 submissions = client->submissions[id];
|
|
tot += submissions;
|
|
tot += submissions;
|
|
seq_printf(m, "\tSubmissions: %llu %s\n",
|
|
seq_printf(m, "\tSubmissions: %llu %s\n",
|
|
@@ -2461,7 +2471,7 @@ static int i915_guc_info(struct seq_file *m, void *data)
|
|
seq_printf(m, "GuC last action error code: %d\n", guc.action_err);
|
|
seq_printf(m, "GuC last action error code: %d\n", guc.action_err);
|
|
|
|
|
|
seq_printf(m, "\nGuC submissions:\n");
|
|
seq_printf(m, "\nGuC submissions:\n");
|
|
- for_each_engine_id(engine, dev_priv, id) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
u64 submissions = guc.submissions[id];
|
|
u64 submissions = guc.submissions[id];
|
|
total += submissions;
|
|
total += submissions;
|
|
seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n",
|
|
seq_printf(m, "\t%-24s: %10llu, last seqno 0x%08x\n",
|
|
@@ -3082,8 +3092,9 @@ static int i915_engine_info(struct seq_file *m, void *unused)
|
|
{
|
|
{
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
|
|
+ enum intel_engine_id id;
|
|
|
|
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
struct intel_breadcrumbs *b = &engine->breadcrumbs;
|
|
struct intel_breadcrumbs *b = &engine->breadcrumbs;
|
|
struct drm_i915_gem_request *rq;
|
|
struct drm_i915_gem_request *rq;
|
|
struct rb_node *rb;
|
|
struct rb_node *rb;
|
|
@@ -3231,7 +3242,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
|
|
page = i915_gem_object_get_page(dev_priv->semaphore->obj, 0);
|
|
page = i915_gem_object_get_page(dev_priv->semaphore->obj, 0);
|
|
|
|
|
|
seqno = (uint64_t *)kmap_atomic(page);
|
|
seqno = (uint64_t *)kmap_atomic(page);
|
|
- for_each_engine_id(engine, dev_priv, id) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
uint64_t offset;
|
|
uint64_t offset;
|
|
|
|
|
|
seq_printf(m, "%s\n", engine->name);
|
|
seq_printf(m, "%s\n", engine->name);
|
|
@@ -3256,7 +3267,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
|
|
kunmap_atomic(seqno);
|
|
kunmap_atomic(seqno);
|
|
} else {
|
|
} else {
|
|
seq_puts(m, " Last signal:");
|
|
seq_puts(m, " Last signal:");
|
|
- for_each_engine(engine, dev_priv)
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id)
|
|
for (j = 0; j < num_rings; j++)
|
|
for (j = 0; j < num_rings; j++)
|
|
seq_printf(m, "0x%08x\n",
|
|
seq_printf(m, "0x%08x\n",
|
|
I915_READ(engine->semaphore.mbox.signal[j]));
|
|
I915_READ(engine->semaphore.mbox.signal[j]));
|
|
@@ -3264,7 +3275,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
|
|
}
|
|
}
|
|
|
|
|
|
seq_puts(m, "\nSync seqno:\n");
|
|
seq_puts(m, "\nSync seqno:\n");
|
|
- for_each_engine(engine, dev_priv) {
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id) {
|
|
for (j = 0; j < num_rings; j++)
|
|
for (j = 0; j < num_rings; j++)
|
|
seq_printf(m, " 0x%08x ",
|
|
seq_printf(m, " 0x%08x ",
|
|
engine->semaphore.sync_seqno[j]);
|
|
engine->semaphore.sync_seqno[j]);
|
|
@@ -3320,7 +3331,7 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
|
|
intel_runtime_pm_get(dev_priv);
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
|
|
|
seq_printf(m, "Workarounds applied: %d\n", workarounds->count);
|
|
seq_printf(m, "Workarounds applied: %d\n", workarounds->count);
|
|
- for_each_engine_id(engine, dev_priv, id)
|
|
|
|
|
|
+ for_each_engine(engine, dev_priv, id)
|
|
seq_printf(m, "HW whitelist count for %s: %d\n",
|
|
seq_printf(m, "HW whitelist count for %s: %d\n",
|
|
engine->name, workarounds->hw_whitelist_count[id]);
|
|
engine->name, workarounds->hw_whitelist_count[id]);
|
|
for (i = 0; i < workarounds->count; ++i) {
|
|
for (i = 0; i < workarounds->count; ++i) {
|