broadcom/vc5: Fix CLIF dumping of lists that aren't capped by a HALT.

The HW will halt when you hit a HALT packet, or when you hit the end
address.  Tell CLIF if there's an end address is so that it can stop
correctly.  (There was usually a 0 byte after the CL, so it would stop
anyway).
This commit is contained in:
Eric Anholt
2017-09-28 13:36:54 -07:00
parent 7f3b890697
commit d0dfc4bd5f
3 changed files with 23 additions and 10 deletions

View File

@@ -245,21 +245,34 @@ clif_process_worklist(struct clif_dump *clif)
}
void
clif_dump_add_cl(struct clif_dump *clif, uint32_t address)
clif_dump_add_cl(struct clif_dump *clif, uint32_t start, uint32_t end)
{
uint32_t size;
void *vaddr;
if (!clif->lookup_vaddr(clif->data, address, &vaddr)) {
void *start_vaddr;
if (!clif->lookup_vaddr(clif->data, start, &start_vaddr)) {
out(clif, "Failed to look up address 0x%08x\n",
address);
start);
return;
}
uint8_t *cl = vaddr;
while (clif_dump_packet(clif, address, cl, &size)) {
/* The end address is optional (for example, a BRANCH instruction
* won't set an end), but is used for BCL/RCL termination.
*/
void *end_vaddr = NULL;
if (end && !clif->lookup_vaddr(clif->data, end, &end_vaddr)) {
out(clif, "Failed to look up address 0x%08x\n",
end);
return;
}
uint8_t *cl = start_vaddr;
while (clif_dump_packet(clif, start, cl, &size)) {
cl += size;
address += size;
start += size;
if (cl == end_vaddr)
break;
}
out(clif, "\n");

View File

@@ -37,6 +37,6 @@ struct clif_dump *clif_dump_init(const struct v3d_device_info *devinfo,
void *data);
void clif_dump_destroy(struct clif_dump *clif);
void clif_dump_add_cl(struct clif_dump *clif, uint32_t offset);
void clif_dump_add_cl(struct clif_dump *clif, uint32_t start, uint32_t end);
#endif

View File

@@ -329,11 +329,11 @@ vc5_clif_dump(struct vc5_context *vc5, struct vc5_job *job)
fprintf(stderr, "BCL: 0x%08x..0x%08x\n",
job->submit.bcl_start, job->submit.bcl_end);
clif_dump_add_cl(clif, job->submit.bcl_start);
clif_dump_add_cl(clif, job->submit.bcl_start, job->submit.bcl_end);
fprintf(stderr, "RCL: 0x%08x..0x%08x\n",
job->submit.rcl_start, job->submit.rcl_end);
clif_dump_add_cl(clif, job->submit.rcl_start);
clif_dump_add_cl(clif, job->submit.rcl_start, job->submit.rcl_end);
}
/**