xref: /OK3568_Linux_fs/kernel/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_jm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  *
4  * (C) COPYRIGHT 2014, 2018, 2020-2021 ARM Limited. All rights reserved.
5  *
6  * This program is free software and is provided to you under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation, and any use by you of this program is subject to the terms
9  * of such GNU license.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you can access it online at
18  * http://www.gnu.org/licenses/gpl-2.0.html.
19  *
20  */
21 
22 /*
23  * NOTE: This must **only** be included through mali_linux_trace.h,
24  * otherwise it will fail to setup tracepoints correctly
25  */
26 
27 #if !defined(_KBASE_DEBUG_LINUX_KTRACE_JM_H_) || defined(TRACE_HEADER_MULTI_READ)
28 #define _KBASE_DEBUG_LINUX_KTRACE_JM_H_
29 
30 DECLARE_EVENT_CLASS(mali_jm_slot_template,
31 	TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val),
32 	TP_ARGS(kctx, jobslot, info_val),
33 	TP_STRUCT__entry(
34 		__field(pid_t, kctx_tgid)
35 		__field(u32, kctx_id)
36 		__field(unsigned int, jobslot)
37 		__field(u64, info_val)
38 	),
39 	TP_fast_assign(
40 		__entry->kctx_id = (kctx) ? kctx->id : 0u;
41 		__entry->kctx_tgid = (kctx) ? kctx->tgid : 0;
42 		__entry->jobslot = jobslot;
43 		__entry->info_val = info_val;
44 	),
45 	TP_printk("kctx=%d_%u jobslot=%u info=0x%llx", __entry->kctx_tgid,
46 			__entry->kctx_id, __entry->jobslot, __entry->info_val)
47 );
48 
49 #define DEFINE_MALI_JM_SLOT_EVENT(name) \
50 DEFINE_EVENT(mali_jm_slot_template, mali_##name, \
51 	TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val), \
52 	TP_ARGS(kctx, jobslot, info_val))
53 DEFINE_MALI_JM_SLOT_EVENT(JM_RETURN_ATOM_TO_JS);
54 DEFINE_MALI_JM_SLOT_EVENT(JM_MARK_FOR_RETURN_TO_JS);
55 DEFINE_MALI_JM_SLOT_EVENT(JM_SUBMIT);
56 DEFINE_MALI_JM_SLOT_EVENT(JM_JOB_DONE);
57 DEFINE_MALI_JM_SLOT_EVENT(JM_UPDATE_HEAD);
58 DEFINE_MALI_JM_SLOT_EVENT(JM_CHECK_HEAD);
59 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP);
60 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP_0);
61 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP_1);
62 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP);
63 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP_0);
64 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP_1);
65 DEFINE_MALI_JM_SLOT_EVENT(JM_SLOT_SOFT_OR_HARD_STOP);
66 DEFINE_MALI_JM_SLOT_EVENT(JM_SLOT_EVICT);
67 DEFINE_MALI_JM_SLOT_EVENT(JM_BEGIN_RESET_WORKER);
68 DEFINE_MALI_JM_SLOT_EVENT(JM_END_RESET_WORKER);
69 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REGISTER_ON_RECHECK_FAILED);
70 DEFINE_MALI_JM_SLOT_EVENT(JS_AFFINITY_SUBMIT_TO_BLOCKED);
71 DEFINE_MALI_JM_SLOT_EVENT(JS_AFFINITY_CURRENT);
72 DEFINE_MALI_JM_SLOT_EVENT(JD_DONE_TRY_RUN_NEXT_JOB);
73 DEFINE_MALI_JM_SLOT_EVENT(JS_PULL_JOB);
74 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REQUEST_CORES_FAILED);
75 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REGISTER_INUSE_FAILED);
76 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REQUEST_ON_RECHECK_FAILED);
77 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_AFFINITY_WOULD_VIOLATE);
78 DEFINE_MALI_JM_SLOT_EVENT(JS_JOB_DONE_TRY_RUN_NEXT_JOB);
79 DEFINE_MALI_JM_SLOT_EVENT(JS_JOB_DONE_RETRY_NEEDED);
80 DEFINE_MALI_JM_SLOT_EVENT(JS_POLICY_DEQUEUE_JOB);
81 DEFINE_MALI_JM_SLOT_EVENT(JS_POLICY_DEQUEUE_JOB_IRQ);
82 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_BLOCKED);
83 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_UNBLOCKED);
84 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_AND_HIGHER_UNBLOCKED);
85 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_IS_BLOCKED);
86 #undef DEFINE_MALI_JM_SLOT_EVENT
87 
88 DECLARE_EVENT_CLASS(mali_jm_refcount_template,
89 	TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val),
90 	TP_ARGS(kctx, refcount, info_val),
91 	TP_STRUCT__entry(
92 		__field(pid_t, kctx_tgid)
93 		__field(u32, kctx_id)
94 		__field(unsigned int, refcount)
95 		__field(u64, info_val)
96 	),
97 	TP_fast_assign(
98 		__entry->kctx_id = (kctx) ? kctx->id : 0u;
99 		__entry->kctx_tgid = (kctx) ? kctx->tgid : 0;
100 		__entry->refcount = refcount;
101 		__entry->info_val = info_val;
102 	),
103 	TP_printk("kctx=%d_%u refcount=%u info=0x%llx", __entry->kctx_tgid,
104 			__entry->kctx_id, __entry->refcount, __entry->info_val)
105 );
106 
107 #define DEFINE_MALI_JM_REFCOUNT_EVENT(name) \
108 DEFINE_EVENT(mali_jm_refcount_template, mali_##name, \
109 	TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val), \
110 	TP_ARGS(kctx, refcount, info_val))
111 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_ADD_JOB);
112 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_REMOVE_JOB);
113 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_TRY_SCHEDULE_HEAD_CTX);
114 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_INIT_CTX);
115 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_TERM_CTX);
116 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_ENQUEUE_CTX);
117 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_DEQUEUE_HEAD_CTX);
118 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_TRY_EVICT_CTX);
119 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_RUNPOOL_ADD_CTX);
120 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_RUNPOOL_REMOVE_CTX);
121 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_FOREACH_CTX_JOBS);
122 #undef DEFINE_MALI_JM_REFCOUNT_EVENT
123 
124 DECLARE_EVENT_CLASS(mali_jm_add_template,
125 	TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val),
126 	TP_ARGS(kctx, gpu_addr, info_val),
127 	TP_STRUCT__entry(
128 		__field(pid_t, kctx_tgid)
129 		__field(u32, kctx_id)
130 		__field(u64, gpu_addr)
131 		__field(u64, info_val)
132 	),
133 	TP_fast_assign(
134 		__entry->kctx_id = (kctx) ? kctx->id : 0u;
135 		__entry->kctx_tgid = (kctx) ? kctx->tgid : 0;
136 		__entry->gpu_addr = gpu_addr;
137 		__entry->info_val = info_val;
138 	),
139 	TP_printk("kctx=%d_%u gpu_addr=0x%llx info=0x%llx", __entry->kctx_tgid,
140 			__entry->kctx_id, __entry->gpu_addr, __entry->info_val)
141 );
142 
143 #define DEFINE_MALI_JM_ADD_EVENT(name) \
144 DEFINE_EVENT(mali_jm_add_template, mali_##name, \
145 	TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), \
146 	TP_ARGS(kctx, gpu_addr, info_val))
147 DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER);
148 DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER_END);
149 DEFINE_MALI_JM_ADD_EVENT(JD_CANCEL_WORKER);
150 DEFINE_MALI_JM_ADD_EVENT(JD_DONE);
151 DEFINE_MALI_JM_ADD_EVENT(JD_CANCEL);
152 DEFINE_MALI_JM_ADD_EVENT(JD_ZAP_CONTEXT);
153 DEFINE_MALI_JM_ADD_EVENT(JM_IRQ);
154 DEFINE_MALI_JM_ADD_EVENT(JM_IRQ_END);
155 DEFINE_MALI_JM_ADD_EVENT(JM_FLUSH_WORKQS);
156 DEFINE_MALI_JM_ADD_EVENT(JM_FLUSH_WORKQS_DONE);
157 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_NON_SCHEDULED);
158 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_SCHEDULED);
159 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_DONE);
160 DEFINE_MALI_JM_ADD_EVENT(JM_SUBMIT_AFTER_RESET);
161 DEFINE_MALI_JM_ADD_EVENT(JM_JOB_COMPLETE);
162 DEFINE_MALI_JM_ADD_EVENT(JS_UNPULL_JOB);
163 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_ON_RUNPOOL);
164 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_OFF_RUNPOOL);
165 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_ON_CTX);
166 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_OFF_CTX);
167 DEFINE_MALI_JM_ADD_EVENT(JS_RETURN_WORKER);
168 DEFINE_MALI_JM_ADD_EVENT(JS_RETURN_WORKER_END);
169 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_TIMER_END);
170 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_TIMER_START);
171 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_ENQUEUE_JOB);
172 #undef DEFINE_MALI_JM_ADD_EVENT
173 
174 #endif /*  !defined(_KBASE_DEBUG_LINUX_KTRACE_JM_H_)  || defined(TRACE_HEADER_MULTI_READ)*/
175