diff --git a/src/broadcom/compiler/qpu_schedule.c b/src/broadcom/compiler/qpu_schedule.c index 9f11fe27eb8..9fe842c3e84 100644 --- a/src/broadcom/compiler/qpu_schedule.c +++ b/src/broadcom/compiler/qpu_schedule.c @@ -658,8 +658,8 @@ qpu_compatible_peripheral_access(const struct v3d_device_info *devinfo, /* V3D 4.1 and later allow TMU read along with a VPM read or write, and * WRTMUC with a TMU magic register write (other than tmuc). */ - if ((a->sig.ldtmu && v3d_qpu_uses_vpm(b)) || - (b->sig.ldtmu && v3d_qpu_uses_vpm(a))) { + if ((a->sig.ldtmu && v3d_qpu_reads_or_writes_vpm(b)) || + (b->sig.ldtmu && v3d_qpu_reads_or_writes_vpm(a))) { return true; } diff --git a/src/broadcom/qpu/qpu_instr.c b/src/broadcom/qpu/qpu_instr.c index 09d06b3fa3e..5c86daecdf7 100644 --- a/src/broadcom/qpu/qpu_instr.c +++ b/src/broadcom/qpu/qpu_instr.c @@ -591,7 +591,6 @@ v3d_qpu_add_op_reads_vpm(enum v3d_qpu_add_op op) { switch (op) { case V3D_QPU_A_VPMSETUP: - case V3D_QPU_A_VPMWT: case V3D_QPU_A_LDVPMV_IN: case V3D_QPU_A_LDVPMV_OUT: case V3D_QPU_A_LDVPMD_IN: @@ -610,7 +609,6 @@ v3d_qpu_add_op_writes_vpm(enum v3d_qpu_add_op op) { switch (op) { case V3D_QPU_A_VPMSETUP: - case V3D_QPU_A_VPMWT: case V3D_QPU_A_STVPMV: case V3D_QPU_A_STVPMD: case V3D_QPU_A_STVPMP: @@ -737,10 +735,25 @@ v3d_qpu_writes_vpm(const struct v3d_qpu_instr *inst) return false; } +static bool +v3d_qpu_waits_vpm(const struct v3d_qpu_instr *inst) +{ + return inst->type == V3D_QPU_INSTR_TYPE_ALU && + inst->alu.add.op == V3D_QPU_A_VPMWT; +} + +bool +v3d_qpu_reads_or_writes_vpm(const struct v3d_qpu_instr *inst) +{ + return v3d_qpu_reads_vpm(inst) || v3d_qpu_writes_vpm(inst); +} + bool v3d_qpu_uses_vpm(const struct v3d_qpu_instr *inst) { - return v3d_qpu_reads_vpm(inst) || v3d_qpu_writes_vpm(inst); + return v3d_qpu_reads_vpm(inst) || + v3d_qpu_writes_vpm(inst) || + v3d_qpu_waits_vpm(inst); } bool diff --git a/src/broadcom/qpu/qpu_instr.h b/src/broadcom/qpu/qpu_instr.h index ad2d37b6051..76329c8864b 100644 --- a/src/broadcom/qpu/qpu_instr.h +++ b/src/broadcom/qpu/qpu_instr.h @@ -462,6 +462,7 @@ bool v3d_qpu_uses_mux(const struct v3d_qpu_instr *inst, enum v3d_qpu_mux mux); bool v3d_qpu_uses_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_reads_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_writes_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; +bool v3d_qpu_reads_or_writes_vpm(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_reads_flags(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_writes_flags(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST; bool v3d_qpu_sig_writes_address(const struct v3d_device_info *devinfo,