adreno_trace.h 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #if !defined(_ADRENO_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  7. #define _ADRENO_TRACE_H
  8. #undef TRACE_SYSTEM
  9. #define TRACE_SYSTEM kgsl
  10. #undef TRACE_INCLUDE_PATH
  11. #define TRACE_INCLUDE_PATH .
  12. #undef TRACE_INCLUDE_FILE
  13. #define TRACE_INCLUDE_FILE adreno_trace
  14. #include <linux/tracepoint.h>
  15. #include "adreno_a3xx.h"
  16. #include "adreno_a5xx.h"
  17. #include "adreno_gen7.h"
  18. #include "adreno_gen8.h"
  19. #include "adreno_hfi.h"
  20. #define ADRENO_FT_TYPES \
  21. { BIT(KGSL_FT_OFF), "off" }, \
  22. { BIT(KGSL_FT_REPLAY), "replay" }, \
  23. { BIT(KGSL_FT_SKIPIB), "skipib" }, \
  24. { BIT(KGSL_FT_SKIPFRAME), "skipframe" }, \
  25. { BIT(KGSL_FT_DISABLE), "disable" }, \
  26. { BIT(KGSL_FT_TEMP_DISABLE), "temp" }, \
  27. { BIT(KGSL_FT_THROTTLE), "throttle"}, \
  28. { BIT(KGSL_FT_SKIPCMD), "skipcmd" }
  29. TRACE_EVENT(adreno_cmdbatch_queued,
  30. TP_PROTO(struct kgsl_drawobj *drawobj, unsigned int queued),
  31. TP_ARGS(drawobj, queued),
  32. TP_STRUCT__entry(
  33. __field(unsigned int, id)
  34. __field(unsigned int, timestamp)
  35. __field(unsigned int, queued)
  36. __field(unsigned int, flags)
  37. __field(unsigned int, prio)
  38. ),
  39. TP_fast_assign(
  40. __entry->id = drawobj->context->id;
  41. __entry->timestamp = drawobj->timestamp;
  42. __entry->queued = queued;
  43. __entry->flags = drawobj->flags;
  44. __entry->prio = drawobj->context->priority;
  45. ),
  46. TP_printk(
  47. "ctx=%u ctx_prio=%u ts=%u queued=%u flags=%s",
  48. __entry->id, __entry->prio,
  49. __entry->timestamp, __entry->queued,
  50. __entry->flags ? __print_flags(__entry->flags, "|",
  51. KGSL_DRAWOBJ_FLAGS) : "none"
  52. )
  53. );
  54. TRACE_EVENT(adreno_hw_fence_query,
  55. TP_PROTO(u64 context, u64 seqno, u32 flags, const char *name, const char *val),
  56. TP_ARGS(context, seqno, flags, name, val),
  57. TP_STRUCT__entry(
  58. __field(u64, context)
  59. __field(u64, seqno)
  60. __field(u32, flags)
  61. __string(fence_name, name)
  62. __string(val, val)
  63. ),
  64. TP_fast_assign(
  65. __entry->context = context;
  66. __entry->seqno = seqno;
  67. __entry->flags = flags;
  68. __assign_str(fence_name, name);
  69. __assign_str(val, val);
  70. ),
  71. TP_printk(
  72. "id=%lld seqno=%lld sw_status=%s name=%s val=%s",
  73. __entry->context, __entry->seqno,
  74. __entry->flags ? __print_flags(__entry->flags, "|",
  75. { ADRENO_HW_FENCE_SW_STATUS_PENDING, "PENDING" },
  76. { ADRENO_HW_FENCE_SW_STATUS_SIGNALED, "SIGNALED" }) : "none",
  77. __get_str(fence_name),
  78. __get_str(val))
  79. );
  80. TRACE_EVENT(adreno_input_hw_fence,
  81. TP_PROTO(u32 id, u64 context, u64 seqno, u64 flags, const char *name),
  82. TP_ARGS(id, context, seqno, flags, name),
  83. TP_STRUCT__entry(
  84. __field(u32, id)
  85. __field(u64, context)
  86. __field(u64, seqno)
  87. __field(u64, flags)
  88. __string(fence_name, name)
  89. ),
  90. TP_fast_assign(
  91. __entry->id = id;
  92. __entry->context = context;
  93. __entry->seqno = seqno;
  94. __entry->flags = flags;
  95. __assign_str(fence_name, name);
  96. ),
  97. TP_printk(
  98. "ctx=%u id=%lld seqno=%lld flags=%s name=%s",
  99. __entry->id, __entry->context, __entry->seqno,
  100. __entry->flags ? __print_flags(__entry->flags, "|",
  101. GMU_SYNCOBJ_FLAGS) : "none",
  102. __get_str(fence_name))
  103. );
  104. TRACE_EVENT(adreno_syncobj_query_reply,
  105. TP_PROTO(u32 id, u32 timestamp, uint64_t ticks),
  106. TP_ARGS(id, timestamp, ticks),
  107. TP_STRUCT__entry(
  108. __field(u32, id)
  109. __field(u32, timestamp)
  110. __field(uint64_t, ticks)
  111. ),
  112. TP_fast_assign(
  113. __entry->id = id;
  114. __entry->timestamp = timestamp;
  115. __entry->ticks = ticks;
  116. ),
  117. TP_printk(
  118. "ctx=%u ts=%u ticks=%lld",
  119. __entry->id, __entry->timestamp, __entry->ticks)
  120. );
  121. TRACE_EVENT(adreno_syncobj_query,
  122. TP_PROTO(u32 id, u32 timestamp, uint64_t ticks),
  123. TP_ARGS(id, timestamp, ticks),
  124. TP_STRUCT__entry(
  125. __field(u32, id)
  126. __field(u32, timestamp)
  127. __field(uint64_t, ticks)
  128. ),
  129. TP_fast_assign(
  130. __entry->id = id;
  131. __entry->timestamp = timestamp;
  132. __entry->ticks = ticks;
  133. ),
  134. TP_printk(
  135. "ctx=%u ts=%u ticks=%lld",
  136. __entry->id, __entry->timestamp, __entry->ticks)
  137. );
  138. TRACE_EVENT(adreno_syncobj_submitted,
  139. TP_PROTO(u32 id, u32 timestamp, u32 num_syncobj,
  140. uint64_t ticks),
  141. TP_ARGS(id, timestamp, num_syncobj, ticks),
  142. TP_STRUCT__entry(
  143. __field(u32, id)
  144. __field(u32, timestamp)
  145. __field(u32, num_syncobj)
  146. __field(uint64_t, ticks)
  147. ),
  148. TP_fast_assign(
  149. __entry->id = id;
  150. __entry->timestamp = timestamp;
  151. __entry->num_syncobj = num_syncobj;
  152. __entry->ticks = ticks;
  153. ),
  154. TP_printk(
  155. "ctx=%u ts=%u num_sync=%u ticks=%lld",
  156. __entry->id, __entry->timestamp, __entry->num_syncobj, __entry->ticks)
  157. );
  158. TRACE_EVENT(adreno_syncobj_retired,
  159. TP_PROTO(u32 id, u32 timestamp),
  160. TP_ARGS(id, timestamp),
  161. TP_STRUCT__entry(
  162. __field(u32, id)
  163. __field(u32, timestamp)
  164. ),
  165. TP_fast_assign(
  166. __entry->id = id;
  167. __entry->timestamp = timestamp;
  168. ),
  169. TP_printk(
  170. "ctx=%u ts=%u", __entry->id, __entry->timestamp)
  171. );
  172. TRACE_EVENT(adreno_cmdbatch_submitted,
  173. TP_PROTO(struct kgsl_drawobj *drawobj, struct submission_info *info,
  174. uint64_t ticks, unsigned long secs, unsigned long usecs,
  175. int q_inflight),
  176. TP_ARGS(drawobj, info, ticks, secs, usecs, q_inflight),
  177. TP_STRUCT__entry(
  178. __field(unsigned int, id)
  179. __field(unsigned int, timestamp)
  180. __field(int, inflight)
  181. __field(unsigned int, flags)
  182. __field(uint64_t, ticks)
  183. __field(unsigned long, secs)
  184. __field(unsigned long, usecs)
  185. __field(int, prio)
  186. __field(int, rb_id)
  187. __field(unsigned int, rptr)
  188. __field(unsigned int, wptr)
  189. __field(int, q_inflight)
  190. __field(int, dispatch_queue)
  191. ),
  192. TP_fast_assign(
  193. __entry->id = drawobj->context->id;
  194. __entry->timestamp = drawobj->timestamp;
  195. __entry->inflight = info->inflight;
  196. __entry->flags = drawobj->flags;
  197. __entry->ticks = ticks;
  198. __entry->secs = secs;
  199. __entry->usecs = usecs;
  200. __entry->prio = drawobj->context->priority;
  201. __entry->rb_id = info->rb_id;
  202. __entry->rptr = info->rptr;
  203. __entry->wptr = info->wptr;
  204. __entry->q_inflight = q_inflight;
  205. __entry->dispatch_queue = info->gmu_dispatch_queue;
  206. ),
  207. TP_printk(
  208. "ctx=%u ctx_prio=%d ts=%u inflight=%d flags=%s ticks=%lld time=%lu.%0lu rb_id=%d r/w=%x/%x, q_inflight=%d dq_id=%d",
  209. __entry->id, __entry->prio, __entry->timestamp,
  210. __entry->inflight,
  211. __entry->flags ? __print_flags(__entry->flags, "|",
  212. KGSL_DRAWOBJ_FLAGS) : "none",
  213. __entry->ticks, __entry->secs, __entry->usecs,
  214. __entry->rb_id, __entry->rptr, __entry->wptr,
  215. __entry->q_inflight, __entry->dispatch_queue
  216. )
  217. );
  218. TRACE_EVENT(adreno_cmdbatch_retired,
  219. TP_PROTO(struct kgsl_context *context, struct retire_info *info,
  220. unsigned int flags, int q_inflight,
  221. unsigned long fault_recovery),
  222. TP_ARGS(context, info, flags, q_inflight, fault_recovery),
  223. TP_STRUCT__entry(
  224. __field(unsigned int, id)
  225. __field(unsigned int, timestamp)
  226. __field(int, inflight)
  227. __field(unsigned int, recovery)
  228. __field(unsigned int, flags)
  229. __field(uint64_t, start)
  230. __field(uint64_t, retire)
  231. __field(int, prio)
  232. __field(int, rb_id)
  233. __field(unsigned int, rptr)
  234. __field(unsigned int, wptr)
  235. __field(int, q_inflight)
  236. __field(unsigned long, fault_recovery)
  237. __field(unsigned int, dispatch_queue)
  238. __field(uint64_t, submitted_to_rb)
  239. __field(uint64_t, retired_on_gmu)
  240. __field(uint64_t, active)
  241. ),
  242. TP_fast_assign(
  243. __entry->id = context->id;
  244. __entry->timestamp = info->timestamp;
  245. __entry->inflight = info->inflight;
  246. __entry->recovery = fault_recovery;
  247. __entry->flags = flags;
  248. __entry->start = info->sop;
  249. __entry->retire = info->eop;
  250. __entry->prio = context->priority;
  251. __entry->rb_id = info->rb_id;
  252. __entry->rptr = info->rptr;
  253. __entry->wptr = info->wptr;
  254. __entry->q_inflight = q_inflight;
  255. __entry->dispatch_queue = info->gmu_dispatch_queue;
  256. __entry->submitted_to_rb = info->submitted_to_rb;
  257. __entry->retired_on_gmu = info->retired_on_gmu;
  258. __entry->active = info->active;
  259. ),
  260. TP_printk(
  261. "ctx=%u ctx_prio=%d ts=%u inflight=%d recovery=%s flags=%s start=%llu retire=%llu rb_id=%d, r/w=%x/%x, q_inflight=%d, dq_id=%u, submitted_to_rb=%llu retired_on_gmu=%llu active=%llu",
  262. __entry->id, __entry->prio, __entry->timestamp,
  263. __entry->inflight,
  264. __entry->recovery ?
  265. __print_flags(__entry->fault_recovery, "|",
  266. ADRENO_FT_TYPES) : "none",
  267. __entry->flags ? __print_flags(__entry->flags, "|",
  268. KGSL_DRAWOBJ_FLAGS) : "none",
  269. __entry->start,
  270. __entry->retire,
  271. __entry->rb_id, __entry->rptr, __entry->wptr,
  272. __entry->q_inflight,
  273. __entry->dispatch_queue,
  274. __entry->submitted_to_rb, __entry->retired_on_gmu,
  275. __entry->active
  276. )
  277. );
  278. TRACE_EVENT(gmu_ao_sync,
  279. TP_PROTO(u64 ticks),
  280. TP_ARGS(ticks),
  281. TP_STRUCT__entry(
  282. __field(u64, ticks)
  283. ),
  284. TP_fast_assign(
  285. __entry->ticks = ticks;
  286. ),
  287. TP_printk(
  288. "ticks=%llu", __entry->ticks
  289. )
  290. );
  291. TRACE_EVENT(gmu_event,
  292. TP_PROTO(u32 *event_info),
  293. TP_ARGS(event_info),
  294. TP_STRUCT__entry(
  295. __field(u32, event)
  296. __field(u32, ticks)
  297. __field(u32, data1)
  298. __field(u32, data2)
  299. ),
  300. TP_fast_assign(
  301. __entry->event = event_info[0];
  302. __entry->ticks = event_info[1];
  303. __entry->data1 = event_info[2];
  304. __entry->data2 = event_info[3];
  305. ),
  306. TP_printk(
  307. "event=%08u ticks=%08u data1=0x%08x data2=0x%08x",
  308. __entry->event, __entry->ticks, __entry->data1, __entry->data2
  309. )
  310. );
  311. TRACE_EVENT(adreno_cmdbatch_sync,
  312. TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
  313. unsigned int timestamp, uint64_t ticks),
  314. TP_ARGS(ctx_id, ctx_prio, timestamp, ticks),
  315. TP_STRUCT__entry(
  316. __field(unsigned int, id)
  317. __field(unsigned int, timestamp)
  318. __field(uint64_t, ticks)
  319. __field(int, prio)
  320. ),
  321. TP_fast_assign(
  322. __entry->id = ctx_id;
  323. __entry->timestamp = timestamp;
  324. __entry->ticks = ticks;
  325. __entry->prio = ctx_prio;
  326. ),
  327. TP_printk(
  328. "ctx=%u ctx_prio=%d ts=%u ticks=%lld",
  329. __entry->id, __entry->prio, __entry->timestamp,
  330. __entry->ticks
  331. )
  332. );
  333. TRACE_EVENT(adreno_cmdbatch_ready,
  334. TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
  335. unsigned int timestamp, unsigned int requeue_cnt),
  336. TP_ARGS(ctx_id, ctx_prio, timestamp, requeue_cnt),
  337. TP_STRUCT__entry(
  338. __field(unsigned int, id)
  339. __field(int, prio)
  340. __field(unsigned int, timestamp)
  341. __field(unsigned int, requeue_cnt)
  342. ),
  343. TP_fast_assign(
  344. __entry->id = ctx_id;
  345. __entry->prio = ctx_prio;
  346. __entry->timestamp = timestamp;
  347. __entry->requeue_cnt = requeue_cnt;
  348. ),
  349. TP_printk(
  350. "ctx=%u ctx_prio=%d ts=%u requeue_cnt=%u",
  351. __entry->id, __entry->prio, __entry->timestamp,
  352. __entry->requeue_cnt
  353. )
  354. );
  355. TRACE_EVENT(adreno_cmdbatch_done,
  356. TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
  357. unsigned int timestamp),
  358. TP_ARGS(ctx_id, ctx_prio, timestamp),
  359. TP_STRUCT__entry(
  360. __field(unsigned int, id)
  361. __field(unsigned int, prio)
  362. __field(unsigned int, timestamp)
  363. ),
  364. TP_fast_assign(
  365. __entry->id = ctx_id;
  366. __entry->prio = ctx_prio;
  367. __entry->timestamp = timestamp;
  368. ),
  369. TP_printk(
  370. "ctx=%u ctx_prio=%u ts=%u",
  371. __entry->id, __entry->prio, __entry->timestamp
  372. )
  373. );
  374. TRACE_EVENT(adreno_cmdbatch_fault,
  375. TP_PROTO(struct kgsl_drawobj_cmd *cmdobj, unsigned int fault),
  376. TP_ARGS(cmdobj, fault),
  377. TP_STRUCT__entry(
  378. __field(unsigned int, id)
  379. __field(unsigned int, timestamp)
  380. __field(unsigned int, fault)
  381. ),
  382. TP_fast_assign(
  383. __entry->id = cmdobj->base.context->id;
  384. __entry->timestamp = cmdobj->base.timestamp;
  385. __entry->fault = fault;
  386. ),
  387. TP_printk(
  388. "ctx=%u ts=%u type=%s",
  389. __entry->id, __entry->timestamp,
  390. __print_symbolic(__entry->fault,
  391. { 0, "none" },
  392. { ADRENO_SOFT_FAULT, "soft" },
  393. { ADRENO_HARD_FAULT, "hard" },
  394. { ADRENO_TIMEOUT_FAULT, "timeout" })
  395. )
  396. );
  397. TRACE_EVENT(adreno_cmdbatch_recovery,
  398. TP_PROTO(struct kgsl_drawobj_cmd *cmdobj, unsigned int action),
  399. TP_ARGS(cmdobj, action),
  400. TP_STRUCT__entry(
  401. __field(unsigned int, id)
  402. __field(unsigned int, timestamp)
  403. __field(unsigned int, action)
  404. ),
  405. TP_fast_assign(
  406. __entry->id = cmdobj->base.context->id;
  407. __entry->timestamp = cmdobj->base.timestamp;
  408. __entry->action = action;
  409. ),
  410. TP_printk(
  411. "ctx=%u ts=%u action=%s",
  412. __entry->id, __entry->timestamp,
  413. __print_symbolic(__entry->action, ADRENO_FT_TYPES)
  414. )
  415. );
  416. DECLARE_EVENT_CLASS(adreno_drawctxt_template,
  417. TP_PROTO(struct adreno_context *drawctxt),
  418. TP_ARGS(drawctxt),
  419. TP_STRUCT__entry(
  420. __field(unsigned int, id)
  421. __field(unsigned int, priority)
  422. ),
  423. TP_fast_assign(
  424. __entry->id = drawctxt->base.id;
  425. __entry->priority = drawctxt->base.priority;
  426. ),
  427. TP_printk("ctx=%u priority=%u", __entry->id, __entry->priority)
  428. );
  429. DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_sleep,
  430. TP_PROTO(struct adreno_context *drawctxt),
  431. TP_ARGS(drawctxt)
  432. );
  433. DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_wake,
  434. TP_PROTO(struct adreno_context *drawctxt),
  435. TP_ARGS(drawctxt)
  436. );
  437. DEFINE_EVENT(adreno_drawctxt_template, dispatch_queue_context,
  438. TP_PROTO(struct adreno_context *drawctxt),
  439. TP_ARGS(drawctxt)
  440. );
  441. DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_invalidate,
  442. TP_PROTO(struct adreno_context *drawctxt),
  443. TP_ARGS(drawctxt)
  444. );
  445. TRACE_EVENT(adreno_drawctxt_wait_start,
  446. TP_PROTO(unsigned int rb_id, unsigned int ctx_id, unsigned int ts),
  447. TP_ARGS(rb_id, ctx_id, ts),
  448. TP_STRUCT__entry(
  449. __field(unsigned int, rb_id)
  450. __field(unsigned int, ctx_id)
  451. __field(unsigned int, ts)
  452. ),
  453. TP_fast_assign(
  454. __entry->rb_id = rb_id;
  455. __entry->ctx_id = ctx_id;
  456. __entry->ts = ts;
  457. ),
  458. TP_printk(
  459. "rb=%u ctx=%u ts=%u",
  460. __entry->rb_id, __entry->ctx_id, __entry->ts
  461. )
  462. );
  463. TRACE_EVENT(adreno_drawctxt_wait_done,
  464. TP_PROTO(unsigned int rb_id, unsigned int ctx_id,
  465. unsigned int ts, int status),
  466. TP_ARGS(rb_id, ctx_id, ts, status),
  467. TP_STRUCT__entry(
  468. __field(unsigned int, rb_id)
  469. __field(unsigned int, ctx_id)
  470. __field(unsigned int, ts)
  471. __field(int, status)
  472. ),
  473. TP_fast_assign(
  474. __entry->rb_id = rb_id;
  475. __entry->ctx_id = ctx_id;
  476. __entry->ts = ts;
  477. __entry->status = status;
  478. ),
  479. TP_printk(
  480. "rb=%u ctx=%u ts=%u status=%d",
  481. __entry->rb_id, __entry->ctx_id, __entry->ts, __entry->status
  482. )
  483. );
  484. TRACE_EVENT(adreno_drawctxt_switch,
  485. TP_PROTO(struct adreno_ringbuffer *rb,
  486. struct adreno_context *newctx),
  487. TP_ARGS(rb, newctx),
  488. TP_STRUCT__entry(
  489. __field(int, rb_level)
  490. __field(unsigned int, oldctx)
  491. __field(unsigned int, newctx)
  492. __field(unsigned int, flags)
  493. ),
  494. TP_fast_assign(
  495. __entry->rb_level = rb->id;
  496. __entry->oldctx = rb->drawctxt_active ?
  497. rb->drawctxt_active->base.id : 0;
  498. __entry->newctx = newctx ? newctx->base.id : 0;
  499. ),
  500. TP_printk(
  501. "rb level=%d oldctx=%u newctx=%u",
  502. __entry->rb_level, __entry->oldctx, __entry->newctx
  503. )
  504. );
  505. TRACE_EVENT(adreno_gpu_fault,
  506. TP_PROTO(unsigned int ctx, unsigned int ts,
  507. unsigned int status, unsigned int rptr, unsigned int wptr,
  508. u64 ib1base, unsigned int ib1size,
  509. u64 ib2base, unsigned int ib2size, int rb_id),
  510. TP_ARGS(ctx, ts, status, rptr, wptr, ib1base, ib1size, ib2base,
  511. ib2size, rb_id),
  512. TP_STRUCT__entry(
  513. __field(unsigned int, ctx)
  514. __field(unsigned int, ts)
  515. __field(unsigned int, status)
  516. __field(unsigned int, rptr)
  517. __field(unsigned int, wptr)
  518. __field(u64, ib1base)
  519. __field(unsigned int, ib1size)
  520. __field(u64, ib2base)
  521. __field(unsigned int, ib2size)
  522. __field(int, rb_id)
  523. ),
  524. TP_fast_assign(
  525. __entry->ctx = ctx;
  526. __entry->ts = ts;
  527. __entry->status = status;
  528. __entry->rptr = rptr;
  529. __entry->wptr = wptr;
  530. __entry->ib1base = ib1base;
  531. __entry->ib1size = ib1size;
  532. __entry->ib2base = ib2base;
  533. __entry->ib2size = ib2size;
  534. __entry->rb_id = rb_id;
  535. ),
  536. TP_printk(
  537. "ctx=%d ts=%d rb_id=%d status=%X RB=%X/%X IB1=%llX/%X IB2=%llX/%X",
  538. __entry->ctx, __entry->ts, __entry->rb_id, __entry->status,
  539. __entry->wptr, __entry->rptr, __entry->ib1base,
  540. __entry->ib1size, __entry->ib2base, __entry->ib2size)
  541. );
  542. TRACE_EVENT(adreno_sp_tp,
  543. TP_PROTO(unsigned long ip),
  544. TP_ARGS(ip),
  545. TP_STRUCT__entry(
  546. __field(unsigned long, ip)
  547. ),
  548. TP_fast_assign(
  549. __entry->ip = ip;
  550. ),
  551. TP_printk(
  552. "func=%pS", (void *) __entry->ip
  553. )
  554. );
  555. /*
  556. * Tracepoint for a3xx irq. Includes status info
  557. */
  558. TRACE_EVENT(kgsl_a3xx_irq_status,
  559. TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
  560. TP_ARGS(adreno_dev, status),
  561. TP_STRUCT__entry(
  562. __string(device_name, adreno_dev->dev.name)
  563. __field(unsigned int, status)
  564. ),
  565. TP_fast_assign(
  566. __assign_str(device_name, adreno_dev->dev.name);
  567. __entry->status = status;
  568. ),
  569. TP_printk(
  570. "d_name=%s status=%s",
  571. __get_str(device_name),
  572. __entry->status ? __print_flags(__entry->status, "|",
  573. { BIT(A3XX_INT_RBBM_GPU_IDLE), "RBBM_GPU_IDLE" },
  574. { BIT(A3XX_INT_RBBM_AHB_ERROR), "RBBM_AHB_ERR" },
  575. { BIT(A3XX_INT_RBBM_REG_TIMEOUT), "RBBM_REG_TIMEOUT" },
  576. { BIT(A3XX_INT_RBBM_ME_MS_TIMEOUT),
  577. "RBBM_ME_MS_TIMEOUT" },
  578. { BIT(A3XX_INT_RBBM_PFP_MS_TIMEOUT),
  579. "RBBM_PFP_MS_TIMEOUT" },
  580. { BIT(A3XX_INT_RBBM_ATB_BUS_OVERFLOW),
  581. "RBBM_ATB_BUS_OVERFLOW" },
  582. { BIT(A3XX_INT_VFD_ERROR), "RBBM_VFD_ERROR" },
  583. { BIT(A3XX_INT_CP_SW_INT), "CP_SW" },
  584. { BIT(A3XX_INT_CP_T0_PACKET_IN_IB),
  585. "CP_T0_PACKET_IN_IB" },
  586. { BIT(A3XX_INT_CP_OPCODE_ERROR), "CP_OPCODE_ERROR" },
  587. { BIT(A3XX_INT_CP_RESERVED_BIT_ERROR),
  588. "CP_RESERVED_BIT_ERROR" },
  589. { BIT(A3XX_INT_CP_HW_FAULT), "CP_HW_FAULT" },
  590. { BIT(A3XX_INT_CP_DMA), "CP_DMA" },
  591. { BIT(A3XX_INT_CP_IB2_INT), "CP_IB2_INT" },
  592. { BIT(A3XX_INT_CP_IB1_INT), "CP_IB1_INT" },
  593. { BIT(A3XX_INT_CP_RB_INT), "CP_RB_INT" },
  594. { BIT(A3XX_INT_CP_REG_PROTECT_FAULT),
  595. "CP_REG_PROTECT_FAULT" },
  596. { BIT(A3XX_INT_CP_RB_DONE_TS), "CP_RB_DONE_TS" },
  597. { BIT(A3XX_INT_CP_VS_DONE_TS), "CP_VS_DONE_TS" },
  598. { BIT(A3XX_INT_CP_PS_DONE_TS), "CP_PS_DONE_TS" },
  599. { BIT(A3XX_INT_CACHE_FLUSH_TS), "CACHE_FLUSH_TS" },
  600. { BIT(A3XX_INT_CP_AHB_ERROR_HALT),
  601. "CP_AHB_ERROR_HALT" },
  602. { BIT(A3XX_INT_MISC_HANG_DETECT), "MISC_HANG_DETECT" },
  603. { BIT(A3XX_INT_UCHE_OOB_ACCESS), "UCHE_OOB_ACCESS" })
  604. : "None"
  605. )
  606. );
  607. /*
  608. * Tracepoint for a5xx irq. Includes status info
  609. */
  610. TRACE_EVENT(kgsl_a5xx_irq_status,
  611. TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
  612. TP_ARGS(adreno_dev, status),
  613. TP_STRUCT__entry(
  614. __string(device_name, adreno_dev->dev.name)
  615. __field(unsigned int, status)
  616. ),
  617. TP_fast_assign(
  618. __assign_str(device_name, adreno_dev->dev.name);
  619. __entry->status = status;
  620. ),
  621. TP_printk(
  622. "d_name=%s status=%s",
  623. __get_str(device_name),
  624. __entry->status ? __print_flags(__entry->status, "|",
  625. { BIT(A5XX_INT_RBBM_GPU_IDLE), "RBBM_GPU_IDLE" },
  626. { BIT(A5XX_INT_RBBM_AHB_ERROR), "RBBM_AHB_ERR" },
  627. { BIT(A5XX_INT_RBBM_TRANSFER_TIMEOUT),
  628. "RBBM_TRANSFER_TIMEOUT" },
  629. { BIT(A5XX_INT_RBBM_ME_MS_TIMEOUT),
  630. "RBBM_ME_MS_TIMEOUT" },
  631. { BIT(A5XX_INT_RBBM_PFP_MS_TIMEOUT),
  632. "RBBM_PFP_MS_TIMEOUT" },
  633. { BIT(A5XX_INT_RBBM_ETS_MS_TIMEOUT),
  634. "RBBM_ETS_MS_TIMEOUT" },
  635. { BIT(A5XX_INT_RBBM_ATB_ASYNC_OVERFLOW),
  636. "RBBM_ATB_ASYNC_OVERFLOW" },
  637. { BIT(A5XX_INT_RBBM_GPC_ERROR), "RBBM_GPC_ERR" },
  638. { BIT(A5XX_INT_CP_SW), "CP_SW" },
  639. { BIT(A5XX_INT_CP_HW_ERROR), "CP_OPCODE_ERROR" },
  640. { BIT(A5XX_INT_CP_CCU_FLUSH_DEPTH_TS),
  641. "CP_CCU_FLUSH_DEPTH_TS" },
  642. { BIT(A5XX_INT_CP_CCU_FLUSH_COLOR_TS),
  643. "CP_CCU_FLUSH_COLOR_TS" },
  644. { BIT(A5XX_INT_CP_CCU_RESOLVE_TS),
  645. "CP_CCU_RESOLVE_TS" },
  646. { BIT(A5XX_INT_CP_IB2), "CP_IB2_INT" },
  647. { BIT(A5XX_INT_CP_IB1), "CP_IB1_INT" },
  648. { BIT(A5XX_INT_CP_RB), "CP_RB_INT" },
  649. { BIT(A5XX_INT_CP_UNUSED_1), "CP_UNUSED_1" },
  650. { BIT(A5XX_INT_CP_RB_DONE_TS), "CP_RB_DONE_TS" },
  651. { BIT(A5XX_INT_CP_WT_DONE_TS), "CP_WT_DONE_TS" },
  652. { BIT(A5XX_INT_UNKNOWN_1), "UNKNOWN_1" },
  653. { BIT(A5XX_INT_CP_CACHE_FLUSH_TS),
  654. "CP_CACHE_FLUSH_TS" },
  655. { BIT(A5XX_INT_UNUSED_2), "UNUSED_2" },
  656. { BIT(A5XX_INT_RBBM_ATB_BUS_OVERFLOW),
  657. "RBBM_ATB_BUS_OVERFLOW" },
  658. { BIT(A5XX_INT_MISC_HANG_DETECT), "MISC_HANG_DETECT" },
  659. { BIT(A5XX_INT_UCHE_OOB_ACCESS), "UCHE_OOB_ACCESS" },
  660. { BIT(A5XX_INT_UCHE_TRAP_INTR), "UCHE_TRAP_INTR" },
  661. { BIT(A5XX_INT_DEBBUS_INTR_0), "DEBBUS_INTR_0" },
  662. { BIT(A5XX_INT_DEBBUS_INTR_1), "DEBBUS_INTR_1" },
  663. { BIT(A5XX_INT_GPMU_VOLTAGE_DROOP),
  664. "GPMU_VOLTAGE_DROOP" },
  665. { BIT(A5XX_INT_GPMU_FIRMWARE), "GPMU_FIRMWARE" },
  666. { BIT(A5XX_INT_ISDB_CPU_IRQ), "ISDB_CPU_IRQ" },
  667. { BIT(A5XX_INT_ISDB_UNDER_DEBUG), "ISDB_UNDER_DEBUG" })
  668. : "None"
  669. )
  670. );
  671. /*
  672. * Tracepoint for gen7 irq. Includes status info
  673. */
  674. TRACE_EVENT(kgsl_gen7_irq_status,
  675. TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
  676. TP_ARGS(adreno_dev, status),
  677. TP_STRUCT__entry(
  678. __string(device_name, adreno_dev->dev.name)
  679. __field(unsigned int, status)
  680. ),
  681. TP_fast_assign(
  682. __assign_str(device_name, adreno_dev->dev.name);
  683. __entry->status = status;
  684. ),
  685. TP_printk(
  686. "d_name=%s status=%s",
  687. __get_str(device_name),
  688. __entry->status ? __print_flags(__entry->status, "|",
  689. { BIT(GEN7_INT_GPUIDLE), "GPUIDLE" },
  690. { BIT(GEN7_INT_AHBERROR), "AHBERROR" },
  691. { BIT(GEN7_INT_CPIPCINT0), "CPIPCINT0" },
  692. { BIT(GEN7_INT_CPIPCINT1), "CPIPCINT1" },
  693. { BIT(GEN7_INT_ATBASYNCFIFOOVERFLOW),
  694. "ATBASYNCFIFOOVERFLOW" },
  695. { BIT(GEN7_INT_GPCERROR), "GPCERROR" },
  696. { BIT(GEN7_INT_SWINTERRUPT), "SWINTERRUPT" },
  697. { BIT(GEN7_INT_HWERROR), "HWERROR" },
  698. { BIT(GEN7_INT_CCU_CLEAN_DEPTH_TS),
  699. "CCU_CLEAN_DEPTH_TS" },
  700. { BIT(GEN7_INT_CCU_CLEAN_COLOR_TS),
  701. "CCU_CLEAN_COLOR_TS" },
  702. { BIT(GEN7_INT_CCU_RESOLVE_CLEAN_TS),
  703. "CCU_RESOLVE_CLEAN_TS" },
  704. { BIT(GEN7_INT_PM4CPINTERRUPT), "PM4CPINTERRUPT" },
  705. { BIT(GEN7_INT_PM4CPINTERRUPTLPAC),
  706. "PM4CPINTERRUPTLPAC" },
  707. { BIT(GEN7_INT_RB_DONE_TS), "RB_DONE_TS" },
  708. { BIT(GEN7_INT_CACHE_CLEAN_TS), "CACHE_CLEAN_TS" },
  709. { BIT(GEN7_INT_CACHE_CLEAN_TS_LPAC),
  710. "CACHE_CLEAN_TS_LPAC" },
  711. { BIT(GEN7_INT_ATBBUSOVERFLOW), "ATBBUSOVERFLOW" },
  712. { BIT(GEN7_INT_HANGDETECTINTERRUPT),
  713. "HANGDETECTINTERRUPT" },
  714. { BIT(GEN7_INT_OUTOFBOUNDACCESS),
  715. "OUTOFBOUNDACCESS" },
  716. { BIT(GEN7_INT_UCHETRAPINTERRUPT),
  717. "UCHETRAPINTERRUPT" },
  718. { BIT(GEN7_INT_DEBUGBUSINTERRUPT0),
  719. "DEBUGBUSINTERRUPT0" },
  720. { BIT(GEN7_INT_DEBUGBUSINTERRUPT1),
  721. "DEBUGBUSINTERRUPT1" },
  722. { BIT(GEN7_INT_TSBWRITEERROR), "TSBWRITEERROR" },
  723. { BIT(GEN7_INT_SWFUSEVIOLATION), "SWFUSEVIOLATION" },
  724. { BIT(GEN7_INT_ISDBCPUIRQ), "ISDBCPUIRQ" },
  725. { BIT(GEN7_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" },
  726. { BIT(GEN7_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" })
  727. : "None"
  728. )
  729. );
  730. /*
  731. * Tracepoint for gen8 irq. Includes status info
  732. */
  733. TRACE_EVENT(kgsl_gen8_irq_status,
  734. TP_PROTO(struct adreno_device *adreno_dev, u32 status),
  735. TP_ARGS(adreno_dev, status),
  736. TP_STRUCT__entry(
  737. __string(device_name, adreno_dev->dev.name)
  738. __field(u32, status)
  739. ),
  740. TP_fast_assign(
  741. __assign_str(device_name, adreno_dev->dev.name);
  742. __entry->status = status;
  743. ),
  744. TP_printk(
  745. "d_name=%s status=%s",
  746. __get_str(device_name),
  747. __entry->status ? __print_flags(__entry->status, "|",
  748. { BIT(GEN8_INT_GPUIDLE), "GPUIDLE" },
  749. { BIT(GEN8_INT_AHBERROR), "AHBERROR" },
  750. { BIT(GEN8_INT_CPIPCINT0), "CPIPCINT0" },
  751. { BIT(GEN8_INT_CPIPCINT1), "CPIPCINT1" },
  752. { BIT(GEN8_INT_ATBASYNCFIFOOVERFLOW),
  753. "ATBASYNCFIFOOVERFLOW" },
  754. { BIT(GEN8_INT_GPCERROR), "GPCERROR" },
  755. { BIT(GEN8_INT_SWINTERRUPT), "SWINTERRUPT" },
  756. { BIT(GEN8_INT_HWERROR), "HWERROR" },
  757. { BIT(GEN8_INT_CCU_CLEAN_DEPTH_TS),
  758. "CCU_CLEAN_DEPTH_TS" },
  759. { BIT(GEN8_INT_CCU_CLEAN_COLOR_TS),
  760. "CCU_CLEAN_COLOR_TS" },
  761. { BIT(GEN8_INT_CCU_RESOLVE_CLEAN_TS),
  762. "CCU_RESOLVE_CLEAN_TS" },
  763. { BIT(GEN8_INT_PM4CPINTERRUPT), "PM4CPINTERRUPT" },
  764. { BIT(GEN8_INT_PM4CPINTERRUPTLPAC),
  765. "PM4CPINTERRUPTLPAC" },
  766. { BIT(GEN8_INT_RB_DONE_TS), "RB_DONE_TS" },
  767. { BIT(GEN8_INT_CACHE_CLEAN_TS), "CACHE_CLEAN_TS" },
  768. { BIT(GEN8_INT_CACHE_CLEAN_TS_LPAC),
  769. "CACHE_CLEAN_TS_LPAC" },
  770. { BIT(GEN8_INT_ATBBUSOVERFLOW), "ATBBUSOVERFLOW" },
  771. { BIT(GEN8_INT_HANGDETECTINTERRUPT),
  772. "HANGDETECTINTERRUPT" },
  773. { BIT(GEN8_INT_OUTOFBOUNDACCESS),
  774. "OUTOFBOUNDACCESS" },
  775. { BIT(GEN8_INT_UCHETRAPINTERRUPT),
  776. "UCHETRAPINTERRUPT" },
  777. { BIT(GEN8_INT_DEBUGBUSINTERRUPT0),
  778. "DEBUGBUSINTERRUPT0" },
  779. { BIT(GEN8_INT_DEBUGBUSINTERRUPT1),
  780. "DEBUGBUSINTERRUPT1" },
  781. { BIT(GEN8_INT_TSBWRITEERROR), "TSBWRITEERROR" },
  782. { BIT(GEN8_INT_SWFUSEVIOLATION), "SWFUSEVIOLATION" },
  783. { BIT(GEN8_INT_ISDBCPUIRQ), "ISDBCPUIRQ" },
  784. { BIT(GEN8_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" })
  785. : "None"
  786. )
  787. );
  788. DECLARE_EVENT_CLASS(adreno_hw_preempt_template,
  789. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  790. struct adreno_ringbuffer *new_rb,
  791. unsigned int cur_rptr, unsigned int new_rptr),
  792. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
  793. TP_STRUCT__entry(__field(int, cur_level)
  794. __field(int, new_level)
  795. __field(unsigned int, cur_rptr)
  796. __field(unsigned int, new_rptr)
  797. __field(unsigned int, cur_wptr)
  798. __field(unsigned int, new_wptr)
  799. __field(unsigned int, cur_rbbase)
  800. __field(unsigned int, new_rbbase)
  801. ),
  802. TP_fast_assign(__entry->cur_level = cur_rb->id;
  803. __entry->new_level = new_rb->id;
  804. __entry->cur_rptr = cur_rptr;
  805. __entry->new_rptr = new_rptr;
  806. __entry->cur_wptr = cur_rb->wptr;
  807. __entry->new_wptr = new_rb->wptr;
  808. __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
  809. __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
  810. ),
  811. TP_printk(
  812. "cur_rb_lvl=%d rptr=%x wptr=%x rbbase=%x new_rb_lvl=%d rptr=%x wptr=%x rbbase=%x",
  813. __entry->cur_level, __entry->cur_rptr,
  814. __entry->cur_wptr, __entry->cur_rbbase,
  815. __entry->new_level, __entry->new_rptr,
  816. __entry->new_wptr, __entry->new_rbbase
  817. )
  818. );
  819. DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_clear_to_trig,
  820. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  821. struct adreno_ringbuffer *new_rb,
  822. unsigned int cur_rptr, unsigned int new_rptr),
  823. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
  824. );
  825. DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_trig_to_comp,
  826. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  827. struct adreno_ringbuffer *new_rb,
  828. unsigned int cur_rptr, unsigned int new_rptr),
  829. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
  830. );
  831. DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_trig_to_comp_int,
  832. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  833. struct adreno_ringbuffer *new_rb,
  834. unsigned int cur_rptr, unsigned int new_rptr),
  835. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
  836. );
  837. TRACE_EVENT(adreno_hw_preempt_comp_to_clear,
  838. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  839. struct adreno_ringbuffer *new_rb,
  840. unsigned int cur_rptr, unsigned int new_rptr),
  841. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
  842. TP_STRUCT__entry(__field(int, cur_level)
  843. __field(int, new_level)
  844. __field(unsigned int, cur_rptr)
  845. __field(unsigned int, new_rptr)
  846. __field(unsigned int, cur_wptr)
  847. __field(unsigned int, new_wptr_end)
  848. __field(unsigned int, new_wptr)
  849. __field(unsigned int, cur_rbbase)
  850. __field(unsigned int, new_rbbase)
  851. ),
  852. TP_fast_assign(__entry->cur_level = cur_rb->id;
  853. __entry->new_level = new_rb->id;
  854. __entry->cur_rptr = cur_rptr;
  855. __entry->new_rptr = new_rptr;
  856. __entry->cur_wptr = cur_rb->wptr;
  857. __entry->new_wptr_end = new_rb->wptr_preempt_end;
  858. __entry->new_wptr = new_rb->wptr;
  859. __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
  860. __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
  861. ),
  862. TP_printk(
  863. "cur_rb_lvl=%d rptr=%x wptr=%x rbbase=%x prev_rb_lvl=%d rptr=%x wptr_preempt_end=%x wptr=%x rbbase=%x",
  864. __entry->cur_level, __entry->cur_rptr,
  865. __entry->cur_wptr, __entry->cur_rbbase,
  866. __entry->new_level, __entry->new_rptr,
  867. __entry->new_wptr_end, __entry->new_wptr, __entry->new_rbbase
  868. )
  869. );
  870. TRACE_EVENT(adreno_hw_preempt_token_submit,
  871. TP_PROTO(struct adreno_ringbuffer *cur_rb,
  872. struct adreno_ringbuffer *new_rb,
  873. unsigned int cur_rptr, unsigned int new_rptr),
  874. TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
  875. TP_STRUCT__entry(__field(int, cur_level)
  876. __field(int, new_level)
  877. __field(unsigned int, cur_rptr)
  878. __field(unsigned int, new_rptr)
  879. __field(unsigned int, cur_wptr)
  880. __field(unsigned int, cur_wptr_end)
  881. __field(unsigned int, new_wptr)
  882. __field(unsigned int, cur_rbbase)
  883. __field(unsigned int, new_rbbase)
  884. ),
  885. TP_fast_assign(__entry->cur_level = cur_rb->id;
  886. __entry->new_level = new_rb->id;
  887. __entry->cur_rptr = cur_rptr;
  888. __entry->new_rptr = new_rptr;
  889. __entry->cur_wptr = cur_rb->wptr;
  890. __entry->cur_wptr_end = cur_rb->wptr_preempt_end;
  891. __entry->new_wptr = new_rb->wptr;
  892. __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
  893. __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
  894. ),
  895. TP_printk(
  896. "cur_rb_lvl=%d rptr=%x wptr_preempt_end=%x wptr=%x rbbase=%x new_rb_lvl=%d rptr=%x wptr=%x rbbase=%x",
  897. __entry->cur_level, __entry->cur_rptr,
  898. __entry->cur_wptr_end, __entry->cur_wptr,
  899. __entry->cur_rbbase,
  900. __entry->new_level, __entry->new_rptr,
  901. __entry->new_wptr, __entry->new_rbbase
  902. )
  903. );
  904. TRACE_EVENT(adreno_preempt_trigger,
  905. TP_PROTO(u32 cur_rb_id, u32 next_rb_id,
  906. u32 cntl, u64 gmu_ticks),
  907. TP_ARGS(cur_rb_id, next_rb_id, cntl, gmu_ticks),
  908. TP_STRUCT__entry(
  909. __field(u32, cur)
  910. __field(u32, next)
  911. __field(u32, cntl)
  912. __field(u64, ticks)
  913. ),
  914. TP_fast_assign(
  915. __entry->cur = cur_rb_id;
  916. __entry->next = next_rb_id;
  917. __entry->cntl = cntl;
  918. __entry->ticks = gmu_ticks;
  919. ),
  920. TP_printk("trigger from id=%d to id=%d cntl=%x ticks=%llu",
  921. __entry->cur, __entry->next, __entry->cntl, __entry->ticks
  922. )
  923. );
  924. TRACE_EVENT(adreno_preempt_done,
  925. TP_PROTO(u32 cur_rb_id, u32 next_rb_id,
  926. u32 level, u64 gmu_ticks),
  927. TP_ARGS(cur_rb_id, next_rb_id, level, gmu_ticks),
  928. TP_STRUCT__entry(
  929. __field(u32, cur)
  930. __field(u32, next)
  931. __field(u32, level)
  932. __field(u64, ticks)
  933. ),
  934. TP_fast_assign(
  935. __entry->cur = cur_rb_id;
  936. __entry->next = next_rb_id;
  937. __entry->level = level;
  938. __entry->ticks = gmu_ticks;
  939. ),
  940. TP_printk("done switch to id=%d from id=%d level=%x ticks=%llu",
  941. __entry->next, __entry->cur, __entry->level, __entry->ticks
  942. )
  943. );
  944. TRACE_EVENT(adreno_ifpc_count,
  945. TP_PROTO(unsigned int ifpc_count),
  946. TP_ARGS(ifpc_count),
  947. TP_STRUCT__entry(
  948. __field(unsigned int, ifpc_count)
  949. ),
  950. TP_fast_assign(
  951. __entry->ifpc_count = ifpc_count;
  952. ),
  953. TP_printk("total times GMU entered IFPC = %d", __entry->ifpc_count)
  954. );
  955. #endif /* _ADRENO_TRACE_H */
  956. /* This part must be outside protection */
  957. #include <trace/define_trace.h>