1 /* SPDX-License-Identifier: GPL-2.0-or-later * << 2 /* 1 /* 3 * include/trace/events/host1x.h 2 * include/trace/events/host1x.h 4 * 3 * 5 * host1x event logging to ftrace. 4 * host1x event logging to ftrace. 6 * 5 * 7 * Copyright (c) 2010-2013, NVIDIA Corporation 6 * Copyright (c) 2010-2013, NVIDIA Corporation. >> 7 * >> 8 * This program is free software; you can redistribute it and/or modify >> 9 * it under the terms of the GNU General Public License as published by >> 10 * the Free Software Foundation; either version 2 of the License, or >> 11 * (at your option) any later version. >> 12 * >> 13 * This program is distributed in the hope that it will be useful, but WITHOUT >> 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or >> 15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for >> 16 * more details. >> 17 * >> 18 * You should have received a copy of the GNU General Public License along >> 19 * with this program; if not, write to the Free Software Foundation, Inc., >> 20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 8 */ 21 */ 9 22 10 #undef TRACE_SYSTEM 23 #undef TRACE_SYSTEM 11 #define TRACE_SYSTEM host1x 24 #define TRACE_SYSTEM host1x 12 25 13 #if !defined(_TRACE_HOST1X_H) || defined(TRACE 26 #if !defined(_TRACE_HOST1X_H) || defined(TRACE_HEADER_MULTI_READ) 14 #define _TRACE_HOST1X_H 27 #define _TRACE_HOST1X_H 15 28 16 #include <linux/ktime.h> 29 #include <linux/ktime.h> 17 #include <linux/tracepoint.h> 30 #include <linux/tracepoint.h> 18 31 19 struct host1x_bo; 32 struct host1x_bo; 20 33 21 DECLARE_EVENT_CLASS(host1x, 34 DECLARE_EVENT_CLASS(host1x, 22 TP_PROTO(const char *name), 35 TP_PROTO(const char *name), 23 TP_ARGS(name), 36 TP_ARGS(name), 24 TP_STRUCT__entry(__field(const char *, 37 TP_STRUCT__entry(__field(const char *, name)), 25 TP_fast_assign(__entry->name = name;), 38 TP_fast_assign(__entry->name = name;), 26 TP_printk("name=%s", __entry->name) 39 TP_printk("name=%s", __entry->name) 27 ); 40 ); 28 41 29 DEFINE_EVENT(host1x, host1x_channel_open, 42 DEFINE_EVENT(host1x, host1x_channel_open, 30 TP_PROTO(const char *name), 43 TP_PROTO(const char *name), 31 TP_ARGS(name) 44 TP_ARGS(name) 32 ); 45 ); 33 46 34 DEFINE_EVENT(host1x, host1x_channel_release, 47 DEFINE_EVENT(host1x, host1x_channel_release, 35 TP_PROTO(const char *name), 48 TP_PROTO(const char *name), 36 TP_ARGS(name) 49 TP_ARGS(name) 37 ); 50 ); 38 51 39 DEFINE_EVENT(host1x, host1x_cdma_begin, 52 DEFINE_EVENT(host1x, host1x_cdma_begin, 40 TP_PROTO(const char *name), 53 TP_PROTO(const char *name), 41 TP_ARGS(name) 54 TP_ARGS(name) 42 ); 55 ); 43 56 44 DEFINE_EVENT(host1x, host1x_cdma_end, 57 DEFINE_EVENT(host1x, host1x_cdma_end, 45 TP_PROTO(const char *name), 58 TP_PROTO(const char *name), 46 TP_ARGS(name) 59 TP_ARGS(name) 47 ); 60 ); 48 61 49 TRACE_EVENT(host1x_cdma_push, 62 TRACE_EVENT(host1x_cdma_push, 50 TP_PROTO(const char *name, u32 op1, u3 63 TP_PROTO(const char *name, u32 op1, u32 op2), 51 64 52 TP_ARGS(name, op1, op2), 65 TP_ARGS(name, op1, op2), 53 66 54 TP_STRUCT__entry( 67 TP_STRUCT__entry( 55 __field(const char *, name) 68 __field(const char *, name) 56 __field(u32, op1) 69 __field(u32, op1) 57 __field(u32, op2) 70 __field(u32, op2) 58 ), 71 ), 59 72 60 TP_fast_assign( 73 TP_fast_assign( 61 __entry->name = name; 74 __entry->name = name; 62 __entry->op1 = op1; 75 __entry->op1 = op1; 63 __entry->op2 = op2; 76 __entry->op2 = op2; 64 ), 77 ), 65 78 66 TP_printk("name=%s, op1=%08x, op2=%08x 79 TP_printk("name=%s, op1=%08x, op2=%08x", 67 __entry->name, __entry->op1, _ 80 __entry->name, __entry->op1, __entry->op2) 68 ); << 69 << 70 TRACE_EVENT(host1x_cdma_push_wide, << 71 TP_PROTO(const char *name, u32 op1, u3 << 72 << 73 TP_ARGS(name, op1, op2, op3, op4), << 74 << 75 TP_STRUCT__entry( << 76 __field(const char *, name) << 77 __field(u32, op1) << 78 __field(u32, op2) << 79 __field(u32, op3) << 80 __field(u32, op4) << 81 ), << 82 << 83 TP_fast_assign( << 84 __entry->name = name; << 85 __entry->op1 = op1; << 86 __entry->op2 = op2; << 87 __entry->op3 = op3; << 88 __entry->op4 = op4; << 89 ), << 90 << 91 TP_printk("name=%s, op1=%08x, op2=%08x << 92 __entry->name, __entry->op1, _ << 93 __entry->op4) << 94 ); 81 ); 95 82 96 TRACE_EVENT(host1x_cdma_push_gather, 83 TRACE_EVENT(host1x_cdma_push_gather, 97 TP_PROTO(const char *name, struct host 84 TP_PROTO(const char *name, struct host1x_bo *bo, 98 u32 words, u32 offset, 85 u32 words, u32 offset, void *cmdbuf), 99 86 100 TP_ARGS(name, bo, words, offset, cmdbu 87 TP_ARGS(name, bo, words, offset, cmdbuf), 101 88 102 TP_STRUCT__entry( 89 TP_STRUCT__entry( 103 __field(const char *, name) 90 __field(const char *, name) 104 __field(struct host1x_bo *, bo 91 __field(struct host1x_bo *, bo) 105 __field(u32, words) 92 __field(u32, words) 106 __field(u32, offset) 93 __field(u32, offset) 107 __field(bool, cmdbuf) 94 __field(bool, cmdbuf) 108 __dynamic_array(u32, cmdbuf, w 95 __dynamic_array(u32, cmdbuf, words) 109 ), 96 ), 110 97 111 TP_fast_assign( 98 TP_fast_assign( 112 if (cmdbuf) { 99 if (cmdbuf) { 113 memcpy(__get_dynamic_a 100 memcpy(__get_dynamic_array(cmdbuf), cmdbuf+offset, 114 words 101 words * sizeof(u32)); 115 } 102 } 116 __entry->cmdbuf = cmdbuf; 103 __entry->cmdbuf = cmdbuf; 117 __entry->name = name; 104 __entry->name = name; 118 __entry->bo = bo; 105 __entry->bo = bo; 119 __entry->words = words; 106 __entry->words = words; 120 __entry->offset = offset; 107 __entry->offset = offset; 121 ), 108 ), 122 109 123 TP_printk("name=%s, bo=%p, words=%u, o 110 TP_printk("name=%s, bo=%p, words=%u, offset=%d, contents=[%s]", 124 __entry->name, __entry->bo, 111 __entry->name, __entry->bo, 125 __entry->words, __entry->offset, 112 __entry->words, __entry->offset, 126 __print_hex(__get_dynamic_array(cmdb 113 __print_hex(__get_dynamic_array(cmdbuf), 127 __entry->cmdbuf ? __entry->w 114 __entry->cmdbuf ? __entry->words * 4 : 0)) 128 ); 115 ); 129 116 130 TRACE_EVENT(host1x_channel_submit, 117 TRACE_EVENT(host1x_channel_submit, 131 TP_PROTO(const char *name, u32 cmdbufs 118 TP_PROTO(const char *name, u32 cmdbufs, u32 relocs, u32 syncpt_id, 132 u32 syncpt_incrs), 119 u32 syncpt_incrs), 133 120 134 TP_ARGS(name, cmdbufs, relocs, syncpt_ 121 TP_ARGS(name, cmdbufs, relocs, syncpt_id, syncpt_incrs), 135 122 136 TP_STRUCT__entry( 123 TP_STRUCT__entry( 137 __field(const char *, name) 124 __field(const char *, name) 138 __field(u32, cmdbufs) 125 __field(u32, cmdbufs) 139 __field(u32, relocs) 126 __field(u32, relocs) 140 __field(u32, syncpt_id) 127 __field(u32, syncpt_id) 141 __field(u32, syncpt_incrs) 128 __field(u32, syncpt_incrs) 142 ), 129 ), 143 130 144 TP_fast_assign( 131 TP_fast_assign( 145 __entry->name = name; 132 __entry->name = name; 146 __entry->cmdbufs = cmdbufs; 133 __entry->cmdbufs = cmdbufs; 147 __entry->relocs = relocs; 134 __entry->relocs = relocs; 148 __entry->syncpt_id = syncpt_id 135 __entry->syncpt_id = syncpt_id; 149 __entry->syncpt_incrs = syncpt 136 __entry->syncpt_incrs = syncpt_incrs; 150 ), 137 ), 151 138 152 TP_printk("name=%s, cmdbufs=%u, relocs 139 TP_printk("name=%s, cmdbufs=%u, relocs=%u, syncpt_id=%u, " 153 "syncpt_incrs=%u", 140 "syncpt_incrs=%u", 154 __entry->name, __entry->cmdb 141 __entry->name, __entry->cmdbufs, __entry->relocs, 155 __entry->syncpt_id, __entry- 142 __entry->syncpt_id, __entry->syncpt_incrs) 156 ); 143 ); 157 144 158 TRACE_EVENT(host1x_channel_submitted, 145 TRACE_EVENT(host1x_channel_submitted, 159 TP_PROTO(const char *name, u32 syncpt_ 146 TP_PROTO(const char *name, u32 syncpt_base, u32 syncpt_max), 160 147 161 TP_ARGS(name, syncpt_base, syncpt_max) 148 TP_ARGS(name, syncpt_base, syncpt_max), 162 149 163 TP_STRUCT__entry( 150 TP_STRUCT__entry( 164 __field(const char *, name) 151 __field(const char *, name) 165 __field(u32, syncpt_base) 152 __field(u32, syncpt_base) 166 __field(u32, syncpt_max) 153 __field(u32, syncpt_max) 167 ), 154 ), 168 155 169 TP_fast_assign( 156 TP_fast_assign( 170 __entry->name = name; 157 __entry->name = name; 171 __entry->syncpt_base = syncpt_ 158 __entry->syncpt_base = syncpt_base; 172 __entry->syncpt_max = syncpt_m 159 __entry->syncpt_max = syncpt_max; 173 ), 160 ), 174 161 175 TP_printk("name=%s, syncpt_base=%d, sy 162 TP_printk("name=%s, syncpt_base=%d, syncpt_max=%d", 176 __entry->name, __entry->syncpt 163 __entry->name, __entry->syncpt_base, __entry->syncpt_max) 177 ); 164 ); 178 165 179 TRACE_EVENT(host1x_channel_submit_complete, 166 TRACE_EVENT(host1x_channel_submit_complete, 180 TP_PROTO(const char *name, int count, 167 TP_PROTO(const char *name, int count, u32 thresh), 181 168 182 TP_ARGS(name, count, thresh), 169 TP_ARGS(name, count, thresh), 183 170 184 TP_STRUCT__entry( 171 TP_STRUCT__entry( 185 __field(const char *, name) 172 __field(const char *, name) 186 __field(int, count) 173 __field(int, count) 187 __field(u32, thresh) 174 __field(u32, thresh) 188 ), 175 ), 189 176 190 TP_fast_assign( 177 TP_fast_assign( 191 __entry->name = name; 178 __entry->name = name; 192 __entry->count = count; 179 __entry->count = count; 193 __entry->thresh = thresh; 180 __entry->thresh = thresh; 194 ), 181 ), 195 182 196 TP_printk("name=%s, count=%d, thresh=% 183 TP_printk("name=%s, count=%d, thresh=%d", 197 __entry->name, __entry->count, 184 __entry->name, __entry->count, __entry->thresh) 198 ); 185 ); 199 186 200 TRACE_EVENT(host1x_wait_cdma, 187 TRACE_EVENT(host1x_wait_cdma, 201 TP_PROTO(const char *name, u32 eventid 188 TP_PROTO(const char *name, u32 eventid), 202 189 203 TP_ARGS(name, eventid), 190 TP_ARGS(name, eventid), 204 191 205 TP_STRUCT__entry( 192 TP_STRUCT__entry( 206 __field(const char *, name) 193 __field(const char *, name) 207 __field(u32, eventid) 194 __field(u32, eventid) 208 ), 195 ), 209 196 210 TP_fast_assign( 197 TP_fast_assign( 211 __entry->name = name; 198 __entry->name = name; 212 __entry->eventid = eventid; 199 __entry->eventid = eventid; 213 ), 200 ), 214 201 215 TP_printk("name=%s, event=%d", __entry 202 TP_printk("name=%s, event=%d", __entry->name, __entry->eventid) 216 ); 203 ); 217 204 218 TRACE_EVENT(host1x_syncpt_load_min, 205 TRACE_EVENT(host1x_syncpt_load_min, 219 TP_PROTO(u32 id, u32 val), 206 TP_PROTO(u32 id, u32 val), 220 207 221 TP_ARGS(id, val), 208 TP_ARGS(id, val), 222 209 223 TP_STRUCT__entry( 210 TP_STRUCT__entry( 224 __field(u32, id) 211 __field(u32, id) 225 __field(u32, val) 212 __field(u32, val) 226 ), 213 ), 227 214 228 TP_fast_assign( 215 TP_fast_assign( 229 __entry->id = id; 216 __entry->id = id; 230 __entry->val = val; 217 __entry->val = val; 231 ), 218 ), 232 219 233 TP_printk("id=%d, val=%d", __entry->id 220 TP_printk("id=%d, val=%d", __entry->id, __entry->val) 234 ); 221 ); 235 222 236 TRACE_EVENT(host1x_syncpt_wait_check, 223 TRACE_EVENT(host1x_syncpt_wait_check, 237 TP_PROTO(struct host1x_bo *bo, u32 off 224 TP_PROTO(struct host1x_bo *bo, u32 offset, u32 syncpt_id, u32 thresh, 238 u32 min), 225 u32 min), 239 226 240 TP_ARGS(bo, offset, syncpt_id, thresh, 227 TP_ARGS(bo, offset, syncpt_id, thresh, min), 241 228 242 TP_STRUCT__entry( 229 TP_STRUCT__entry( 243 __field(struct host1x_bo *, bo 230 __field(struct host1x_bo *, bo) 244 __field(u32, offset) 231 __field(u32, offset) 245 __field(u32, syncpt_id) 232 __field(u32, syncpt_id) 246 __field(u32, thresh) 233 __field(u32, thresh) 247 __field(u32, min) 234 __field(u32, min) 248 ), 235 ), 249 236 250 TP_fast_assign( 237 TP_fast_assign( 251 __entry->bo = bo; 238 __entry->bo = bo; 252 __entry->offset = offset; 239 __entry->offset = offset; 253 __entry->syncpt_id = syncpt_id 240 __entry->syncpt_id = syncpt_id; 254 __entry->thresh = thresh; 241 __entry->thresh = thresh; 255 __entry->min = min; 242 __entry->min = min; 256 ), 243 ), 257 244 258 TP_printk("bo=%p, offset=%05x, id=%d, 245 TP_printk("bo=%p, offset=%05x, id=%d, thresh=%d, current=%d", 259 __entry->bo, __entry->offset, 246 __entry->bo, __entry->offset, 260 __entry->syncpt_id, __entry->t 247 __entry->syncpt_id, __entry->thresh, 261 __entry->min) 248 __entry->min) 262 ); 249 ); 263 250 264 #endif /* _TRACE_HOST1X_H */ 251 #endif /* _TRACE_HOST1X_H */ 265 252 266 /* This part must be outside protection */ 253 /* This part must be outside protection */ 267 #include <trace/define_trace.h> 254 #include <trace/define_trace.h> 268 255
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.