msm_gpu_trace.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #if !defined(_MSM_GPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
  3. #define _MSM_GPU_TRACE_H_
  4. #include <linux/tracepoint.h>
  5. #undef TRACE_SYSTEM
  6. #define TRACE_SYSTEM drm_msm_gpu
  7. #define TRACE_INCLUDE_FILE msm_gpu_trace
  8. TRACE_EVENT(msm_gpu_submit,
  9. TP_PROTO(pid_t pid, u32 ringid, u32 id, u32 nr_bos, u32 nr_cmds),
  10. TP_ARGS(pid, ringid, id, nr_bos, nr_cmds),
  11. TP_STRUCT__entry(
  12. __field(pid_t, pid)
  13. __field(u32, id)
  14. __field(u32, ringid)
  15. __field(u32, nr_cmds)
  16. __field(u32, nr_bos)
  17. ),
  18. TP_fast_assign(
  19. __entry->pid = pid;
  20. __entry->id = id;
  21. __entry->ringid = ringid;
  22. __entry->nr_bos = nr_bos;
  23. __entry->nr_cmds = nr_cmds
  24. ),
  25. TP_printk("id=%d pid=%d ring=%d bos=%d cmds=%d",
  26. __entry->id, __entry->pid, __entry->ringid,
  27. __entry->nr_bos, __entry->nr_cmds)
  28. );
  29. TRACE_EVENT(msm_gpu_submit_flush,
  30. TP_PROTO(struct msm_gem_submit *submit, u64 ticks),
  31. TP_ARGS(submit, ticks),
  32. TP_STRUCT__entry(
  33. __field(pid_t, pid)
  34. __field(u32, id)
  35. __field(u32, ringid)
  36. __field(u32, seqno)
  37. __field(u64, ticks)
  38. ),
  39. TP_fast_assign(
  40. __entry->pid = pid_nr(submit->pid);
  41. __entry->id = submit->ident;
  42. __entry->ringid = submit->ring->id;
  43. __entry->seqno = submit->seqno;
  44. __entry->ticks = ticks;
  45. ),
  46. TP_printk("id=%d pid=%d ring=%d:%d ticks=%lld",
  47. __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
  48. __entry->ticks)
  49. );
  50. TRACE_EVENT(msm_gpu_submit_retired,
  51. TP_PROTO(struct msm_gem_submit *submit, u64 elapsed, u64 clock,
  52. u64 start, u64 end),
  53. TP_ARGS(submit, elapsed, clock, start, end),
  54. TP_STRUCT__entry(
  55. __field(pid_t, pid)
  56. __field(u32, id)
  57. __field(u32, ringid)
  58. __field(u32, seqno)
  59. __field(u64, elapsed)
  60. __field(u64, clock)
  61. __field(u64, start_ticks)
  62. __field(u64, end_ticks)
  63. ),
  64. TP_fast_assign(
  65. __entry->pid = pid_nr(submit->pid);
  66. __entry->id = submit->ident;
  67. __entry->ringid = submit->ring->id;
  68. __entry->seqno = submit->seqno;
  69. __entry->elapsed = elapsed;
  70. __entry->clock = clock;
  71. __entry->start_ticks = start;
  72. __entry->end_ticks = end;
  73. ),
  74. TP_printk("id=%d pid=%d ring=%d:%d elapsed=%lld ns mhz=%lld start=%lld end=%lld",
  75. __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
  76. __entry->elapsed, __entry->clock,
  77. __entry->start_ticks, __entry->end_ticks)
  78. );
  79. TRACE_EVENT(msm_gpu_freq_change,
  80. TP_PROTO(u32 freq),
  81. TP_ARGS(freq),
  82. TP_STRUCT__entry(
  83. __field(u32, freq)
  84. ),
  85. TP_fast_assign(
  86. /* trace freq in MHz to match intel_gpu_freq_change, to make life easier
  87. * for userspace
  88. */
  89. __entry->freq = DIV_ROUND_UP(freq, 1000000);
  90. ),
  91. TP_printk("new_freq=%u", __entry->freq)
  92. );
  93. TRACE_EVENT(msm_gmu_freq_change,
  94. TP_PROTO(u32 freq, u32 perf_index),
  95. TP_ARGS(freq, perf_index),
  96. TP_STRUCT__entry(
  97. __field(u32, freq)
  98. __field(u32, perf_index)
  99. ),
  100. TP_fast_assign(
  101. __entry->freq = freq;
  102. __entry->perf_index = perf_index;
  103. ),
  104. TP_printk("freq=%u, perf_index=%u", __entry->freq, __entry->perf_index)
  105. );
  106. TRACE_EVENT(msm_gem_shrink,
  107. TP_PROTO(u32 nr_to_scan, u32 purged, u32 evicted,
  108. u32 active_purged, u32 active_evicted),
  109. TP_ARGS(nr_to_scan, purged, evicted, active_purged, active_evicted),
  110. TP_STRUCT__entry(
  111. __field(u32, nr_to_scan)
  112. __field(u32, purged)
  113. __field(u32, evicted)
  114. __field(u32, active_purged)
  115. __field(u32, active_evicted)
  116. ),
  117. TP_fast_assign(
  118. __entry->nr_to_scan = nr_to_scan;
  119. __entry->purged = purged;
  120. __entry->evicted = evicted;
  121. __entry->active_purged = active_purged;
  122. __entry->active_evicted = active_evicted;
  123. ),
  124. TP_printk("nr_to_scan=%u pg, purged=%u pg, evicted=%u pg, active_purged=%u pg, active_evicted=%u pg",
  125. __entry->nr_to_scan, __entry->purged, __entry->evicted,
  126. __entry->active_purged, __entry->active_evicted)
  127. );
  128. TRACE_EVENT(msm_gem_purge_vmaps,
  129. TP_PROTO(u32 unmapped),
  130. TP_ARGS(unmapped),
  131. TP_STRUCT__entry(
  132. __field(u32, unmapped)
  133. ),
  134. TP_fast_assign(
  135. __entry->unmapped = unmapped;
  136. ),
  137. TP_printk("Purging %u vmaps", __entry->unmapped)
  138. );
  139. TRACE_EVENT(msm_gpu_suspend,
  140. TP_PROTO(int dummy),
  141. TP_ARGS(dummy),
  142. TP_STRUCT__entry(
  143. __field(u32, dummy)
  144. ),
  145. TP_fast_assign(
  146. __entry->dummy = dummy;
  147. ),
  148. TP_printk("%u", __entry->dummy)
  149. );
  150. TRACE_EVENT(msm_gpu_resume,
  151. TP_PROTO(int dummy),
  152. TP_ARGS(dummy),
  153. TP_STRUCT__entry(
  154. __field(u32, dummy)
  155. ),
  156. TP_fast_assign(
  157. __entry->dummy = dummy;
  158. ),
  159. TP_printk("%u", __entry->dummy)
  160. );
  161. TRACE_EVENT(msm_gpu_preemption_trigger,
  162. TP_PROTO(int ring_id_from, int ring_id_to),
  163. TP_ARGS(ring_id_from, ring_id_to),
  164. TP_STRUCT__entry(
  165. __field(int, ring_id_from)
  166. __field(int, ring_id_to)
  167. ),
  168. TP_fast_assign(
  169. __entry->ring_id_from = ring_id_from;
  170. __entry->ring_id_to = ring_id_to;
  171. ),
  172. TP_printk("preempting %u -> %u",
  173. __entry->ring_id_from,
  174. __entry->ring_id_to)
  175. );
  176. TRACE_EVENT(msm_gpu_preemption_irq,
  177. TP_PROTO(u32 ring_id),
  178. TP_ARGS(ring_id),
  179. TP_STRUCT__entry(
  180. __field(u32, ring_id)
  181. ),
  182. TP_fast_assign(
  183. __entry->ring_id = ring_id;
  184. ),
  185. TP_printk("preempted to %u", __entry->ring_id)
  186. );
  187. TRACE_EVENT(msm_mmu_prealloc_cleanup,
  188. TP_PROTO(u32 count, u32 remaining),
  189. TP_ARGS(count, remaining),
  190. TP_STRUCT__entry(
  191. __field(u32, count)
  192. __field(u32, remaining)
  193. ),
  194. TP_fast_assign(
  195. __entry->count = count;
  196. __entry->remaining = remaining;
  197. ),
  198. TP_printk("count=%u, remaining=%u", __entry->count, __entry->remaining)
  199. );
  200. TRACE_EVENT(msm_gpu_regaccess,
  201. TP_PROTO(u32 offset),
  202. TP_ARGS(offset),
  203. TP_STRUCT__entry(
  204. __field(u32, offset)
  205. ),
  206. TP_fast_assign(
  207. __entry->offset = offset;
  208. ),
  209. TP_printk("offset=0x%x", __entry->offset)
  210. );
  211. #endif
  212. #undef TRACE_INCLUDE_PATH
  213. #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/msm
  214. #include <trace/define_trace.h>