diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 15 |
2 files changed, 22 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index c830863bc98a..a579ed379f20 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
@@ -715,6 +715,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, | |||
715 | struct radeon_cs_chunk *ib_chunk = p->chunk_ib; | 715 | struct radeon_cs_chunk *ib_chunk = p->chunk_ib; |
716 | struct radeon_device *rdev = p->rdev; | 716 | struct radeon_device *rdev = p->rdev; |
717 | uint32_t header; | 717 | uint32_t header; |
718 | int ret = 0, i; | ||
718 | 719 | ||
719 | if (idx >= ib_chunk->length_dw) { | 720 | if (idx >= ib_chunk->length_dw) { |
720 | DRM_ERROR("Can not parse packet at %d after CS end %d !\n", | 721 | 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, | |||
743 | break; | 744 | break; |
744 | default: | 745 | default: |
745 | DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx); | 746 | DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx); |
746 | return -EINVAL; | 747 | ret = -EINVAL; |
748 | goto dump_ib; | ||
747 | } | 749 | } |
748 | if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) { | 750 | if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) { |
749 | DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n", | 751 | DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n", |
750 | pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw); | 752 | pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw); |
751 | return -EINVAL; | 753 | ret = -EINVAL; |
754 | goto dump_ib; | ||
752 | } | 755 | } |
753 | return 0; | 756 | return 0; |
757 | |||
758 | dump_ib: | ||
759 | for (i = 0; i < ib_chunk->length_dw; i++) { | ||
760 | if (i == idx) | ||
761 | printk("\t0x%08x <---\n", radeon_get_ib_value(p, i)); | ||
762 | else | ||
763 | printk("\t0x%08x\n", radeon_get_ib_value(p, i)); | ||
764 | } | ||
765 | return ret; | ||
754 | } | 766 | } |
755 | 767 | ||
756 | /** | 768 | /** |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 73107fe9e46f..ad26973733af 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -4699,12 +4699,6 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) | |||
4699 | switch (pkt.type) { | 4699 | switch (pkt.type) { |
4700 | case RADEON_PACKET_TYPE0: | 4700 | case RADEON_PACKET_TYPE0: |
4701 | dev_err(rdev->dev, "Packet0 not allowed!\n"); | 4701 | dev_err(rdev->dev, "Packet0 not allowed!\n"); |
4702 | for (i = 0; i < ib->length_dw; i++) { | ||
4703 | if (i == idx) | ||
4704 | printk("\t0x%08x <---\n", ib->ptr[i]); | ||
4705 | else | ||
4706 | printk("\t0x%08x\n", ib->ptr[i]); | ||
4707 | } | ||
4708 | ret = -EINVAL; | 4702 | ret = -EINVAL; |
4709 | break; | 4703 | break; |
4710 | case RADEON_PACKET_TYPE2: | 4704 | case RADEON_PACKET_TYPE2: |
@@ -4736,8 +4730,15 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) | |||
4736 | ret = -EINVAL; | 4730 | ret = -EINVAL; |
4737 | break; | 4731 | break; |
4738 | } | 4732 | } |
4739 | if (ret) | 4733 | if (ret) { |
4734 | for (i = 0; i < ib->length_dw; i++) { | ||
4735 | if (i == idx) | ||
4736 | printk("\t0x%08x <---\n", ib->ptr[i]); | ||
4737 | else | ||
4738 | printk("\t0x%08x\n", ib->ptr[i]); | ||
4739 | } | ||
4740 | break; | 4740 | break; |
4741 | } | ||
4741 | } while (idx < ib->length_dw); | 4742 | } while (idx < ib->length_dw); |
4742 | 4743 | ||
4743 | return ret; | 4744 | return ret; |