sde_trace.h 13 KB

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