|
@@ -715,6 +715,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p,
|
|
|
struct radeon_cs_chunk *ib_chunk = p->chunk_ib;
|
|
|
struct radeon_device *rdev = p->rdev;
|
|
|
uint32_t header;
|
|
|
+ int ret = 0, i;
|
|
|
|
|
|
if (idx >= ib_chunk->length_dw) {
|
|
|
DRM_ERROR("Can not parse packet at %d after CS end %d !\n",
|
|
@@ -743,14 +744,25 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p,
|
|
|
break;
|
|
|
default:
|
|
|
DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto dump_ib;
|
|
|
}
|
|
|
if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) {
|
|
|
DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n",
|
|
|
pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto dump_ib;
|
|
|
}
|
|
|
return 0;
|
|
|
+
|
|
|
+dump_ib:
|
|
|
+ for (i = 0; i < ib_chunk->length_dw; i++) {
|
|
|
+ if (i == idx)
|
|
|
+ printk("\t0x%08x <---\n", radeon_get_ib_value(p, i));
|
|
|
+ else
|
|
|
+ printk("\t0x%08x\n", radeon_get_ib_value(p, i));
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/**
|