summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-10-21 19:06:08 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-10-21 19:06:08 +0200
commitd510953ef38de7017c87688b3f4f5a7924097488 (patch)
tree0ebf047fa6ff825918d506b9c19e0e2353106ba5
parent982d14e34b978b318ba0d92dd25d5b791375d0f3 (diff)
tools/intel_error_decode: decode gen4+ fences
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--tools/intel_error_decode.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c
index f9e47eb..6ffaefe 100644
--- a/tools/intel_error_decode.c
+++ b/tools/intel_error_decode.c
@@ -210,6 +210,28 @@ print_pgtbl_err(unsigned int reg, unsigned int devid)
}
static void
+print_snb_fence(unsigned int devid, uint64_t fence)
+{
+ printf(" %svalid, %c-tiled, pitch: %i, start: 0x%08x, size: %u\n",
+ fence & 1 ? "" : "in",
+ fence & (1<<1) ? 'y' : 'x',
+ (int)(((fence>>32)&0xfff)+1)*128,
+ (uint32_t)fence & 0xfffff000,
+ (uint32_t)(((fence>>32)&0xfffff000) - (fence&0xfffff000) + 4096));
+}
+
+static void
+print_i965_fence(unsigned int devid, uint64_t fence)
+{
+ printf(" %svalid, %c-tiled, pitch: %i, start: 0x%08x, size: %u\n",
+ fence & 1 ? "" : "in",
+ fence & (1<<1) ? 'y' : 'x',
+ (int)(((fence>>2)&0x1ff)+1)*128,
+ (uint32_t)fence & 0xfffff000,
+ (uint32_t)(((fence>>32)&0xfffff000) - (fence&0xfffff000) + 4096));
+}
+
+static void
print_i915_fence(unsigned int devid, uint64_t fence)
{
unsigned tile_width;
@@ -240,8 +262,10 @@ print_i830_fence(unsigned int devid, uint64_t fence)
static void
print_fence(unsigned int devid, uint64_t fence)
{
- if (IS_965(devid)) {
- return;
+ if (IS_GEN6(devid) || IS_GEN7(devid)) {
+ return print_snb_fence(devid, fence);
+ } else if (IS_GEN4(devid) || IS_GEN5(devid)) {
+ return print_i965_fence(devid, fence);
} else if (IS_GEN3(devid)) {
return print_i915_fence(devid, fence);
} else {
@@ -350,7 +374,7 @@ read_data_file (FILE *file)
if (matched == 1)
print_instdone (devid, -1, reg);
- matched = sscanf (line, " fence[%i] = %8Lx\n", &reg, &fence);
+ matched = sscanf (line, " fence[%i] = %Lx\n", &reg, &fence);
if (matched == 2)
print_fence (devid, fence);