sde_trace.h 11 KB

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