sde_rotator_trace.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #if !defined(TRACE_SDE_ROTATOR_H) || defined(TRACE_HEADER_MULTI_READ)
  6. #define TRACE_SDE_ROTATOR_H
  7. #undef TRACE_SYSTEM
  8. #define TRACE_SYSTEM sde_rotator
  9. #undef TRACE_INCLUDE_PATH
  10. #define TRACE_INCLUDE_PATH .
  11. #undef TRACE_INCLUDE_FILE
  12. #define TRACE_INCLUDE_FILE sde_rotator_trace
  13. #include <linux/tracepoint.h>
  14. #include <sde_rotator_core.h>
  15. DECLARE_EVENT_CLASS(rot_entry_template,
  16. TP_PROTO(u32 ss_id, u32 sq_id, struct sde_rot_trace_entry *rot),
  17. TP_ARGS(ss_id, sq_id, rot),
  18. TP_STRUCT__entry(
  19. __field(u32, ss_id)
  20. __field(u32, sq_id)
  21. __field(u32, pr_id)
  22. __field(u32, flags)
  23. __field(u32, src_fmt)
  24. __field(u16, src_bw)
  25. __field(u16, src_bh)
  26. __field(u16, src_x)
  27. __field(u16, src_y)
  28. __field(u16, src_w)
  29. __field(u16, src_h)
  30. __field(u32, dst_fmt)
  31. __field(u16, dst_bw)
  32. __field(u16, dst_bh)
  33. __field(u16, dst_x)
  34. __field(u16, dst_y)
  35. __field(u16, dst_w)
  36. __field(u16, dst_h)
  37. ),
  38. TP_fast_assign(
  39. __entry->ss_id = ss_id;
  40. __entry->sq_id = sq_id;
  41. __entry->pr_id = rot->wb_idx;
  42. __entry->flags = rot->flags;
  43. __entry->src_fmt = rot->input_format;
  44. __entry->src_bw = rot->input_width;
  45. __entry->src_bh = rot->input_height;
  46. __entry->src_x = rot->src_x;
  47. __entry->src_y = rot->src_y;
  48. __entry->src_w = rot->src_w;
  49. __entry->src_h = rot->src_h;
  50. __entry->dst_fmt = rot->output_format;
  51. __entry->dst_bw = rot->output_width;
  52. __entry->dst_bh = rot->output_height;
  53. __entry->dst_x = rot->dst_x;
  54. __entry->dst_y = rot->dst_y;
  55. __entry->dst_w = rot->dst_w;
  56. __entry->dst_h = rot->dst_h;
  57. ),
  58. TP_printk("%d.%d|%d|%x|%x|%u,%u|%u,%u,%u,%u|%x|%u,%u|%u,%u,%u,%u|",
  59. __entry->ss_id, __entry->sq_id, __entry->pr_id,
  60. __entry->flags,
  61. __entry->src_fmt, __entry->src_bw, __entry->src_bh,
  62. __entry->src_x, __entry->src_y,
  63. __entry->src_w, __entry->src_h,
  64. __entry->dst_fmt, __entry->dst_bw, __entry->dst_bh,
  65. __entry->dst_x, __entry->dst_y,
  66. __entry->dst_w, __entry->dst_h)
  67. );
  68. DEFINE_EVENT(rot_entry_template, rot_entry_fence,
  69. TP_PROTO(u32 ss_id, u32 sq_id, struct sde_rot_trace_entry *rot),
  70. TP_ARGS(ss_id, sq_id, rot)
  71. );
  72. DEFINE_EVENT(rot_entry_template, rot_entry_commit,
  73. TP_PROTO(u32 ss_id, u32 sq_id, struct sde_rot_trace_entry *rot),
  74. TP_ARGS(ss_id, sq_id, rot)
  75. );
  76. DEFINE_EVENT(rot_entry_template, rot_entry_done,
  77. TP_PROTO(u32 ss_id, u32 sq_id, struct sde_rot_trace_entry *rot),
  78. TP_ARGS(ss_id, sq_id, rot)
  79. );
  80. TRACE_EVENT(rot_perf_set_qos_luts,
  81. TP_PROTO(u32 pnum, u32 fmt, u32 lut, bool linear),
  82. TP_ARGS(pnum, fmt, lut, linear),
  83. TP_STRUCT__entry(
  84. __field(u32, pnum)
  85. __field(u32, fmt)
  86. __field(u32, lut)
  87. __field(bool, linear)
  88. ),
  89. TP_fast_assign(
  90. __entry->pnum = pnum;
  91. __entry->fmt = fmt;
  92. __entry->lut = lut;
  93. __entry->linear = linear;
  94. ),
  95. TP_printk("pnum=%d fmt=%d lut=0x%x lin:%d",
  96. __entry->pnum, __entry->fmt,
  97. __entry->lut, __entry->linear)
  98. );
  99. TRACE_EVENT(rot_perf_set_panic_luts,
  100. TP_PROTO(u32 pnum, u32 fmt, u32 mode, u32 panic_lut,
  101. u32 robust_lut),
  102. TP_ARGS(pnum, fmt, mode, panic_lut, robust_lut),
  103. TP_STRUCT__entry(
  104. __field(u32, pnum)
  105. __field(u32, fmt)
  106. __field(u32, mode)
  107. __field(u32, panic_lut)
  108. __field(u32, robust_lut)
  109. ),
  110. TP_fast_assign(
  111. __entry->pnum = pnum;
  112. __entry->fmt = fmt;
  113. __entry->mode = mode;
  114. __entry->panic_lut = panic_lut;
  115. __entry->robust_lut = robust_lut;
  116. ),
  117. TP_printk("pnum=%d fmt=%d mode=%d luts[0x%x, 0x%x]",
  118. __entry->pnum, __entry->fmt,
  119. __entry->mode, __entry->panic_lut,
  120. __entry->robust_lut)
  121. );
  122. TRACE_EVENT(rot_perf_set_wm_levels,
  123. TP_PROTO(u32 pnum, u32 use_space, u32 priority_bytes, u32 wm0, u32 wm1,
  124. u32 wm2, u32 mb_cnt, u32 mb_size),
  125. TP_ARGS(pnum, use_space, priority_bytes, wm0, wm1, wm2, mb_cnt,
  126. mb_size),
  127. TP_STRUCT__entry(
  128. __field(u32, pnum)
  129. __field(u32, use_space)
  130. __field(u32, priority_bytes)
  131. __field(u32, wm0)
  132. __field(u32, wm1)
  133. __field(u32, wm2)
  134. __field(u32, mb_cnt)
  135. __field(u32, mb_size)
  136. ),
  137. TP_fast_assign(
  138. __entry->pnum = pnum;
  139. __entry->use_space = use_space;
  140. __entry->priority_bytes = priority_bytes;
  141. __entry->wm0 = wm0;
  142. __entry->wm1 = wm1;
  143. __entry->wm2 = wm2;
  144. __entry->mb_cnt = mb_cnt;
  145. __entry->mb_size = mb_size;
  146. ),
  147. TP_printk(
  148. "pnum:%d useable_space:%d priority_bytes:%d watermark:[%d | %d | %d] nmb=%d mb_size=%d",
  149. __entry->pnum, __entry->use_space,
  150. __entry->priority_bytes, __entry->wm0, __entry->wm1,
  151. __entry->wm2, __entry->mb_cnt, __entry->mb_size)
  152. );
  153. TRACE_EVENT(rot_perf_set_ot,
  154. TP_PROTO(u32 pnum, u32 xin_id, u32 rd_lim),
  155. TP_ARGS(pnum, xin_id, rd_lim),
  156. TP_STRUCT__entry(
  157. __field(u32, pnum)
  158. __field(u32, xin_id)
  159. __field(u32, rd_lim)
  160. ),
  161. TP_fast_assign(
  162. __entry->pnum = pnum;
  163. __entry->xin_id = xin_id;
  164. __entry->rd_lim = rd_lim;
  165. ),
  166. TP_printk("pnum:%d xin_id:%d ot:%d",
  167. __entry->pnum, __entry->xin_id, __entry->rd_lim)
  168. );
  169. TRACE_EVENT(rot_perf_prefill_calc,
  170. TP_PROTO(u32 pnum, u32 latency_buf, u32 ot, u32 y_buf, u32 y_scaler,
  171. u32 pp_lines, u32 pp_bytes, u32 post_sc, u32 fbc_bytes,
  172. u32 prefill_bytes),
  173. TP_ARGS(pnum, latency_buf, ot, y_buf, y_scaler, pp_lines, pp_bytes,
  174. post_sc, fbc_bytes, prefill_bytes),
  175. TP_STRUCT__entry(
  176. __field(u32, pnum)
  177. __field(u32, latency_buf)
  178. __field(u32, ot)
  179. __field(u32, y_buf)
  180. __field(u32, y_scaler)
  181. __field(u32, pp_lines)
  182. __field(u32, pp_bytes)
  183. __field(u32, post_sc)
  184. __field(u32, fbc_bytes)
  185. __field(u32, prefill_bytes)
  186. ),
  187. TP_fast_assign(
  188. __entry->pnum = pnum;
  189. __entry->latency_buf = latency_buf;
  190. __entry->ot = ot;
  191. __entry->y_buf = y_buf;
  192. __entry->y_scaler = y_scaler;
  193. __entry->pp_lines = pp_lines;
  194. __entry->pp_bytes = pp_bytes;
  195. __entry->post_sc = post_sc;
  196. __entry->fbc_bytes = fbc_bytes;
  197. __entry->prefill_bytes = prefill_bytes;
  198. ),
  199. TP_printk(
  200. "pnum:%d latency_buf:%d ot:%d y_buf:%d y_scaler:%d pp_lines:%d, pp_bytes=%d post_sc:%d fbc_bytes:%d prefill:%d",
  201. __entry->pnum, __entry->latency_buf, __entry->ot,
  202. __entry->y_buf, __entry->y_scaler, __entry->pp_lines,
  203. __entry->pp_bytes, __entry->post_sc,
  204. __entry->fbc_bytes, __entry->prefill_bytes)
  205. );
  206. TRACE_EVENT(rot_mark_write,
  207. TP_PROTO(int pid, const char *name, bool trace_begin),
  208. TP_ARGS(pid, name, trace_begin),
  209. TP_STRUCT__entry(
  210. __field(int, pid)
  211. __string(trace_name, name)
  212. __field(bool, trace_begin)
  213. ),
  214. TP_fast_assign(
  215. __entry->pid = pid;
  216. __assign_str(trace_name, name);
  217. __entry->trace_begin = trace_begin;
  218. ),
  219. TP_printk("%s|%d|%s", __entry->trace_begin ? "B" : "E",
  220. __entry->pid, __get_str(trace_name))
  221. );
  222. TRACE_EVENT(rot_trace_counter,
  223. TP_PROTO(int pid, char *name, s64 value),
  224. TP_ARGS(pid, name, value),
  225. TP_STRUCT__entry(
  226. __field(int, pid)
  227. __string(counter_name, name)
  228. __field(s64, value)
  229. ),
  230. TP_fast_assign(
  231. __entry->pid = current->tgid;
  232. __assign_str(counter_name, name);
  233. __entry->value = value;
  234. ),
  235. TP_printk("%d|%s|%lld", __entry->pid,
  236. __get_str(counter_name), __entry->value)
  237. );
  238. TRACE_EVENT(rot_bw_ao_as_context,
  239. TP_PROTO(u32 state),
  240. TP_ARGS(state),
  241. TP_STRUCT__entry(
  242. __field(u32, state)
  243. ),
  244. TP_fast_assign(
  245. __entry->state = state;
  246. ),
  247. TP_printk("Rotator bw context %s",
  248. __entry->state ? "Active Only" : "Active+Sleep")
  249. );
  250. #define SDE_ROT_TRACE_EVTLOG_SIZE 15
  251. TRACE_EVENT(sde_rot_evtlog,
  252. TP_PROTO(const char *tag, u32 tag_id, u32 cnt, u32 *data),
  253. TP_ARGS(tag, tag_id, cnt, data),
  254. TP_STRUCT__entry(
  255. __field(int, pid)
  256. __string(evtlog_tag, tag)
  257. __field(u32, tag_id)
  258. __array(u32, data, SDE_ROT_TRACE_EVTLOG_SIZE)
  259. ),
  260. TP_fast_assign(
  261. __entry->pid = current->tgid;
  262. __assign_str(evtlog_tag, tag);
  263. __entry->tag_id = tag_id;
  264. if (cnt > SDE_ROT_TRACE_EVTLOG_SIZE)
  265. cnt = SDE_ROT_TRACE_EVTLOG_SIZE;
  266. memcpy(__entry->data, data, cnt * sizeof(u32));
  267. memset(&__entry->data[cnt], 0,
  268. (SDE_ROT_TRACE_EVTLOG_SIZE - cnt) *
  269. sizeof(u32));
  270. ),
  271. TP_printk("%d|%s:%d|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x",
  272. __entry->pid, __get_str(evtlog_tag),
  273. __entry->tag_id,
  274. __entry->data[0], __entry->data[1],
  275. __entry->data[2], __entry->data[3],
  276. __entry->data[4], __entry->data[5],
  277. __entry->data[6], __entry->data[7],
  278. __entry->data[8], __entry->data[9],
  279. __entry->data[10], __entry->data[11],
  280. __entry->data[12], __entry->data[13],
  281. __entry->data[14])
  282. )
  283. #endif /* if !defined(TRACE_SDE_ROTATOR_H) ||
  284. * defined(TRACE_HEADER_MULTI_READ)
  285. */
  286. /* This part must be outside protection */
  287. #include <trace/define_trace.h>