diff options
| -rw-r--r-- | drivers/gpu/drm/v3d/v3d_gem.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/v3d/v3d_irq.c | 19 | ||||
| -rw-r--r-- | drivers/gpu/drm/v3d/v3d_trace.h | 101 |
3 files changed, 121 insertions, 3 deletions
diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c index 8b4af512450f..f565b197cba9 100644 --- a/drivers/gpu/drm/v3d/v3d_gem.c +++ b/drivers/gpu/drm/v3d/v3d_gem.c | |||
| @@ -521,6 +521,8 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data, | |||
| 521 | struct drm_syncobj *sync_out; | 521 | struct drm_syncobj *sync_out; |
| 522 | int ret = 0; | 522 | int ret = 0; |
| 523 | 523 | ||
| 524 | trace_v3d_submit_cl_ioctl(&v3d->drm, args->rcl_start, args->rcl_end); | ||
| 525 | |||
| 524 | if (args->pad != 0) { | 526 | if (args->pad != 0) { |
| 525 | DRM_INFO("pad must be zero: %d\n", args->pad); | 527 | DRM_INFO("pad must be zero: %d\n", args->pad); |
| 526 | return -EINVAL; | 528 | return -EINVAL; |
| @@ -648,6 +650,8 @@ v3d_submit_tfu_ioctl(struct drm_device *dev, void *data, | |||
| 648 | int ret = 0; | 650 | int ret = 0; |
| 649 | int bo_count; | 651 | int bo_count; |
| 650 | 652 | ||
| 653 | trace_v3d_submit_tfu_ioctl(&v3d->drm, args->iia); | ||
| 654 | |||
| 651 | job = kcalloc(1, sizeof(*job), GFP_KERNEL); | 655 | job = kcalloc(1, sizeof(*job), GFP_KERNEL); |
| 652 | if (!job) | 656 | if (!job) |
| 653 | return -ENOMEM; | 657 | return -ENOMEM; |
diff --git a/drivers/gpu/drm/v3d/v3d_irq.c b/drivers/gpu/drm/v3d/v3d_irq.c index dd7a7b0bd5a1..69338da70ddc 100644 --- a/drivers/gpu/drm/v3d/v3d_irq.c +++ b/drivers/gpu/drm/v3d/v3d_irq.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #include "v3d_drv.h" | 16 | #include "v3d_drv.h" |
| 17 | #include "v3d_regs.h" | 17 | #include "v3d_regs.h" |
| 18 | #include "v3d_trace.h" | ||
| 18 | 19 | ||
| 19 | #define V3D_CORE_IRQS ((u32)(V3D_INT_OUTOMEM | \ | 20 | #define V3D_CORE_IRQS ((u32)(V3D_INT_OUTOMEM | \ |
| 20 | V3D_INT_FLDONE | \ | 21 | V3D_INT_FLDONE | \ |
| @@ -88,12 +89,20 @@ v3d_irq(int irq, void *arg) | |||
| 88 | } | 89 | } |
| 89 | 90 | ||
| 90 | if (intsts & V3D_INT_FLDONE) { | 91 | if (intsts & V3D_INT_FLDONE) { |
| 91 | dma_fence_signal(v3d->bin_job->bin.done_fence); | 92 | struct v3d_fence *fence = |
| 93 | to_v3d_fence(v3d->bin_job->bin.done_fence); | ||
| 94 | |||
| 95 | trace_v3d_bcl_irq(&v3d->drm, fence->seqno); | ||
| 96 | dma_fence_signal(&fence->base); | ||
| 92 | status = IRQ_HANDLED; | 97 | status = IRQ_HANDLED; |
| 93 | } | 98 | } |
| 94 | 99 | ||
| 95 | if (intsts & V3D_INT_FRDONE) { | 100 | if (intsts & V3D_INT_FRDONE) { |
| 96 | dma_fence_signal(v3d->render_job->render.done_fence); | 101 | struct v3d_fence *fence = |
| 102 | to_v3d_fence(v3d->render_job->render.done_fence); | ||
| 103 | |||
| 104 | trace_v3d_rcl_irq(&v3d->drm, fence->seqno); | ||
| 105 | dma_fence_signal(&fence->base); | ||
| 97 | status = IRQ_HANDLED; | 106 | status = IRQ_HANDLED; |
| 98 | } | 107 | } |
| 99 | 108 | ||
| @@ -119,7 +128,11 @@ v3d_hub_irq(int irq, void *arg) | |||
| 119 | V3D_WRITE(V3D_HUB_INT_CLR, intsts); | 128 | V3D_WRITE(V3D_HUB_INT_CLR, intsts); |
| 120 | 129 | ||
| 121 | if (intsts & V3D_HUB_INT_TFUC) { | 130 | if (intsts & V3D_HUB_INT_TFUC) { |
| 122 | dma_fence_signal(v3d->tfu_job->done_fence); | 131 | struct v3d_fence *fence = |
| 132 | to_v3d_fence(v3d->tfu_job->done_fence); | ||
| 133 | |||
| 134 | trace_v3d_tfu_irq(&v3d->drm, fence->seqno); | ||
| 135 | dma_fence_signal(&fence->base); | ||
| 123 | status = IRQ_HANDLED; | 136 | status = IRQ_HANDLED; |
| 124 | } | 137 | } |
| 125 | 138 | ||
diff --git a/drivers/gpu/drm/v3d/v3d_trace.h b/drivers/gpu/drm/v3d/v3d_trace.h index f54ed9cd3444..edd984afa33f 100644 --- a/drivers/gpu/drm/v3d/v3d_trace.h +++ b/drivers/gpu/drm/v3d/v3d_trace.h | |||
| @@ -12,6 +12,28 @@ | |||
| 12 | #define TRACE_SYSTEM v3d | 12 | #define TRACE_SYSTEM v3d |
| 13 | #define TRACE_INCLUDE_FILE v3d_trace | 13 | #define TRACE_INCLUDE_FILE v3d_trace |
| 14 | 14 | ||
| 15 | TRACE_EVENT(v3d_submit_cl_ioctl, | ||
| 16 | TP_PROTO(struct drm_device *dev, u32 ct1qba, u32 ct1qea), | ||
| 17 | TP_ARGS(dev, ct1qba, ct1qea), | ||
| 18 | |||
| 19 | TP_STRUCT__entry( | ||
| 20 | __field(u32, dev) | ||
| 21 | __field(u32, ct1qba) | ||
| 22 | __field(u32, ct1qea) | ||
| 23 | ), | ||
| 24 | |||
| 25 | TP_fast_assign( | ||
| 26 | __entry->dev = dev->primary->index; | ||
| 27 | __entry->ct1qba = ct1qba; | ||
| 28 | __entry->ct1qea = ct1qea; | ||
| 29 | ), | ||
| 30 | |||
| 31 | TP_printk("dev=%u, RCL 0x%08x..0x%08x", | ||
| 32 | __entry->dev, | ||
| 33 | __entry->ct1qba, | ||
| 34 | __entry->ct1qea) | ||
| 35 | ); | ||
| 36 | |||
| 15 | TRACE_EVENT(v3d_submit_cl, | 37 | TRACE_EVENT(v3d_submit_cl, |
| 16 | TP_PROTO(struct drm_device *dev, bool is_render, | 38 | TP_PROTO(struct drm_device *dev, bool is_render, |
| 17 | uint64_t seqno, | 39 | uint64_t seqno, |
| @@ -42,6 +64,85 @@ TRACE_EVENT(v3d_submit_cl, | |||
| 42 | __entry->ctnqea) | 64 | __entry->ctnqea) |
| 43 | ); | 65 | ); |
| 44 | 66 | ||
| 67 | TRACE_EVENT(v3d_bcl_irq, | ||
| 68 | TP_PROTO(struct drm_device *dev, | ||
| 69 | uint64_t seqno), | ||
| 70 | TP_ARGS(dev, seqno), | ||
| 71 | |||
| 72 | TP_STRUCT__entry( | ||
| 73 | __field(u32, dev) | ||
| 74 | __field(u64, seqno) | ||
| 75 | ), | ||
| 76 | |||
| 77 | TP_fast_assign( | ||
| 78 | __entry->dev = dev->primary->index; | ||
| 79 | __entry->seqno = seqno; | ||
| 80 | ), | ||
| 81 | |||
| 82 | TP_printk("dev=%u, seqno=%llu", | ||
| 83 | __entry->dev, | ||
| 84 | __entry->seqno) | ||
| 85 | ); | ||
| 86 | |||
| 87 | TRACE_EVENT(v3d_rcl_irq, | ||
| 88 | TP_PROTO(struct drm_device *dev, | ||
| 89 | uint64_t seqno), | ||
| 90 | TP_ARGS(dev, seqno), | ||
| 91 | |||
| 92 | TP_STRUCT__entry( | ||
| 93 | __field(u32, dev) | ||
| 94 | __field(u64, seqno) | ||
| 95 | ), | ||
| 96 | |||
| 97 | TP_fast_assign( | ||
| 98 | __entry->dev = dev->primary->index; | ||
| 99 | __entry->seqno = seqno; | ||
| 100 | ), | ||
| 101 | |||
| 102 | TP_printk("dev=%u, seqno=%llu", | ||
| 103 | __entry->dev, | ||
| 104 | __entry->seqno) | ||
| 105 | ); | ||
| 106 | |||
| 107 | TRACE_EVENT(v3d_tfu_irq, | ||
| 108 | TP_PROTO(struct drm_device *dev, | ||
| 109 | uint64_t seqno), | ||
| 110 | TP_ARGS(dev, seqno), | ||
| 111 | |||
| 112 | TP_STRUCT__entry( | ||
| 113 | __field(u32, dev) | ||
| 114 | __field(u64, seqno) | ||
| 115 | ), | ||
| 116 | |||
| 117 | TP_fast_assign( | ||
| 118 | __entry->dev = dev->primary->index; | ||
| 119 | __entry->seqno = seqno; | ||
| 120 | ), | ||
| 121 | |||
| 122 | TP_printk("dev=%u, seqno=%llu", | ||
| 123 | __entry->dev, | ||
| 124 | __entry->seqno) | ||
| 125 | ); | ||
| 126 | |||
| 127 | TRACE_EVENT(v3d_submit_tfu_ioctl, | ||
| 128 | TP_PROTO(struct drm_device *dev, u32 iia), | ||
| 129 | TP_ARGS(dev, iia), | ||
| 130 | |||
| 131 | TP_STRUCT__entry( | ||
| 132 | __field(u32, dev) | ||
| 133 | __field(u32, iia) | ||
| 134 | ), | ||
| 135 | |||
| 136 | TP_fast_assign( | ||
| 137 | __entry->dev = dev->primary->index; | ||
| 138 | __entry->iia = iia; | ||
| 139 | ), | ||
| 140 | |||
| 141 | TP_printk("dev=%u, IIA 0x%08x", | ||
| 142 | __entry->dev, | ||
| 143 | __entry->iia) | ||
| 144 | ); | ||
| 145 | |||
| 45 | TRACE_EVENT(v3d_submit_tfu, | 146 | TRACE_EVENT(v3d_submit_tfu, |
| 46 | TP_PROTO(struct drm_device *dev, | 147 | TP_PROTO(struct drm_device *dev, |
| 47 | uint64_t seqno), | 148 | uint64_t seqno), |
