aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/a4xx/fd4_query.c
diff options
context:
space:
mode:
authorConnor Abbott <[email protected]>2019-12-16 17:17:38 +0100
committerConnor Abbott <[email protected]>2019-12-18 23:08:55 +0100
commitcfa1fb895ac5a752772f4d0748c1c2bce0c2e653 (patch)
treeeeb9ea0a9c07521abebd6fe875f9f2416f1562fb /src/gallium/drivers/freedreno/a4xx/fd4_query.c
parenta9a3108be774aea620fa4fc726c33100d9a49add (diff)
a6xx: Add more CP packets
And add fields uncovered by looking at the firmware. I think this covers all the memory, register, and scratch manipulation opcodes that exist on A6xx, plus one additional nice find for Vulkan and describing a previously unknown opcode and documenting CP_WAIT_REG_MEM. Note that the bits for the CP_REG_TO_MEM count, as well as the formula for computing the actual count for both CP_REG_TO_MEM and CP_MEM_TO_REG, are changed because the A630 SQE firmware actually does something different. I haven't investigated older microcodes to see whether this extends back to A5xx and A4xx, but the only non-A6xx uses of this field result in the same bit-pattern when using the A6xx bit range and formula, so it should be safe to change the definition universally. Reviewed-by: Kristian H. Kristensen <[email protected]> Reviewed-by: Rob Clark <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3116>
Diffstat (limited to 'src/gallium/drivers/freedreno/a4xx/fd4_query.c')
-rw-r--r--src/gallium/drivers/freedreno/a4xx/fd4_query.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_query.c b/src/gallium/drivers/freedreno/a4xx/fd4_query.c
index bea63f4c28b..1f1ce8e8771 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_query.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_query.c
@@ -166,7 +166,7 @@ time_elapsed_get_sample(struct fd_batch *batch, struct fd_ringbuffer *ring)
OUT_PKT3(ring, CP_REG_TO_MEM, 2);
OUT_RING(ring, CP_REG_TO_MEM_0_REG(REG_A4XX_RBBM_PERFCTR_CP_0_LO) |
CP_REG_TO_MEM_0_64B |
- CP_REG_TO_MEM_0_CNT(2-1)); /* write 2 regs to mem */
+ CP_REG_TO_MEM_0_CNT(2)); /* write 2 regs to mem */
OUT_RELOCW(ring, scratch_bo, sample_off, 0, 0);
/* ok... here we really *would* like to use the CP_SET_CONSTANT
@@ -188,7 +188,7 @@ time_elapsed_get_sample(struct fd_batch *batch, struct fd_ringbuffer *ring)
OUT_PKT3(ring, CP_REG_TO_MEM, 2);
OUT_RING(ring, CP_REG_TO_MEM_0_REG(HW_QUERY_BASE_REG) |
CP_REG_TO_MEM_0_ACCUMULATE |
- CP_REG_TO_MEM_0_CNT(1-1)); /* readback 1 regs */
+ CP_REG_TO_MEM_0_CNT(0)); /* readback 1 regs */
OUT_RELOCW(ring, scratch_bo, addr_off, 0, 0);
/* now copy that back to CP_ME_NRT_ADDR: */