• Home
  • Raw
  • Download

Lines Matching +full:broadcom +full:- +full:rpi4

2  * Copyright © 2014 Broadcom
46 /* Set when we've found the last-THRSW signal, or if we were started
47 * in single-segment mode.
63 struct v3d_compile *c = state->c; in fail_instr()
65 fprintf(stderr, "v3d_qpu_validate at ip %d: %s:\n", state->ip, msg); in fail_instr()
69 v3d_qpu_dump(c->devinfo, &inst->qpu); in fail_instr()
71 if (dump_ip++ == state->ip) in fail_instr()
84 return (state->ip - state->last_branch_ip) < 3; in in_branch_delay_slots()
90 return (state->ip - state->last_thrsw_ip) < 3; in in_thrsw_delay_slots()
97 if (inst->type == V3D_QPU_INSTR_TYPE_ALU) in qpu_magic_waddr_matches()
100 if (inst->alu.add.op != V3D_QPU_A_NOP && in qpu_magic_waddr_matches()
101 inst->alu.add.magic_write && in qpu_magic_waddr_matches()
102 predicate(inst->alu.add.waddr)) in qpu_magic_waddr_matches()
105 if (inst->alu.mul.op != V3D_QPU_M_NOP && in qpu_magic_waddr_matches()
106 inst->alu.mul.magic_write && in qpu_magic_waddr_matches()
107 predicate(inst->alu.mul.waddr)) in qpu_magic_waddr_matches()
116 const struct v3d_device_info *devinfo = state->c->devinfo; in qpu_validate_inst()
118 if (qinst->is_tlb_z_write && state->ip < state->first_tlb_z_write) in qpu_validate_inst()
119 state->first_tlb_z_write = state->ip; in qpu_validate_inst()
121 const struct v3d_qpu_instr *inst = &qinst->qpu; in qpu_validate_inst()
123 if (inst->type == V3D_QPU_INSTR_TYPE_BRANCH && in qpu_validate_inst()
124 state->first_tlb_z_write >= 0 && in qpu_validate_inst()
125 state->ip > state->first_tlb_z_write && in qpu_validate_inst()
126 inst->branch.msfign != V3D_QPU_MSFIGN_NONE && in qpu_validate_inst()
127 inst->branch.cond != V3D_QPU_BRANCH_COND_ALWAYS && in qpu_validate_inst()
128 inst->branch.cond != V3D_QPU_BRANCH_COND_A0 && in qpu_validate_inst()
129 inst->branch.cond != V3D_QPU_BRANCH_COND_NA0) { in qpu_validate_inst()
133 if (inst->type != V3D_QPU_INSTR_TYPE_ALU) in qpu_validate_inst()
136 if (inst->alu.mul.op == V3D_QPU_M_MULTOP) in qpu_validate_inst()
137 state->rtop_valid = true; in qpu_validate_inst()
139 if (inst->alu.mul.op == V3D_QPU_M_UMUL24) { in qpu_validate_inst()
140 if (state->rtop_hazard) in qpu_validate_inst()
142 state->rtop_valid = false; in qpu_validate_inst()
143 state->rtop_hazard = false; in qpu_validate_inst()
146 if (inst->alu.add.op == V3D_QPU_A_SETMSF && in qpu_validate_inst()
147 state->first_tlb_z_write >= 0 && in qpu_validate_inst()
148 state->ip > state->first_tlb_z_write) { in qpu_validate_inst()
152 if (state->first_tlb_z_write >= 0 && in qpu_validate_inst()
153 state->ip > state->first_tlb_z_write && in qpu_validate_inst()
154 inst->alu.add.op == V3D_QPU_A_MSF) { in qpu_validate_inst()
158 if (devinfo->ver < 71) { in qpu_validate_inst()
159 if (inst->sig.small_imm_a || inst->sig.small_imm_c || in qpu_validate_inst()
160 inst->sig.small_imm_d) { in qpu_validate_inst()
164 if ((inst->sig.small_imm_a || inst->sig.small_imm_b) && in qpu_validate_inst()
168 if ((inst->sig.small_imm_c || inst->sig.small_imm_d) && in qpu_validate_inst()
172 if (inst->sig.small_imm_a + inst->sig.small_imm_b + in qpu_validate_inst()
173 inst->sig.small_imm_c + inst->sig.small_imm_d > 1) { in qpu_validate_inst()
183 if (state->last && state->last->sig.ldvary && in qpu_validate_inst()
184 (inst->sig.ldunif || inst->sig.ldunifa)) { in qpu_validate_inst()
188 /* GFXH-1633 (fixed since V3D 4.2.14, which is Rpi4) in qpu_validate_inst()
195 if (state->c->devinfo->ver < 42) { in qpu_validate_inst()
196 bool last_reads_ldunif = (state->last && (state->last->sig.ldunif || in qpu_validate_inst()
197 state->last->sig.ldunifrf)); in qpu_validate_inst()
198 bool last_reads_ldunifa = (state->last && (state->last->sig.ldunifa || in qpu_validate_inst()
199 state->last->sig.ldunifarf)); in qpu_validate_inst()
200 bool reads_ldunif = inst->sig.ldunif || inst->sig.ldunifrf; in qpu_validate_inst()
201 bool reads_ldunifa = inst->sig.ldunifa || inst->sig.ldunifarf; in qpu_validate_inst()
215 if (inst->alu.add.op != V3D_QPU_A_NOP) { in qpu_validate_inst()
216 if (inst->alu.add.magic_write) { in qpu_validate_inst()
217 if (v3d_qpu_magic_waddr_is_tmu(state->c->devinfo, in qpu_validate_inst()
218 inst->alu.add.waddr)) { in qpu_validate_inst()
221 if (v3d_qpu_magic_waddr_is_sfu(inst->alu.add.waddr)) in qpu_validate_inst()
223 if (v3d_qpu_magic_waddr_is_vpm(inst->alu.add.waddr)) in qpu_validate_inst()
225 if (v3d_qpu_magic_waddr_is_tlb(inst->alu.add.waddr)) in qpu_validate_inst()
227 if (v3d_qpu_magic_waddr_is_tsy(inst->alu.add.waddr)) in qpu_validate_inst()
232 if (inst->alu.mul.op != V3D_QPU_M_NOP) { in qpu_validate_inst()
233 if (inst->alu.mul.magic_write) { in qpu_validate_inst()
234 if (v3d_qpu_magic_waddr_is_tmu(state->c->devinfo, in qpu_validate_inst()
235 inst->alu.mul.waddr)) { in qpu_validate_inst()
238 if (v3d_qpu_magic_waddr_is_sfu(inst->alu.mul.waddr)) in qpu_validate_inst()
240 if (v3d_qpu_magic_waddr_is_vpm(inst->alu.mul.waddr)) in qpu_validate_inst()
242 if (v3d_qpu_magic_waddr_is_tlb(inst->alu.mul.waddr)) in qpu_validate_inst()
244 if (v3d_qpu_magic_waddr_is_tsy(inst->alu.mul.waddr)) in qpu_validate_inst()
258 if (inst->sig.ldvary) { in qpu_validate_inst()
259 if (devinfo->ver == 42) in qpu_validate_inst()
261 if (devinfo->ver >= 71 && in qpu_validate_inst()
262 state->ip - state->last_thrsw_ip == 2) { in qpu_validate_inst()
273 if (state->ip - state->last_sfu_write < 2) { in qpu_validate_inst()
292 (devinfo->ver == 42 ? inst->sig.ldtmu : 0) + in qpu_validate_inst()
293 inst->sig.ldtlb + in qpu_validate_inst()
294 inst->sig.ldvpm + in qpu_validate_inst()
295 inst->sig.ldtlbu > 1) { in qpu_validate_inst()
301 state->last_sfu_write = state->ip; in qpu_validate_inst()
303 if (inst->sig.thrsw) { in qpu_validate_inst()
307 if (state->last_thrsw_found) in qpu_validate_inst()
308 state->thrend_found = true; in qpu_validate_inst()
310 if (state->last_thrsw_ip == state->ip - 1) { in qpu_validate_inst()
312 * last-thrsw signal. in qpu_validate_inst()
314 if (state->last_thrsw_found) in qpu_validate_inst()
315 fail_instr(state, "Two last-THRSW signals"); in qpu_validate_inst()
316 state->last_thrsw_found = true; in qpu_validate_inst()
322 state->thrsw_count++; in qpu_validate_inst()
323 state->last_thrsw_ip = state->ip; in qpu_validate_inst()
327 if (state->thrend_found && in qpu_validate_inst()
328 state->last_thrsw_ip - state->ip <= 2 && in qpu_validate_inst()
329 inst->type == V3D_QPU_INSTR_TYPE_ALU) { in qpu_validate_inst()
330 if ((inst->alu.add.op != V3D_QPU_A_NOP && in qpu_validate_inst()
331 !inst->alu.add.magic_write)) { in qpu_validate_inst()
332 if (devinfo->ver == 42) { in qpu_validate_inst()
334 } else if (devinfo->ver >= 71) { in qpu_validate_inst()
335 if (state->last_thrsw_ip - state->ip == 0) { in qpu_validate_inst()
339 if (inst->alu.add.waddr == 2 || in qpu_validate_inst()
340 inst->alu.add.waddr == 3) { in qpu_validate_inst()
342 "RF2-3 write after THREND"); in qpu_validate_inst()
347 if ((inst->alu.mul.op != V3D_QPU_M_NOP && in qpu_validate_inst()
348 !inst->alu.mul.magic_write)) { in qpu_validate_inst()
349 if (devinfo->ver == 42) { in qpu_validate_inst()
351 } else if (devinfo->ver >= 71) { in qpu_validate_inst()
352 if (state->last_thrsw_ip - state->ip == 0) { in qpu_validate_inst()
357 if (inst->alu.mul.waddr == 2 || in qpu_validate_inst()
358 inst->alu.mul.waddr == 3) { in qpu_validate_inst()
360 "RF2-3 write after THREND"); in qpu_validate_inst()
365 if (v3d_qpu_sig_writes_address(devinfo, &inst->sig) && in qpu_validate_inst()
366 !inst->sig_magic) { in qpu_validate_inst()
367 if (devinfo->ver == 42) { in qpu_validate_inst()
369 } else if (devinfo->ver >= 71 && in qpu_validate_inst()
370 (inst->sig_addr == 2 || in qpu_validate_inst()
371 inst->sig_addr == 3)) { in qpu_validate_inst()
372 fail_instr(state, "RF2-3 write after THREND"); in qpu_validate_inst()
376 /* GFXH-1625: No TMUWT in the last instruction */ in qpu_validate_inst()
377 if (state->last_thrsw_ip - state->ip == 2 && in qpu_validate_inst()
378 inst->alu.add.op == V3D_QPU_A_TMUWT) in qpu_validate_inst()
382 if (state->rtop_valid && state->ip == state->last_thrsw_ip + 2) { in qpu_validate_inst()
383 state->rtop_hazard = true; in qpu_validate_inst()
384 state->rtop_valid = false; in qpu_validate_inst()
387 if (inst->type == V3D_QPU_INSTR_TYPE_BRANCH) { in qpu_validate_inst()
392 state->last_branch_ip = state->ip; in qpu_validate_inst()
402 state->last = &qinst->qpu; in qpu_validate_block()
403 state->ip++; in qpu_validate_block()
424 .last_sfu_write = -10, in qpu_validate()
425 .last_thrsw_ip = -10, in qpu_validate()
426 .last_branch_ip = -10, in qpu_validate()
430 .last_thrsw_found = !c->last_thrsw, in qpu_validate()
441 "thread switch found without last-THRSW in program"); in qpu_validate()
445 fail_instr(&state, "No program-end THRSW found"); in qpu_validate()