summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>2019-10-03 12:21:47 +0300
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>2019-10-04 22:31:15 +0000
commit907c2397f0b898ecb0e1e7be2c61044458d690e6 (patch)
tree278da3d414904466e153814266a746b5476707e7
parent77ebb030ed56f6e9a303c60311002523ae1658d0 (diff)
intel/error2aub: add support for platforms without PPGTT
Not much to do to enable this, just make sure to always write to the GGTT :) Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--src/intel/tools/error2aub.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/intel/tools/error2aub.c b/src/intel/tools/error2aub.c
index 32e41b80365..62c3fdd0f7e 100644
--- a/src/intel/tools/error2aub.c
+++ b/src/intel/tools/error2aub.c
@@ -292,6 +292,7 @@ main(int argc, char *argv[])
int active_engine_instance = -1;
enum address_space active_gtt = PPGTT;
+ enum address_space default_gtt = PPGTT;
struct {
struct {
@@ -321,8 +322,7 @@ main(int argc, char *argv[])
NULL, pci_id, "error_state");
if (verbose)
aub.verbose_log_file = stdout;
- fail_if(!aub_use_execlists(&aub),
- "%s currently only works on gen8+\n", argv[0]);
+ default_gtt = active_gtt = aub_use_execlists(&aub) ? PPGTT : GGTT;
continue;
}
@@ -350,7 +350,7 @@ main(int argc, char *argv[])
char *ring = line + strlen(active_start);
engine_from_name(ring, &active_engine_class, &active_engine_instance);
- active_gtt = PPGTT;
+ active_gtt = default_gtt;
char *count = strchr(ring, '[');
fail_if(!count || sscanf(count, "[%d]:", &num_ring_bos) < 1,
@@ -369,7 +369,6 @@ main(int argc, char *argv[])
if (num_ring_bos > 0) {
unsigned hi, lo, size;
if (sscanf(line, " %x_%x %d", &hi, &lo, &size) == 3) {
- assert(aub_use_execlists(&aub));
struct bo *bo_entry = find_or_create(&bo_list, ((uint64_t)hi) << 32 | lo,
active_gtt,
active_engine_class,
@@ -408,8 +407,8 @@ main(int argc, char *argv[])
enum bo_type type;
enum address_space gtt;
} bo_types[] = {
- { "gtt_offset", BO_TYPE_BATCH, PPGTT },
- { "user", BO_TYPE_USER, PPGTT },
+ { "gtt_offset", BO_TYPE_BATCH, default_gtt },
+ { "user", BO_TYPE_USER, default_gtt },
{ "HW context", BO_TYPE_CONTEXT, GGTT },
{ "ringbuffer", BO_TYPE_RINGBUFFER, GGTT },
{ "HW Status", BO_TYPE_STATUS, GGTT },
@@ -461,18 +460,25 @@ main(int argc, char *argv[])
list_for_each_entry(struct bo, bo_entry, &bo_list, link) {
switch (bo_entry->type) {
case BO_TYPE_BATCH:
- aub_map_ppgtt(&aub, bo_entry->addr, bo_entry->size);
- aub_write_trace_block(&aub, AUB_TRACE_TYPE_BATCH,
- bo_entry->data, bo_entry->size, bo_entry->addr);
+ if (bo_entry->gtt == PPGTT) {
+ aub_map_ppgtt(&aub, bo_entry->addr, bo_entry->size);
+ aub_write_trace_block(&aub, AUB_TRACE_TYPE_BATCH,
+ bo_entry->data, bo_entry->size, bo_entry->addr);
+ } else
+ aub_write_ggtt(&aub, bo_entry->addr, bo_entry->size, bo_entry->data);
break;
case BO_TYPE_USER:
- aub_map_ppgtt(&aub, bo_entry->addr, bo_entry->size);
- aub_write_trace_block(&aub, AUB_TRACE_TYPE_NOTYPE,
- bo_entry->data, bo_entry->size, bo_entry->addr);
+ if (bo_entry->gtt == PPGTT) {
+ aub_map_ppgtt(&aub, bo_entry->addr, bo_entry->size);
+ aub_write_trace_block(&aub, AUB_TRACE_TYPE_NOTYPE,
+ bo_entry->data, bo_entry->size, bo_entry->addr);
+ } else
+ aub_write_ggtt(&aub, bo_entry->addr, bo_entry->size, bo_entry->data);
break;
case BO_TYPE_CONTEXT:
if (bo_entry->engine_class == batch_bo->engine_class &&
- bo_entry->engine_instance == batch_bo->engine_instance) {
+ bo_entry->engine_instance == batch_bo->engine_instance &&
+ aub_use_execlists(&aub)) {
hwsp_bo = bo_entry;
uint32_t *context = (uint32_t *) (bo_entry->data + 4096 /* GuC */ + 4096 /* HWSP */);
@@ -531,8 +537,11 @@ main(int argc, char *argv[])
}
}
- fail_if(!hwsp_bo, "Failed to find Context buffer.\n");
- aub_write_context_execlists(&aub, hwsp_bo->addr + 4096 /* skip GuC page */, hwsp_bo->engine_class);
+ if (aub_use_execlists(&aub)) {
+ fail_if(!hwsp_bo, "Failed to find Context buffer.\n");
+ aub_write_context_execlists(&aub, hwsp_bo->addr + 4096 /* skip GuC page */, hwsp_bo->engine_class);
+ } else
+ aub_write_exec(&aub, batch_bo->addr, 0, I915_ENGINE_CLASS_RENDER);
/* Cleanup */
list_for_each_entry_safe(struct bo, bo_entry, &bo_list, link) {