aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/v3d/v3d_gem.c4
-rw-r--r--drivers/gpu/drm/v3d/v3d_irq.c19
-rw-r--r--drivers/gpu/drm/v3d/v3d_trace.h101
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
15TRACE_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
15TRACE_EVENT(v3d_submit_cl, 37TRACE_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
67TRACE_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
87TRACE_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
107TRACE_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
127TRACE_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
45TRACE_EVENT(v3d_submit_tfu, 146TRACE_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),