From 457ed5aa01fc65c47dea6bfb7e358d4518969b7a Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 11 Feb 2021 11:32:35 +0100 Subject: [PATCH] broadcom/compiler: name registers correctly based on V3D version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit So we can differentiate between TMU for V3D 4.x and UNIFA for V3D 4.x, which are aliased. Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/compiler/vir_dump.c | 6 ++++-- src/broadcom/qpu/qpu_disasm.c | 6 ++++-- src/broadcom/qpu/qpu_instr.c | 9 +++++++-- src/broadcom/qpu/qpu_instr.h | 3 ++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/broadcom/compiler/vir_dump.c b/src/broadcom/compiler/vir_dump.c index 576b0d7263e..db8ff87f90d 100644 --- a/src/broadcom/compiler/vir_dump.c +++ b/src/broadcom/compiler/vir_dump.c @@ -163,7 +163,8 @@ vir_print_reg(struct v3d_compile *c, const struct qinst *inst, break; case QFILE_MAGIC: - fprintf(stderr, "%s", v3d_qpu_magic_waddr_name(reg.index)); + fprintf(stderr, "%s", + v3d_qpu_magic_waddr_name(c->devinfo, reg.index)); break; case QFILE_SMALL_IMM: { @@ -202,7 +203,8 @@ vir_dump_sig_addr(const struct v3d_device_info *devinfo, if (!instr->sig_magic) fprintf(stderr, ".rf%d", instr->sig_addr); else { - const char *name = v3d_qpu_magic_waddr_name(instr->sig_addr); + const char *name = + v3d_qpu_magic_waddr_name(devinfo, instr->sig_addr); if (name) fprintf(stderr, ".%s", name); else diff --git a/src/broadcom/qpu/qpu_disasm.c b/src/broadcom/qpu/qpu_disasm.c index 9f59bcdf783..b5648bd76e2 100644 --- a/src/broadcom/qpu/qpu_disasm.c +++ b/src/broadcom/qpu/qpu_disasm.c @@ -90,7 +90,7 @@ v3d_qpu_disasm_waddr(struct disasm_state *disasm, uint32_t waddr, bool magic) return; } - const char *name = v3d_qpu_magic_waddr_name(waddr); + const char *name = v3d_qpu_magic_waddr_name(disasm->devinfo, waddr); if (name) append(disasm, "%s", name); else @@ -187,7 +187,9 @@ v3d_qpu_disasm_sig_addr(struct disasm_state *disasm, if (!instr->sig_magic) append(disasm, ".rf%d", instr->sig_addr); else { - const char *name = v3d_qpu_magic_waddr_name(instr->sig_addr); + const char *name = + v3d_qpu_magic_waddr_name(disasm->devinfo, + instr->sig_addr); if (name) append(disasm, ".%s", name); else diff --git a/src/broadcom/qpu/qpu_instr.c b/src/broadcom/qpu/qpu_instr.c index 2a041cdf1bd..4cbf84ef00c 100644 --- a/src/broadcom/qpu/qpu_instr.c +++ b/src/broadcom/qpu/qpu_instr.c @@ -27,8 +27,13 @@ #include "qpu_instr.h" const char * -v3d_qpu_magic_waddr_name(enum v3d_qpu_waddr waddr) +v3d_qpu_magic_waddr_name(const struct v3d_device_info *devinfo, + enum v3d_qpu_waddr waddr) { + /* V3D 4.x UNIFA aliases TMU in V3D 3.x in the table below */ + if (devinfo->ver < 40 && waddr == V3D_QPU_WADDR_TMU) + return "tmu"; + static const char *waddr_magic[] = { [V3D_QPU_WADDR_R0] = "r0", [V3D_QPU_WADDR_R1] = "r1", @@ -39,7 +44,7 @@ v3d_qpu_magic_waddr_name(enum v3d_qpu_waddr waddr) [V3D_QPU_WADDR_NOP] = "-", [V3D_QPU_WADDR_TLB] = "tlb", [V3D_QPU_WADDR_TLBU] = "tlbu", - [V3D_QPU_WADDR_TMU] = "tmu", + [V3D_QPU_WADDR_UNIFA] = "unifa", [V3D_QPU_WADDR_TMUL] = "tmul", [V3D_QPU_WADDR_TMUD] = "tmud", [V3D_QPU_WADDR_TMUA] = "tmua", diff --git a/src/broadcom/qpu/qpu_instr.h b/src/broadcom/qpu/qpu_instr.h index 86dde9d7e6b..432312ca45d 100644 --- a/src/broadcom/qpu/qpu_instr.h +++ b/src/broadcom/qpu/qpu_instr.h @@ -388,7 +388,8 @@ struct v3d_qpu_instr { }; }; -const char *v3d_qpu_magic_waddr_name(enum v3d_qpu_waddr waddr); +const char *v3d_qpu_magic_waddr_name(const struct v3d_device_info *devinfo, + enum v3d_qpu_waddr waddr); const char *v3d_qpu_add_op_name(enum v3d_qpu_add_op op); const char *v3d_qpu_mul_op_name(enum v3d_qpu_mul_op op); const char *v3d_qpu_cond_name(enum v3d_qpu_cond cond);