1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * include/trace/events/host1x.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * host1x event logging to ftrace. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (c) 2010-2013, NVIDIA Corporation. 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #undef TRACE_SYSTEM 11*4882a593Smuzhiyun #define TRACE_SYSTEM host1x 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #if !defined(_TRACE_HOST1X_H) || defined(TRACE_HEADER_MULTI_READ) 14*4882a593Smuzhiyun #define _TRACE_HOST1X_H 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <linux/ktime.h> 17*4882a593Smuzhiyun #include <linux/tracepoint.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct host1x_bo; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun DECLARE_EVENT_CLASS(host1x, 22*4882a593Smuzhiyun TP_PROTO(const char *name), 23*4882a593Smuzhiyun TP_ARGS(name), 24*4882a593Smuzhiyun TP_STRUCT__entry(__field(const char *, name)), 25*4882a593Smuzhiyun TP_fast_assign(__entry->name = name;), 26*4882a593Smuzhiyun TP_printk("name=%s", __entry->name) 27*4882a593Smuzhiyun ); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun DEFINE_EVENT(host1x, host1x_channel_open, 30*4882a593Smuzhiyun TP_PROTO(const char *name), 31*4882a593Smuzhiyun TP_ARGS(name) 32*4882a593Smuzhiyun ); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun DEFINE_EVENT(host1x, host1x_channel_release, 35*4882a593Smuzhiyun TP_PROTO(const char *name), 36*4882a593Smuzhiyun TP_ARGS(name) 37*4882a593Smuzhiyun ); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun DEFINE_EVENT(host1x, host1x_cdma_begin, 40*4882a593Smuzhiyun TP_PROTO(const char *name), 41*4882a593Smuzhiyun TP_ARGS(name) 42*4882a593Smuzhiyun ); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun DEFINE_EVENT(host1x, host1x_cdma_end, 45*4882a593Smuzhiyun TP_PROTO(const char *name), 46*4882a593Smuzhiyun TP_ARGS(name) 47*4882a593Smuzhiyun ); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun TRACE_EVENT(host1x_cdma_push, 50*4882a593Smuzhiyun TP_PROTO(const char *name, u32 op1, u32 op2), 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun TP_ARGS(name, op1, op2), 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun TP_STRUCT__entry( 55*4882a593Smuzhiyun __field(const char *, name) 56*4882a593Smuzhiyun __field(u32, op1) 57*4882a593Smuzhiyun __field(u32, op2) 58*4882a593Smuzhiyun ), 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun TP_fast_assign( 61*4882a593Smuzhiyun __entry->name = name; 62*4882a593Smuzhiyun __entry->op1 = op1; 63*4882a593Smuzhiyun __entry->op2 = op2; 64*4882a593Smuzhiyun ), 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun TP_printk("name=%s, op1=%08x, op2=%08x", 67*4882a593Smuzhiyun __entry->name, __entry->op1, __entry->op2) 68*4882a593Smuzhiyun ); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun TRACE_EVENT(host1x_cdma_push_wide, 71*4882a593Smuzhiyun TP_PROTO(const char *name, u32 op1, u32 op2, u32 op3, u32 op4), 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun TP_ARGS(name, op1, op2, op3, op4), 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun TP_STRUCT__entry( 76*4882a593Smuzhiyun __field(const char *, name) 77*4882a593Smuzhiyun __field(u32, op1) 78*4882a593Smuzhiyun __field(u32, op2) 79*4882a593Smuzhiyun __field(u32, op3) 80*4882a593Smuzhiyun __field(u32, op4) 81*4882a593Smuzhiyun ), 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun TP_fast_assign( 84*4882a593Smuzhiyun __entry->name = name; 85*4882a593Smuzhiyun __entry->op1 = op1; 86*4882a593Smuzhiyun __entry->op2 = op2; 87*4882a593Smuzhiyun __entry->op3 = op3; 88*4882a593Smuzhiyun __entry->op4 = op4; 89*4882a593Smuzhiyun ), 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun TP_printk("name=%s, op1=%08x, op2=%08x, op3=%08x op4=%08x", 92*4882a593Smuzhiyun __entry->name, __entry->op1, __entry->op2, __entry->op3, 93*4882a593Smuzhiyun __entry->op4) 94*4882a593Smuzhiyun ); 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun TRACE_EVENT(host1x_cdma_push_gather, 97*4882a593Smuzhiyun TP_PROTO(const char *name, struct host1x_bo *bo, 98*4882a593Smuzhiyun u32 words, u32 offset, void *cmdbuf), 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun TP_ARGS(name, bo, words, offset, cmdbuf), 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun TP_STRUCT__entry( 103*4882a593Smuzhiyun __field(const char *, name) 104*4882a593Smuzhiyun __field(struct host1x_bo *, bo) 105*4882a593Smuzhiyun __field(u32, words) 106*4882a593Smuzhiyun __field(u32, offset) 107*4882a593Smuzhiyun __field(bool, cmdbuf) 108*4882a593Smuzhiyun __dynamic_array(u32, cmdbuf, words) 109*4882a593Smuzhiyun ), 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun TP_fast_assign( 112*4882a593Smuzhiyun if (cmdbuf) { 113*4882a593Smuzhiyun memcpy(__get_dynamic_array(cmdbuf), cmdbuf+offset, 114*4882a593Smuzhiyun words * sizeof(u32)); 115*4882a593Smuzhiyun } 116*4882a593Smuzhiyun __entry->cmdbuf = cmdbuf; 117*4882a593Smuzhiyun __entry->name = name; 118*4882a593Smuzhiyun __entry->bo = bo; 119*4882a593Smuzhiyun __entry->words = words; 120*4882a593Smuzhiyun __entry->offset = offset; 121*4882a593Smuzhiyun ), 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun TP_printk("name=%s, bo=%p, words=%u, offset=%d, contents=[%s]", 124*4882a593Smuzhiyun __entry->name, __entry->bo, 125*4882a593Smuzhiyun __entry->words, __entry->offset, 126*4882a593Smuzhiyun __print_hex(__get_dynamic_array(cmdbuf), 127*4882a593Smuzhiyun __entry->cmdbuf ? __entry->words * 4 : 0)) 128*4882a593Smuzhiyun ); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun TRACE_EVENT(host1x_channel_submit, 131*4882a593Smuzhiyun TP_PROTO(const char *name, u32 cmdbufs, u32 relocs, u32 syncpt_id, 132*4882a593Smuzhiyun u32 syncpt_incrs), 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun TP_ARGS(name, cmdbufs, relocs, syncpt_id, syncpt_incrs), 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun TP_STRUCT__entry( 137*4882a593Smuzhiyun __field(const char *, name) 138*4882a593Smuzhiyun __field(u32, cmdbufs) 139*4882a593Smuzhiyun __field(u32, relocs) 140*4882a593Smuzhiyun __field(u32, syncpt_id) 141*4882a593Smuzhiyun __field(u32, syncpt_incrs) 142*4882a593Smuzhiyun ), 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun TP_fast_assign( 145*4882a593Smuzhiyun __entry->name = name; 146*4882a593Smuzhiyun __entry->cmdbufs = cmdbufs; 147*4882a593Smuzhiyun __entry->relocs = relocs; 148*4882a593Smuzhiyun __entry->syncpt_id = syncpt_id; 149*4882a593Smuzhiyun __entry->syncpt_incrs = syncpt_incrs; 150*4882a593Smuzhiyun ), 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun TP_printk("name=%s, cmdbufs=%u, relocs=%u, syncpt_id=%u, " 153*4882a593Smuzhiyun "syncpt_incrs=%u", 154*4882a593Smuzhiyun __entry->name, __entry->cmdbufs, __entry->relocs, 155*4882a593Smuzhiyun __entry->syncpt_id, __entry->syncpt_incrs) 156*4882a593Smuzhiyun ); 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun TRACE_EVENT(host1x_channel_submitted, 159*4882a593Smuzhiyun TP_PROTO(const char *name, u32 syncpt_base, u32 syncpt_max), 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun TP_ARGS(name, syncpt_base, syncpt_max), 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun TP_STRUCT__entry( 164*4882a593Smuzhiyun __field(const char *, name) 165*4882a593Smuzhiyun __field(u32, syncpt_base) 166*4882a593Smuzhiyun __field(u32, syncpt_max) 167*4882a593Smuzhiyun ), 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun TP_fast_assign( 170*4882a593Smuzhiyun __entry->name = name; 171*4882a593Smuzhiyun __entry->syncpt_base = syncpt_base; 172*4882a593Smuzhiyun __entry->syncpt_max = syncpt_max; 173*4882a593Smuzhiyun ), 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun TP_printk("name=%s, syncpt_base=%d, syncpt_max=%d", 176*4882a593Smuzhiyun __entry->name, __entry->syncpt_base, __entry->syncpt_max) 177*4882a593Smuzhiyun ); 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun TRACE_EVENT(host1x_channel_submit_complete, 180*4882a593Smuzhiyun TP_PROTO(const char *name, int count, u32 thresh), 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun TP_ARGS(name, count, thresh), 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun TP_STRUCT__entry( 185*4882a593Smuzhiyun __field(const char *, name) 186*4882a593Smuzhiyun __field(int, count) 187*4882a593Smuzhiyun __field(u32, thresh) 188*4882a593Smuzhiyun ), 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun TP_fast_assign( 191*4882a593Smuzhiyun __entry->name = name; 192*4882a593Smuzhiyun __entry->count = count; 193*4882a593Smuzhiyun __entry->thresh = thresh; 194*4882a593Smuzhiyun ), 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun TP_printk("name=%s, count=%d, thresh=%d", 197*4882a593Smuzhiyun __entry->name, __entry->count, __entry->thresh) 198*4882a593Smuzhiyun ); 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun TRACE_EVENT(host1x_wait_cdma, 201*4882a593Smuzhiyun TP_PROTO(const char *name, u32 eventid), 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun TP_ARGS(name, eventid), 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun TP_STRUCT__entry( 206*4882a593Smuzhiyun __field(const char *, name) 207*4882a593Smuzhiyun __field(u32, eventid) 208*4882a593Smuzhiyun ), 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun TP_fast_assign( 211*4882a593Smuzhiyun __entry->name = name; 212*4882a593Smuzhiyun __entry->eventid = eventid; 213*4882a593Smuzhiyun ), 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun TP_printk("name=%s, event=%d", __entry->name, __entry->eventid) 216*4882a593Smuzhiyun ); 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun TRACE_EVENT(host1x_syncpt_load_min, 219*4882a593Smuzhiyun TP_PROTO(u32 id, u32 val), 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun TP_ARGS(id, val), 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun TP_STRUCT__entry( 224*4882a593Smuzhiyun __field(u32, id) 225*4882a593Smuzhiyun __field(u32, val) 226*4882a593Smuzhiyun ), 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun TP_fast_assign( 229*4882a593Smuzhiyun __entry->id = id; 230*4882a593Smuzhiyun __entry->val = val; 231*4882a593Smuzhiyun ), 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun TP_printk("id=%d, val=%d", __entry->id, __entry->val) 234*4882a593Smuzhiyun ); 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun TRACE_EVENT(host1x_syncpt_wait_check, 237*4882a593Smuzhiyun TP_PROTO(struct host1x_bo *bo, u32 offset, u32 syncpt_id, u32 thresh, 238*4882a593Smuzhiyun u32 min), 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun TP_ARGS(bo, offset, syncpt_id, thresh, min), 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun TP_STRUCT__entry( 243*4882a593Smuzhiyun __field(struct host1x_bo *, bo) 244*4882a593Smuzhiyun __field(u32, offset) 245*4882a593Smuzhiyun __field(u32, syncpt_id) 246*4882a593Smuzhiyun __field(u32, thresh) 247*4882a593Smuzhiyun __field(u32, min) 248*4882a593Smuzhiyun ), 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun TP_fast_assign( 251*4882a593Smuzhiyun __entry->bo = bo; 252*4882a593Smuzhiyun __entry->offset = offset; 253*4882a593Smuzhiyun __entry->syncpt_id = syncpt_id; 254*4882a593Smuzhiyun __entry->thresh = thresh; 255*4882a593Smuzhiyun __entry->min = min; 256*4882a593Smuzhiyun ), 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun TP_printk("bo=%p, offset=%05x, id=%d, thresh=%d, current=%d", 259*4882a593Smuzhiyun __entry->bo, __entry->offset, 260*4882a593Smuzhiyun __entry->syncpt_id, __entry->thresh, 261*4882a593Smuzhiyun __entry->min) 262*4882a593Smuzhiyun ); 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun #endif /* _TRACE_HOST1X_H */ 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun /* This part must be outside protection */ 267*4882a593Smuzhiyun #include <trace/define_trace.h> 268