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:
@@ -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");
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user