aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-12-04 08:59:29 -0500
committerAlyssa Rosenzweig <[email protected]>2019-12-06 14:37:17 +0000
commit9eae950342fe96c717c740f0827a572cd41d85fc (patch)
tree9e83aaab25c27d87774e77056d8cd8a75c16e6f6 /src
parentc1a362722f47c35da68754181797cd8f2487b1ea (diff)
panfrost: Update SET_VALUE with information from igt
It's not a tiler specific initialization; it's a generic GPU-side write primitive that may be used for tiler reset on midgard. Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_scoreboard.c7
-rw-r--r--src/panfrost/include/panfrost-job.h11
-rw-r--r--src/panfrost/pandecode/decode.c15
3 files changed, 26 insertions, 7 deletions
diff --git a/src/gallium/drivers/panfrost/pan_scoreboard.c b/src/gallium/drivers/panfrost/pan_scoreboard.c
index 02dd7f0b669..f09e1e6b04a 100644
--- a/src/gallium/drivers/panfrost/pan_scoreboard.c
+++ b/src/gallium/drivers/panfrost/pan_scoreboard.c
@@ -30,7 +30,7 @@
/*
* Within a batch (panfrost_job), there are various types of Mali jobs:
*
- * - SET_VALUE: initializes tiler
+ * - SET_VALUE: generic write primitive, used to zero tiler field
* - VERTEX: runs a vertex shader
* - TILER: runs tiling and sets up a fragment shader
* - FRAGMENT: runs fragment shaders and writes out
@@ -278,8 +278,9 @@ panfrost_set_value_job(struct panfrost_batch *batch, mali_ptr polygon_list)
};
struct mali_payload_set_value payload = {
- .out = polygon_list,
- .unknown = 0x3,
+ .address = polygon_list,
+ .value_descriptor = MALI_SET_VALUE_ZERO,
+ .immediate = 0
};
struct panfrost_transfer transfer = panfrost_allocate_transient(batch, sizeof(job) + sizeof(payload));
diff --git a/src/panfrost/include/panfrost-job.h b/src/panfrost/include/panfrost-job.h
index 796be2372ac..bb033e3566a 100644
--- a/src/panfrost/include/panfrost-job.h
+++ b/src/panfrost/include/panfrost-job.h
@@ -657,9 +657,16 @@ enum mali_exception_access {
MALI_EXCEPTION_ACCESS_WRITE = 3
};
+/* Details about set_value from panfrost igt tests which use it as a generic
+ * dword write primitive */
+
+#define MALI_SET_VALUE_ZERO 3
+
struct mali_payload_set_value {
- u64 out;
- u64 unknown;
+ u64 address;
+ u32 value_descriptor;
+ u32 reserved;
+ u64 immediate;
} __attribute__((packed));
/* Special attributes have a fixed index */
diff --git a/src/panfrost/pandecode/decode.c b/src/panfrost/pandecode/decode.c
index 89992a76a79..79b3dd9088e 100644
--- a/src/panfrost/pandecode/decode.c
+++ b/src/panfrost/pandecode/decode.c
@@ -2905,8 +2905,19 @@ pandecode_jc(mali_ptr jc_gpu_va, bool bifrost, unsigned gpu_id)
struct mali_payload_set_value *s = payload;
pandecode_log("struct mali_payload_set_value payload_%"PRIx64"_%d = {\n", payload_ptr, job_no);
pandecode_indent++;
- MEMORY_PROP(s, out);
- pandecode_prop("unknown = 0x%" PRIX64, s->unknown);
+ MEMORY_PROP(s, address);
+
+ if (s->value_descriptor != MALI_SET_VALUE_ZERO) {
+ pandecode_msg("XXX: unknown value descriptor\n");
+ pandecode_prop("value_descriptor = 0x%" PRIX32, s->value_descriptor);
+ }
+
+ if (s->reserved) {
+ pandecode_msg("XXX: set value tripped\n");
+ pandecode_prop("reserved = 0x%" PRIX32, s->reserved);
+ }
+
+ pandecode_prop("immediate = 0x%" PRIX64, s->immediate);
pandecode_indent--;
pandecode_log("};\n");