Module: Mesa
Branch: master
Commit: 358372b256622569e292449238aa573051b7ab81
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=358372b256622569e292449238aa573051b7ab81

Author: Alyssa Rosenzweig <alyssa.rosenzw...@collabora.com>
Date:   Fri Aug  9 16:04:24 2019 -0700

pan/decode: Decode invalid access type upon fault

We don't have a good way to confirm this, but it parallels the kernel
definitons for MMU faults nicely.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzw...@collabora.com>

---

 src/panfrost/include/panfrost-job.h | 15 +++++++++++++++
 src/panfrost/pandecode/decode.c     | 20 ++++++++++++++++++--
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/panfrost/include/panfrost-job.h 
b/src/panfrost/include/panfrost-job.h
index 51e9e78b8bd..77b9bc9c7af 100644
--- a/src/panfrost/include/panfrost-job.h
+++ b/src/panfrost/include/panfrost-job.h
@@ -652,6 +652,21 @@ struct mali_job_descriptor_header {
         };
 } __attribute__((packed));
 
+/* These concern exception_status */
+
+/* Access type causing a fault, paralleling AS_FAULTSTATUS_* entries in the
+ * kernel */
+
+enum mali_exception_access {
+        /* Atomic in the kernel for MMU, but that doesn't make sense for a job
+         * fault so it's just unused */
+        MALI_EXCEPTION_ACCESS_NONE    = 0,
+
+        MALI_EXCEPTION_ACCESS_EXECUTE = 1,
+        MALI_EXCEPTION_ACCESS_READ    = 2,
+        MALI_EXCEPTION_ACCESS_WRITE   = 3
+};
+
 struct mali_payload_set_value {
         u64 out;
         u64 unknown;
diff --git a/src/panfrost/pandecode/decode.c b/src/panfrost/pandecode/decode.c
index 71eb2e972e2..861000133c1 100644
--- a/src/panfrost/pandecode/decode.c
+++ b/src/panfrost/pandecode/decode.c
@@ -459,6 +459,22 @@ pandecode_mfbd_block_format(enum mali_mfbd_block_format 
fmt)
 }
 #undef DEFINE_CASE
 
+#define DEFINE_CASE(name) case MALI_EXCEPTION_ACCESS_## name: return ""#name
+static char *
+pandecode_exception_access(enum mali_exception_access fmt)
+{
+        switch (fmt) {
+                DEFINE_CASE(NONE);
+                DEFINE_CASE(EXECUTE);
+                DEFINE_CASE(READ);
+                DEFINE_CASE(WRITE);
+
+        default:
+                unreachable("Invalid case");
+        }
+}
+#undef DEFINE_CASE
+
 /* Midgard's tiler descriptor is embedded within the
  * larger FBD */
 
@@ -2333,10 +2349,10 @@ pandecode_jc(mali_ptr jc_gpu_va, bool bifrost)
                         pandecode_prop("job_descriptor_size = %d", 
h->job_descriptor_size);
 
                 if (h->exception_status != 0x1)
-                        pandecode_prop("exception_status = %x (source ID: 0x%x 
access: 0x%x exception: 0x%x)",
+                        pandecode_prop("exception_status = %x (source ID: 0x%x 
access: %s exception: 0x%x)",
                                        h->exception_status,
                                        (h->exception_status >> 16) & 0xFFFF,
-                                       (h->exception_status >> 8) & 0x3,
+                                       
pandecode_exception_access((h->exception_status >> 8) & 0x3),
                                        h->exception_status  & 0xFF);
 
                 if (h->first_incomplete_task)

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to