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 <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
c1a362722f
commit
9eae950342
|
@ -30,7 +30,7 @@
|
||||||
/*
|
/*
|
||||||
* Within a batch (panfrost_job), there are various types of Mali jobs:
|
* 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
|
* - VERTEX: runs a vertex shader
|
||||||
* - TILER: runs tiling and sets up a fragment shader
|
* - TILER: runs tiling and sets up a fragment shader
|
||||||
* - FRAGMENT: runs fragment shaders and writes out
|
* - 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 = {
|
struct mali_payload_set_value payload = {
|
||||||
.out = polygon_list,
|
.address = polygon_list,
|
||||||
.unknown = 0x3,
|
.value_descriptor = MALI_SET_VALUE_ZERO,
|
||||||
|
.immediate = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
struct panfrost_transfer transfer = panfrost_allocate_transient(batch, sizeof(job) + sizeof(payload));
|
struct panfrost_transfer transfer = panfrost_allocate_transient(batch, sizeof(job) + sizeof(payload));
|
||||||
|
|
|
@ -657,9 +657,16 @@ enum mali_exception_access {
|
||||||
MALI_EXCEPTION_ACCESS_WRITE = 3
|
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 {
|
struct mali_payload_set_value {
|
||||||
u64 out;
|
u64 address;
|
||||||
u64 unknown;
|
u32 value_descriptor;
|
||||||
|
u32 reserved;
|
||||||
|
u64 immediate;
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/* Special attributes have a fixed index */
|
/* Special attributes have a fixed index */
|
||||||
|
|
|
@ -2905,8 +2905,19 @@ pandecode_jc(mali_ptr jc_gpu_va, bool bifrost, unsigned gpu_id)
|
||||||
struct mali_payload_set_value *s = payload;
|
struct mali_payload_set_value *s = payload;
|
||||||
pandecode_log("struct mali_payload_set_value payload_%"PRIx64"_%d = {\n", payload_ptr, job_no);
|
pandecode_log("struct mali_payload_set_value payload_%"PRIx64"_%d = {\n", payload_ptr, job_no);
|
||||||
pandecode_indent++;
|
pandecode_indent++;
|
||||||
MEMORY_PROP(s, out);
|
MEMORY_PROP(s, address);
|
||||||
pandecode_prop("unknown = 0x%" PRIX64, s->unknown);
|
|
||||||
|
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_indent--;
|
||||||
pandecode_log("};\n");
|
pandecode_log("};\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue