intel/tools: aubinator: Catch gen11 "enhanced execlist" submission
authorScott D Phillips <scott.d.phillips@intel.com>
Sat, 10 Mar 2018 00:29:41 +0000 (16:29 -0800)
committerScott D Phillips <scott.d.phillips@intel.com>
Wed, 21 Mar 2018 18:07:15 +0000 (11:07 -0700)
Different registers are used for execlist submission in gen11, so
also watch those. This code only watches element zero of the
submit queue, which is all aubdump currently writes.

Tested-by: Rafael Antognolli <rafael.antognolli@intel.com>
Reviewed-by: Rafael Antognolli <rafael.antognolli@intel.com>
src/intel/tools/aubinator.c

index 77bad29051e1415f8ec316a3acfdcb6b36a20e57..8029dc1215579762238892c0b0d40aa5cd0cbf5c 100644 (file)
@@ -248,6 +248,9 @@ handle_memtrace_reg_write(uint32_t *p)
    int engine;
    static int render_elsp_writes = 0;
    static int blitter_elsp_writes = 0;
+   static int render_elsq0 = 0;
+   static int blitter_elsq0 = 0;
+   uint8_t *pphwsp;
 
    if (offset == 0x2230) {
       render_elsp_writes++;
@@ -255,18 +258,29 @@ handle_memtrace_reg_write(uint32_t *p)
    } else if (offset == 0x22230) {
       blitter_elsp_writes++;
       engine = GEN_ENGINE_BLITTER;
+   } else if (offset == 0x2510) {
+      render_elsq0 = value;
+   } else if (offset == 0x22510) {
+      blitter_elsq0 = value;
+   } else if (offset == 0x2550 || offset == 0x22550) {
+      /* nothing */;
    } else {
       return;
    }
 
-   if (render_elsp_writes > 3)
-      render_elsp_writes = 0;
-   else if (blitter_elsp_writes > 3)
-      blitter_elsp_writes = 0;
-   else
+   if (render_elsp_writes > 3 || blitter_elsp_writes > 3) {
+      render_elsp_writes = blitter_elsp_writes = 0;
+      pphwsp = (uint8_t*)gtt + (value & 0xfffff000);
+   } else if (offset == 0x2550) {
+      engine = GEN_ENGINE_RENDER;
+      pphwsp = (uint8_t*)gtt + (render_elsq0 & 0xfffff000);
+   } else if (offset == 0x22550) {
+      engine = GEN_ENGINE_BLITTER;
+      pphwsp = (uint8_t*)gtt + (blitter_elsq0 & 0xfffff000);
+   } else {
       return;
+   }
 
-   uint8_t *pphwsp = (uint8_t*)gtt + (value & 0xfffff000);
    const uint32_t pphwsp_size = 4096;
    uint32_t *context = (uint32_t*)(pphwsp + pphwsp_size);
    uint32_t ring_buffer_head = context[5];