sde_trace.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #if !defined(_SDE_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
  6. #define _SDE_TRACE_H_
  7. #include <linux/stringify.h>
  8. #include <linux/types.h>
  9. #include <linux/tracepoint.h>
  10. #undef TRACE_SYSTEM
  11. #define TRACE_SYSTEM sde
  12. #undef TRACE_INCLUDE_FILE
  13. #define TRACE_INCLUDE_FILE sde_trace
  14. TRACE_EVENT(sde_perf_set_qos_luts,
  15. TP_PROTO(u32 pnum, u32 fmt, bool rt, u32 fl,
  16. u32 lut, u32 lut_usage),
  17. TP_ARGS(pnum, fmt, rt, fl, lut, lut_usage),
  18. TP_STRUCT__entry(
  19. __field(u32, pnum)
  20. __field(u32, fmt)
  21. __field(bool, rt)
  22. __field(u32, fl)
  23. __field(u64, lut)
  24. __field(u32, lut_usage)
  25. ),
  26. TP_fast_assign(
  27. __entry->pnum = pnum;
  28. __entry->fmt = fmt;
  29. __entry->rt = rt;
  30. __entry->fl = fl;
  31. __entry->lut = lut;
  32. __entry->lut_usage = lut_usage;
  33. ),
  34. TP_printk("pnum=%d fmt=%x rt=%d fl=%d lut=0x%llx lut_usage=%d",
  35. __entry->pnum, __entry->fmt,
  36. __entry->rt, __entry->fl,
  37. __entry->lut, __entry->lut_usage)
  38. );
  39. TRACE_EVENT(sde_perf_set_danger_luts,
  40. TP_PROTO(u32 pnum, u32 fmt, u32 mode, u32 danger_lut,
  41. u32 safe_lut),
  42. TP_ARGS(pnum, fmt, mode, danger_lut, safe_lut),
  43. TP_STRUCT__entry(
  44. __field(u32, pnum)
  45. __field(u32, fmt)
  46. __field(u32, mode)
  47. __field(u32, danger_lut)
  48. __field(u32, safe_lut)
  49. ),
  50. TP_fast_assign(
  51. __entry->pnum = pnum;
  52. __entry->fmt = fmt;
  53. __entry->mode = mode;
  54. __entry->danger_lut = danger_lut;
  55. __entry->safe_lut = safe_lut;
  56. ),
  57. TP_printk("pnum=%d fmt=%x mode=%d luts[0x%x, 0x%x]",
  58. __entry->pnum, __entry->fmt,
  59. __entry->mode, __entry->danger_lut,
  60. __entry->safe_lut)
  61. );
  62. TRACE_EVENT(sde_perf_set_ot,
  63. TP_PROTO(u32 pnum, u32 xin_id, u32 rd_lim, u32 vbif_idx),
  64. TP_ARGS(pnum, xin_id, rd_lim, vbif_idx),
  65. TP_STRUCT__entry(
  66. __field(u32, pnum)
  67. __field(u32, xin_id)
  68. __field(u32, rd_lim)
  69. __field(u32, vbif_idx)
  70. ),
  71. TP_fast_assign(
  72. __entry->pnum = pnum;
  73. __entry->xin_id = xin_id;
  74. __entry->rd_lim = rd_lim;
  75. __entry->vbif_idx = vbif_idx;
  76. ),
  77. TP_printk("pnum:%d xin_id:%d ot:%d vbif:%d",
  78. __entry->pnum, __entry->xin_id, __entry->rd_lim,
  79. __entry->vbif_idx)
  80. )
  81. TRACE_EVENT(sde_perf_update_bus,
  82. TP_PROTO(u32 bus_id, unsigned long long ab_quota,
  83. unsigned long long ib_quota),
  84. TP_ARGS(bus_id, ab_quota, ib_quota),
  85. TP_STRUCT__entry(
  86. __field(u32, bus_id);
  87. __field(u64, ab_quota)
  88. __field(u64, ib_quota)
  89. ),
  90. TP_fast_assign(
  91. __entry->bus_id = bus_id;
  92. __entry->ab_quota = ab_quota;
  93. __entry->ib_quota = ib_quota;
  94. ),
  95. TP_printk("Request bus_id:%d ab=%llu ib=%llu",
  96. __entry->bus_id,
  97. __entry->ab_quota,
  98. __entry->ib_quota)
  99. )
  100. TRACE_EVENT(sde_cmd_release_bw,
  101. TP_PROTO(u32 crtc_id),
  102. TP_ARGS(crtc_id),
  103. TP_STRUCT__entry(
  104. __field(u32, crtc_id)
  105. ),
  106. TP_fast_assign(
  107. __entry->crtc_id = crtc_id;
  108. ),
  109. TP_printk("crtc:%d", __entry->crtc_id)
  110. );
  111. TRACE_EVENT(sde_encoder_underrun,
  112. TP_PROTO(u32 enc_id, u32 underrun_cnt),
  113. TP_ARGS(enc_id, underrun_cnt),
  114. TP_STRUCT__entry(
  115. __field(u32, enc_id)
  116. __field(u32, underrun_cnt)
  117. ),
  118. TP_fast_assign(
  119. __entry->enc_id = enc_id;
  120. __entry->underrun_cnt = underrun_cnt;
  121. ),
  122. TP_printk("enc:%d underrun_cnt:%d", __entry->enc_id,
  123. __entry->underrun_cnt)
  124. );
  125. TRACE_EVENT(tracing_mark_write,
  126. TP_PROTO(char trace_type, int pid, const char *name, int value),
  127. TP_ARGS(trace_type, pid, name, value),
  128. TP_STRUCT__entry(
  129. __field(char, trace_type)
  130. __field(int, pid)
  131. __string(trace_name, name)
  132. __field(int, value)
  133. ),
  134. TP_fast_assign(
  135. __entry->trace_type = trace_type;
  136. __entry->pid = pid;
  137. __assign_str(trace_name, name);
  138. __entry->value = value;
  139. ),
  140. TP_printk("%c|%d|%s|%d", __entry->trace_type,
  141. __entry->pid, __get_str(trace_name), __entry->value)
  142. )
  143. #define SDE_TRACE_EVTLOG_SIZE 15
  144. TRACE_EVENT(sde_evtlog,
  145. TP_PROTO(const char *tag, u32 tag_id, u32 cnt, u32 *data),
  146. TP_ARGS(tag, tag_id, cnt, data),
  147. TP_STRUCT__entry(
  148. __field(int, pid)
  149. __string(evtlog_tag, tag)
  150. __field(u32, tag_id)
  151. __array(u32, data, SDE_TRACE_EVTLOG_SIZE)
  152. ),
  153. TP_fast_assign(
  154. __entry->pid = current->tgid;
  155. __assign_str(evtlog_tag, tag);
  156. __entry->tag_id = tag_id;
  157. if (cnt > SDE_TRACE_EVTLOG_SIZE)
  158. cnt = SDE_TRACE_EVTLOG_SIZE;
  159. memcpy(__entry->data, data, cnt * sizeof(u32));
  160. memset(&__entry->data[cnt], 0,
  161. (SDE_TRACE_EVTLOG_SIZE - cnt) * sizeof(u32));
  162. ),
  163. TP_printk("%d|%s:%d|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x",
  164. __entry->pid, __get_str(evtlog_tag),
  165. __entry->tag_id,
  166. __entry->data[0], __entry->data[1],
  167. __entry->data[2], __entry->data[3],
  168. __entry->data[4], __entry->data[5],
  169. __entry->data[6], __entry->data[7],
  170. __entry->data[8], __entry->data[9],
  171. __entry->data[10], __entry->data[11],
  172. __entry->data[12], __entry->data[13],
  173. __entry->data[14])
  174. )
  175. TRACE_EVENT(sde_perf_crtc_update,
  176. TP_PROTO(u32 crtc,
  177. u64 bw_ctl_mnoc, u64 per_pipe_ib_mnoc,
  178. u64 bw_ctl_llcc, u64 per_pipe_ib_llcc,
  179. u64 bw_ctl_ebi, u64 per_pipe_ib_ebi,
  180. u32 core_clk_rate, bool stop_req,
  181. u32 update_bus, u32 update_clk, int params),
  182. TP_ARGS(crtc,
  183. bw_ctl_mnoc, per_pipe_ib_mnoc,
  184. bw_ctl_llcc, per_pipe_ib_llcc,
  185. bw_ctl_ebi, per_pipe_ib_ebi,
  186. core_clk_rate, stop_req,
  187. update_bus, update_clk, params),
  188. TP_STRUCT__entry(
  189. __field(u32, crtc)
  190. __field(u64, bw_ctl_mnoc)
  191. __field(u64, per_pipe_ib_mnoc)
  192. __field(u64, bw_ctl_llcc)
  193. __field(u64, per_pipe_ib_llcc)
  194. __field(u64, bw_ctl_ebi)
  195. __field(u64, per_pipe_ib_ebi)
  196. __field(u32, core_clk_rate)
  197. __field(bool, stop_req)
  198. __field(u32, update_bus)
  199. __field(u32, update_clk)
  200. __field(int, params)
  201. ),
  202. TP_fast_assign(
  203. __entry->crtc = crtc;
  204. __entry->bw_ctl_mnoc = bw_ctl_mnoc;
  205. __entry->per_pipe_ib_mnoc = per_pipe_ib_mnoc;
  206. __entry->bw_ctl_llcc = bw_ctl_llcc;
  207. __entry->per_pipe_ib_llcc = per_pipe_ib_llcc;
  208. __entry->bw_ctl_ebi = bw_ctl_ebi;
  209. __entry->per_pipe_ib_ebi = per_pipe_ib_ebi;
  210. __entry->core_clk_rate = core_clk_rate;
  211. __entry->stop_req = stop_req;
  212. __entry->update_bus = update_bus;
  213. __entry->update_clk = update_clk;
  214. __entry->params = params;
  215. ),
  216. TP_printk(
  217. "crtc=%d mnoc=[%llu %llu] llcc=[%llu %llu] ebi=[%llu %llu] clk=%u stop=%d ubus=%d uclk=%d %d",
  218. __entry->crtc,
  219. __entry->bw_ctl_mnoc,
  220. __entry->per_pipe_ib_mnoc,
  221. __entry->bw_ctl_llcc,
  222. __entry->per_pipe_ib_llcc,
  223. __entry->bw_ctl_ebi,
  224. __entry->per_pipe_ib_ebi,
  225. __entry->core_clk_rate,
  226. __entry->stop_req,
  227. __entry->update_bus,
  228. __entry->update_clk,
  229. __entry->params)
  230. );
  231. TRACE_EVENT(sde_perf_calc_crtc,
  232. TP_PROTO(u32 crtc,
  233. u64 bw_ctl_mnoc,
  234. u64 bw_ctl_llcc,
  235. u64 bw_ctl_ebi,
  236. u64 ib_mnoc,
  237. u64 ib_llcc,
  238. u64 ib_ebi,
  239. u32 core_clk_rate
  240. ),
  241. TP_ARGS(crtc,
  242. bw_ctl_mnoc,
  243. bw_ctl_llcc,
  244. bw_ctl_ebi,
  245. ib_mnoc,
  246. ib_llcc,
  247. ib_ebi,
  248. core_clk_rate),
  249. TP_STRUCT__entry(
  250. __field(u32, crtc)
  251. __field(u64, bw_ctl_mnoc)
  252. __field(u64, bw_ctl_llcc)
  253. __field(u64, bw_ctl_ebi)
  254. __field(u64, ib_mnoc)
  255. __field(u64, ib_llcc)
  256. __field(u64, ib_ebi)
  257. __field(u32, core_clk_rate)
  258. ),
  259. TP_fast_assign(
  260. __entry->crtc = crtc;
  261. __entry->bw_ctl_mnoc = bw_ctl_mnoc;
  262. __entry->bw_ctl_llcc = bw_ctl_llcc;
  263. __entry->bw_ctl_ebi = bw_ctl_ebi;
  264. __entry->ib_mnoc = ib_mnoc;
  265. __entry->ib_llcc = ib_llcc;
  266. __entry->ib_ebi = ib_ebi;
  267. __entry->core_clk_rate = core_clk_rate;
  268. ),
  269. TP_printk(
  270. "crtc=%d mnoc=[%llu, %llu] llcc=[%llu %llu] ebi=[%llu, %llu] clk_rate=%u",
  271. __entry->crtc,
  272. __entry->bw_ctl_mnoc,
  273. __entry->ib_mnoc,
  274. __entry->bw_ctl_llcc,
  275. __entry->ib_llcc,
  276. __entry->bw_ctl_ebi,
  277. __entry->ib_ebi,
  278. __entry->core_clk_rate)
  279. );
  280. TRACE_EVENT(sde_perf_uidle_cntr,
  281. TP_PROTO(u32 crtc,
  282. u32 fal1_gate_cntr,
  283. u32 fal10_gate_cntr,
  284. u32 fal_wait_gate_cntr,
  285. u32 fal1_num_transitions_cntr,
  286. u32 fal10_num_transitions_cntr,
  287. u32 min_gate_cntr,
  288. u32 max_gate_cntr
  289. ),
  290. TP_ARGS(crtc,
  291. fal1_gate_cntr,
  292. fal10_gate_cntr,
  293. fal_wait_gate_cntr,
  294. fal1_num_transitions_cntr,
  295. fal10_num_transitions_cntr,
  296. min_gate_cntr,
  297. max_gate_cntr),
  298. TP_STRUCT__entry(
  299. __field(u32, crtc)
  300. __field(u32, fal1_gate_cntr)
  301. __field(u32, fal10_gate_cntr)
  302. __field(u32, fal_wait_gate_cntr)
  303. __field(u32, fal1_num_transitions_cntr)
  304. __field(u32, fal10_num_transitions_cntr)
  305. __field(u32, min_gate_cntr)
  306. __field(u32, max_gate_cntr)
  307. ),
  308. TP_fast_assign(
  309. __entry->crtc = crtc;
  310. __entry->fal1_gate_cntr = fal1_gate_cntr;
  311. __entry->fal10_gate_cntr = fal10_gate_cntr;
  312. __entry->fal_wait_gate_cntr = fal_wait_gate_cntr;
  313. __entry->fal1_num_transitions_cntr =
  314. fal1_num_transitions_cntr;
  315. __entry->fal10_num_transitions_cntr =
  316. fal10_num_transitions_cntr;
  317. __entry->min_gate_cntr = min_gate_cntr;
  318. __entry->max_gate_cntr = max_gate_cntr;
  319. ),
  320. TP_printk(
  321. "crtc:%d gate:fal1=%d fal10=%d wait=%d min=%d max=%d trns:fal1=%d fal10=%d",
  322. __entry->crtc,
  323. __entry->fal1_gate_cntr,
  324. __entry->fal10_gate_cntr,
  325. __entry->fal_wait_gate_cntr,
  326. __entry->min_gate_cntr,
  327. __entry->max_gate_cntr,
  328. __entry->fal1_num_transitions_cntr,
  329. __entry->fal10_num_transitions_cntr
  330. )
  331. );
  332. TRACE_EVENT(sde_perf_uidle_status,
  333. TP_PROTO(u32 crtc,
  334. u32 uidle_danger_status_0,
  335. u32 uidle_danger_status_1,
  336. u32 uidle_safe_status_0,
  337. u32 uidle_safe_status_1,
  338. u32 uidle_idle_status_0,
  339. u32 uidle_idle_status_1,
  340. u32 uidle_fal_status_0,
  341. u32 uidle_fal_status_1),
  342. TP_ARGS(crtc,
  343. uidle_danger_status_0,
  344. uidle_danger_status_1,
  345. uidle_safe_status_0,
  346. uidle_safe_status_1,
  347. uidle_idle_status_0,
  348. uidle_idle_status_1,
  349. uidle_fal_status_0,
  350. uidle_fal_status_1),
  351. TP_STRUCT__entry(
  352. __field(u32, crtc)
  353. __field(u32, uidle_danger_status_0)
  354. __field(u32, uidle_danger_status_1)
  355. __field(u32, uidle_safe_status_0)
  356. __field(u32, uidle_safe_status_1)
  357. __field(u32, uidle_idle_status_0)
  358. __field(u32, uidle_idle_status_1)
  359. __field(u32, uidle_fal_status_0)
  360. __field(u32, uidle_fal_status_1)),
  361. TP_fast_assign(
  362. __entry->crtc = crtc;
  363. __entry->uidle_danger_status_0 = uidle_danger_status_0;
  364. __entry->uidle_danger_status_1 = uidle_danger_status_1;
  365. __entry->uidle_safe_status_0 = uidle_safe_status_0;
  366. __entry->uidle_safe_status_1 = uidle_safe_status_1;
  367. __entry->uidle_idle_status_0 = uidle_idle_status_0;
  368. __entry->uidle_idle_status_1 = uidle_idle_status_1;
  369. __entry->uidle_fal_status_0 = uidle_fal_status_0;
  370. __entry->uidle_fal_status_1 = uidle_fal_status_1;),
  371. TP_printk(
  372. "crtc:%d danger[%d, %d] safe[%d, %d] idle[%d, %d] fal[%d, %d]",
  373. __entry->crtc,
  374. __entry->uidle_danger_status_0,
  375. __entry->uidle_danger_status_1,
  376. __entry->uidle_safe_status_0,
  377. __entry->uidle_safe_status_1,
  378. __entry->uidle_idle_status_0,
  379. __entry->uidle_idle_status_1,
  380. __entry->uidle_fal_status_0,
  381. __entry->uidle_fal_status_1
  382. )
  383. );
  384. #define SDE_ATRACE_END(name) \
  385. trace_tracing_mark_write('E', current->tgid, name, 0)
  386. #define SDE_ATRACE_BEGIN(name) \
  387. trace_tracing_mark_write('B', current->tgid, name, 0)
  388. #define SDE_ATRACE_FUNC() SDE_ATRACE_BEGIN(__func__)
  389. #define SDE_ATRACE_INT(name, value) \
  390. trace_tracing_mark_write('C', current->tgid, name, value)
  391. #endif /* _SDE_TRACE_H_ */
  392. /* This part must be outside protection */
  393. #undef TRACE_INCLUDE_PATH
  394. #define TRACE_INCLUDE_PATH .
  395. #include <trace/define_trace.h>