1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21bf4af16SAnton Blanchard #undef TRACE_SYSTEM 31bf4af16SAnton Blanchard #define TRACE_SYSTEM powerpc 41bf4af16SAnton Blanchard 51bf4af16SAnton Blanchard #if !defined(_TRACE_POWERPC_H) || defined(TRACE_HEADER_MULTI_READ) 61bf4af16SAnton Blanchard #define _TRACE_POWERPC_H 71bf4af16SAnton Blanchard 81bf4af16SAnton Blanchard #include <linux/tracepoint.h> 91bf4af16SAnton Blanchard 101bf4af16SAnton Blanchard struct pt_regs; 111bf4af16SAnton Blanchard 12d136e273SAnton Blanchard DECLARE_EVENT_CLASS(ppc64_interrupt_class, 131bf4af16SAnton Blanchard 141bf4af16SAnton Blanchard TP_PROTO(struct pt_regs *regs), 151bf4af16SAnton Blanchard 161bf4af16SAnton Blanchard TP_ARGS(regs), 171bf4af16SAnton Blanchard 181bf4af16SAnton Blanchard TP_STRUCT__entry( 191bf4af16SAnton Blanchard __field(struct pt_regs *, regs) 201bf4af16SAnton Blanchard ), 211bf4af16SAnton Blanchard 221bf4af16SAnton Blanchard TP_fast_assign( 231bf4af16SAnton Blanchard __entry->regs = regs; 241bf4af16SAnton Blanchard ), 251bf4af16SAnton Blanchard 261bf4af16SAnton Blanchard TP_printk("pt_regs=%p", __entry->regs) 271bf4af16SAnton Blanchard ); 281bf4af16SAnton Blanchard 29d136e273SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, irq_entry, 301bf4af16SAnton Blanchard 311bf4af16SAnton Blanchard TP_PROTO(struct pt_regs *regs), 321bf4af16SAnton Blanchard 33d136e273SAnton Blanchard TP_ARGS(regs) 341bf4af16SAnton Blanchard ); 351bf4af16SAnton Blanchard 36d136e273SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, irq_exit, 376795b85cSAnton Blanchard 386795b85cSAnton Blanchard TP_PROTO(struct pt_regs *regs), 396795b85cSAnton Blanchard 40d136e273SAnton Blanchard TP_ARGS(regs) 416795b85cSAnton Blanchard ); 426795b85cSAnton Blanchard 43d136e273SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_entry, 446795b85cSAnton Blanchard 456795b85cSAnton Blanchard TP_PROTO(struct pt_regs *regs), 466795b85cSAnton Blanchard 47d136e273SAnton Blanchard TP_ARGS(regs) 48d136e273SAnton Blanchard ); 496795b85cSAnton Blanchard 50d136e273SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit, 516795b85cSAnton Blanchard 52d136e273SAnton Blanchard TP_PROTO(struct pt_regs *regs), 536795b85cSAnton Blanchard 54d136e273SAnton Blanchard TP_ARGS(regs) 556795b85cSAnton Blanchard ); 566795b85cSAnton Blanchard 575b2a1529SAnton Blanchard #ifdef CONFIG_PPC_DOORBELL 585b2a1529SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, doorbell_entry, 595b2a1529SAnton Blanchard 605b2a1529SAnton Blanchard TP_PROTO(struct pt_regs *regs), 615b2a1529SAnton Blanchard 625b2a1529SAnton Blanchard TP_ARGS(regs) 635b2a1529SAnton Blanchard ); 645b2a1529SAnton Blanchard 655b2a1529SAnton Blanchard DEFINE_EVENT(ppc64_interrupt_class, doorbell_exit, 665b2a1529SAnton Blanchard 675b2a1529SAnton Blanchard TP_PROTO(struct pt_regs *regs), 685b2a1529SAnton Blanchard 695b2a1529SAnton Blanchard TP_ARGS(regs) 705b2a1529SAnton Blanchard ); 715b2a1529SAnton Blanchard #endif 725b2a1529SAnton Blanchard 73c8cd093aSAnton Blanchard #ifdef CONFIG_PPC_PSERIES 748cf868afSSteven Rostedt (Red Hat) extern int hcall_tracepoint_regfunc(void); 75c8cd093aSAnton Blanchard extern void hcall_tracepoint_unregfunc(void); 76c8cd093aSAnton Blanchard 77126df08cSDenis Kirjanov TRACE_EVENT_FN_COND(hcall_entry, 78c8cd093aSAnton Blanchard 796f26353cSAnton Blanchard TP_PROTO(unsigned long opcode, unsigned long *args), 80c8cd093aSAnton Blanchard 816f26353cSAnton Blanchard TP_ARGS(opcode, args), 82c8cd093aSAnton Blanchard 83126df08cSDenis Kirjanov TP_CONDITION(cpu_online(raw_smp_processor_id())), 84126df08cSDenis Kirjanov 85c8cd093aSAnton Blanchard TP_STRUCT__entry( 86c8cd093aSAnton Blanchard __field(unsigned long, opcode) 87c8cd093aSAnton Blanchard ), 88c8cd093aSAnton Blanchard 89c8cd093aSAnton Blanchard TP_fast_assign( 90c8cd093aSAnton Blanchard __entry->opcode = opcode; 91c8cd093aSAnton Blanchard ), 92c8cd093aSAnton Blanchard 93c8cd093aSAnton Blanchard TP_printk("opcode=%lu", __entry->opcode), 94c8cd093aSAnton Blanchard 95c8cd093aSAnton Blanchard hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc 96c8cd093aSAnton Blanchard ); 97c8cd093aSAnton Blanchard 98126df08cSDenis Kirjanov TRACE_EVENT_FN_COND(hcall_exit, 99c8cd093aSAnton Blanchard 1008f2133ccSMichael Ellerman TP_PROTO(unsigned long opcode, long retval, unsigned long *retbuf), 101c8cd093aSAnton Blanchard 1026f26353cSAnton Blanchard TP_ARGS(opcode, retval, retbuf), 103c8cd093aSAnton Blanchard 104126df08cSDenis Kirjanov TP_CONDITION(cpu_online(raw_smp_processor_id())), 105126df08cSDenis Kirjanov 106c8cd093aSAnton Blanchard TP_STRUCT__entry( 107c8cd093aSAnton Blanchard __field(unsigned long, opcode) 1088f2133ccSMichael Ellerman __field(long, retval) 109c8cd093aSAnton Blanchard ), 110c8cd093aSAnton Blanchard 111c8cd093aSAnton Blanchard TP_fast_assign( 112c8cd093aSAnton Blanchard __entry->opcode = opcode; 113c8cd093aSAnton Blanchard __entry->retval = retval; 114c8cd093aSAnton Blanchard ), 115c8cd093aSAnton Blanchard 1168f2133ccSMichael Ellerman TP_printk("opcode=%lu retval=%ld", __entry->opcode, __entry->retval), 117c8cd093aSAnton Blanchard 118c8cd093aSAnton Blanchard hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc 119c8cd093aSAnton Blanchard ); 120c8cd093aSAnton Blanchard #endif 121c8cd093aSAnton Blanchard 122*2c81ca7fSNathan Lynch #ifdef CONFIG_PPC_RTAS 123*2c81ca7fSNathan Lynch 124*2c81ca7fSNathan Lynch #include <asm/rtas-types.h> 125*2c81ca7fSNathan Lynch 126*2c81ca7fSNathan Lynch TRACE_EVENT(rtas_input, 127*2c81ca7fSNathan Lynch 128*2c81ca7fSNathan Lynch TP_PROTO(struct rtas_args *rtas_args, const char *name), 129*2c81ca7fSNathan Lynch 130*2c81ca7fSNathan Lynch TP_ARGS(rtas_args, name), 131*2c81ca7fSNathan Lynch 132*2c81ca7fSNathan Lynch TP_STRUCT__entry( 133*2c81ca7fSNathan Lynch __field(__u32, nargs) 134*2c81ca7fSNathan Lynch __string(name, name) 135*2c81ca7fSNathan Lynch __dynamic_array(__u32, inputs, be32_to_cpu(rtas_args->nargs)) 136*2c81ca7fSNathan Lynch ), 137*2c81ca7fSNathan Lynch 138*2c81ca7fSNathan Lynch TP_fast_assign( 139*2c81ca7fSNathan Lynch __entry->nargs = be32_to_cpu(rtas_args->nargs); 140*2c81ca7fSNathan Lynch __assign_str(name, name); 141*2c81ca7fSNathan Lynch be32_to_cpu_array(__get_dynamic_array(inputs), rtas_args->args, __entry->nargs); 142*2c81ca7fSNathan Lynch ), 143*2c81ca7fSNathan Lynch 144*2c81ca7fSNathan Lynch TP_printk("%s arguments: %s", __get_str(name), 145*2c81ca7fSNathan Lynch __print_array(__get_dynamic_array(inputs), __entry->nargs, 4) 146*2c81ca7fSNathan Lynch ) 147*2c81ca7fSNathan Lynch ); 148*2c81ca7fSNathan Lynch 149*2c81ca7fSNathan Lynch TRACE_EVENT(rtas_output, 150*2c81ca7fSNathan Lynch 151*2c81ca7fSNathan Lynch TP_PROTO(struct rtas_args *rtas_args, const char *name), 152*2c81ca7fSNathan Lynch 153*2c81ca7fSNathan Lynch TP_ARGS(rtas_args, name), 154*2c81ca7fSNathan Lynch 155*2c81ca7fSNathan Lynch TP_STRUCT__entry( 156*2c81ca7fSNathan Lynch __field(__u32, nr_other) 157*2c81ca7fSNathan Lynch __field(__s32, status) 158*2c81ca7fSNathan Lynch __string(name, name) 159*2c81ca7fSNathan Lynch __dynamic_array(__u32, other_outputs, be32_to_cpu(rtas_args->nret) - 1) 160*2c81ca7fSNathan Lynch ), 161*2c81ca7fSNathan Lynch 162*2c81ca7fSNathan Lynch TP_fast_assign( 163*2c81ca7fSNathan Lynch __entry->nr_other = be32_to_cpu(rtas_args->nret) - 1; 164*2c81ca7fSNathan Lynch __entry->status = be32_to_cpu(rtas_args->rets[0]); 165*2c81ca7fSNathan Lynch __assign_str(name, name); 166*2c81ca7fSNathan Lynch be32_to_cpu_array(__get_dynamic_array(other_outputs), 167*2c81ca7fSNathan Lynch &rtas_args->rets[1], __entry->nr_other); 168*2c81ca7fSNathan Lynch ), 169*2c81ca7fSNathan Lynch 170*2c81ca7fSNathan Lynch TP_printk("%s status: %d, other outputs: %s", __get_str(name), __entry->status, 171*2c81ca7fSNathan Lynch __print_array(__get_dynamic_array(other_outputs), 172*2c81ca7fSNathan Lynch __entry->nr_other, 4) 173*2c81ca7fSNathan Lynch ) 174*2c81ca7fSNathan Lynch ); 175*2c81ca7fSNathan Lynch 176*2c81ca7fSNathan Lynch DECLARE_EVENT_CLASS(rtas_parameter_block, 177*2c81ca7fSNathan Lynch 178*2c81ca7fSNathan Lynch TP_PROTO(struct rtas_args *rtas_args), 179*2c81ca7fSNathan Lynch 180*2c81ca7fSNathan Lynch TP_ARGS(rtas_args), 181*2c81ca7fSNathan Lynch 182*2c81ca7fSNathan Lynch TP_STRUCT__entry( 183*2c81ca7fSNathan Lynch __field(u32, token) 184*2c81ca7fSNathan Lynch __field(u32, nargs) 185*2c81ca7fSNathan Lynch __field(u32, nret) 186*2c81ca7fSNathan Lynch __array(__u32, params, 16) 187*2c81ca7fSNathan Lynch ), 188*2c81ca7fSNathan Lynch 189*2c81ca7fSNathan Lynch TP_fast_assign( 190*2c81ca7fSNathan Lynch __entry->token = be32_to_cpu(rtas_args->token); 191*2c81ca7fSNathan Lynch __entry->nargs = be32_to_cpu(rtas_args->nargs); 192*2c81ca7fSNathan Lynch __entry->nret = be32_to_cpu(rtas_args->nret); 193*2c81ca7fSNathan Lynch be32_to_cpu_array(__entry->params, rtas_args->args, ARRAY_SIZE(rtas_args->args)); 194*2c81ca7fSNathan Lynch ), 195*2c81ca7fSNathan Lynch 196*2c81ca7fSNathan Lynch TP_printk("token=%u nargs=%u nret=%u params:" 197*2c81ca7fSNathan Lynch " [0]=0x%08x [1]=0x%08x [2]=0x%08x [3]=0x%08x" 198*2c81ca7fSNathan Lynch " [4]=0x%08x [5]=0x%08x [6]=0x%08x [7]=0x%08x" 199*2c81ca7fSNathan Lynch " [8]=0x%08x [9]=0x%08x [10]=0x%08x [11]=0x%08x" 200*2c81ca7fSNathan Lynch " [12]=0x%08x [13]=0x%08x [14]=0x%08x [15]=0x%08x", 201*2c81ca7fSNathan Lynch __entry->token, __entry->nargs, __entry->nret, 202*2c81ca7fSNathan Lynch __entry->params[0], __entry->params[1], __entry->params[2], __entry->params[3], 203*2c81ca7fSNathan Lynch __entry->params[4], __entry->params[5], __entry->params[6], __entry->params[7], 204*2c81ca7fSNathan Lynch __entry->params[8], __entry->params[9], __entry->params[10], __entry->params[11], 205*2c81ca7fSNathan Lynch __entry->params[12], __entry->params[13], __entry->params[14], __entry->params[15] 206*2c81ca7fSNathan Lynch ) 207*2c81ca7fSNathan Lynch ); 208*2c81ca7fSNathan Lynch 209*2c81ca7fSNathan Lynch DEFINE_EVENT(rtas_parameter_block, rtas_ll_entry, 210*2c81ca7fSNathan Lynch 211*2c81ca7fSNathan Lynch TP_PROTO(struct rtas_args *rtas_args), 212*2c81ca7fSNathan Lynch 213*2c81ca7fSNathan Lynch TP_ARGS(rtas_args) 214*2c81ca7fSNathan Lynch ); 215*2c81ca7fSNathan Lynch 216*2c81ca7fSNathan Lynch DEFINE_EVENT(rtas_parameter_block, rtas_ll_exit, 217*2c81ca7fSNathan Lynch 218*2c81ca7fSNathan Lynch TP_PROTO(struct rtas_args *rtas_args), 219*2c81ca7fSNathan Lynch 220*2c81ca7fSNathan Lynch TP_ARGS(rtas_args) 221*2c81ca7fSNathan Lynch ); 222*2c81ca7fSNathan Lynch 223*2c81ca7fSNathan Lynch #endif /* CONFIG_PPC_RTAS */ 224*2c81ca7fSNathan Lynch 225c49f6353SAnton Blanchard #ifdef CONFIG_PPC_POWERNV 2268cf868afSSteven Rostedt (Red Hat) extern int opal_tracepoint_regfunc(void); 227c49f6353SAnton Blanchard extern void opal_tracepoint_unregfunc(void); 228c49f6353SAnton Blanchard 229c49f6353SAnton Blanchard TRACE_EVENT_FN(opal_entry, 230c49f6353SAnton Blanchard 231c49f6353SAnton Blanchard TP_PROTO(unsigned long opcode, unsigned long *args), 232c49f6353SAnton Blanchard 233c49f6353SAnton Blanchard TP_ARGS(opcode, args), 234c49f6353SAnton Blanchard 235c49f6353SAnton Blanchard TP_STRUCT__entry( 236c49f6353SAnton Blanchard __field(unsigned long, opcode) 237c49f6353SAnton Blanchard ), 238c49f6353SAnton Blanchard 239c49f6353SAnton Blanchard TP_fast_assign( 240c49f6353SAnton Blanchard __entry->opcode = opcode; 241c49f6353SAnton Blanchard ), 242c49f6353SAnton Blanchard 243c49f6353SAnton Blanchard TP_printk("opcode=%lu", __entry->opcode), 244c49f6353SAnton Blanchard 245c49f6353SAnton Blanchard opal_tracepoint_regfunc, opal_tracepoint_unregfunc 246c49f6353SAnton Blanchard ); 247c49f6353SAnton Blanchard 248c49f6353SAnton Blanchard TRACE_EVENT_FN(opal_exit, 249c49f6353SAnton Blanchard 250c49f6353SAnton Blanchard TP_PROTO(unsigned long opcode, unsigned long retval), 251c49f6353SAnton Blanchard 252c49f6353SAnton Blanchard TP_ARGS(opcode, retval), 253c49f6353SAnton Blanchard 254c49f6353SAnton Blanchard TP_STRUCT__entry( 255c49f6353SAnton Blanchard __field(unsigned long, opcode) 256c49f6353SAnton Blanchard __field(unsigned long, retval) 257c49f6353SAnton Blanchard ), 258c49f6353SAnton Blanchard 259c49f6353SAnton Blanchard TP_fast_assign( 260c49f6353SAnton Blanchard __entry->opcode = opcode; 261c49f6353SAnton Blanchard __entry->retval = retval; 262c49f6353SAnton Blanchard ), 263c49f6353SAnton Blanchard 264c49f6353SAnton Blanchard TP_printk("opcode=%lu retval=%lu", __entry->opcode, __entry->retval), 265c49f6353SAnton Blanchard 266c49f6353SAnton Blanchard opal_tracepoint_regfunc, opal_tracepoint_unregfunc 267c49f6353SAnton Blanchard ); 268c49f6353SAnton Blanchard #endif 269c49f6353SAnton Blanchard 270cfcb3d80SAneesh Kumar K.V TRACE_EVENT(hash_fault, 271cfcb3d80SAneesh Kumar K.V 272cfcb3d80SAneesh Kumar K.V TP_PROTO(unsigned long addr, unsigned long access, unsigned long trap), 273cfcb3d80SAneesh Kumar K.V TP_ARGS(addr, access, trap), 274cfcb3d80SAneesh Kumar K.V TP_STRUCT__entry( 275cfcb3d80SAneesh Kumar K.V __field(unsigned long, addr) 276cfcb3d80SAneesh Kumar K.V __field(unsigned long, access) 277cfcb3d80SAneesh Kumar K.V __field(unsigned long, trap) 278cfcb3d80SAneesh Kumar K.V ), 279cfcb3d80SAneesh Kumar K.V 280cfcb3d80SAneesh Kumar K.V TP_fast_assign( 281cfcb3d80SAneesh Kumar K.V __entry->addr = addr; 282cfcb3d80SAneesh Kumar K.V __entry->access = access; 283cfcb3d80SAneesh Kumar K.V __entry->trap = trap; 284cfcb3d80SAneesh Kumar K.V ), 285cfcb3d80SAneesh Kumar K.V 286cfcb3d80SAneesh Kumar K.V TP_printk("hash fault with addr 0x%lx and access = 0x%lx trap = 0x%lx", 287cfcb3d80SAneesh Kumar K.V __entry->addr, __entry->access, __entry->trap) 288cfcb3d80SAneesh Kumar K.V ); 289cfcb3d80SAneesh Kumar K.V 2900428491cSBalbir Singh 2910428491cSBalbir Singh TRACE_EVENT(tlbie, 2920428491cSBalbir Singh 2930428491cSBalbir Singh TP_PROTO(unsigned long lpid, unsigned long local, unsigned long rb, 2940428491cSBalbir Singh unsigned long rs, unsigned long ric, unsigned long prs, 2950428491cSBalbir Singh unsigned long r), 2960428491cSBalbir Singh TP_ARGS(lpid, local, rb, rs, ric, prs, r), 2970428491cSBalbir Singh TP_STRUCT__entry( 2980428491cSBalbir Singh __field(unsigned long, lpid) 2990428491cSBalbir Singh __field(unsigned long, local) 3000428491cSBalbir Singh __field(unsigned long, rb) 3010428491cSBalbir Singh __field(unsigned long, rs) 3020428491cSBalbir Singh __field(unsigned long, ric) 3030428491cSBalbir Singh __field(unsigned long, prs) 3040428491cSBalbir Singh __field(unsigned long, r) 3050428491cSBalbir Singh ), 3060428491cSBalbir Singh 3070428491cSBalbir Singh TP_fast_assign( 3080428491cSBalbir Singh __entry->lpid = lpid; 3090428491cSBalbir Singh __entry->local = local; 3100428491cSBalbir Singh __entry->rb = rb; 3110428491cSBalbir Singh __entry->rs = rs; 3120428491cSBalbir Singh __entry->ric = ric; 3130428491cSBalbir Singh __entry->prs = prs; 3140428491cSBalbir Singh __entry->r = r; 3150428491cSBalbir Singh ), 3160428491cSBalbir Singh 3170428491cSBalbir Singh TP_printk("lpid=%ld, local=%ld, rb=0x%lx, rs=0x%lx, ric=0x%lx, " 3180428491cSBalbir Singh "prs=0x%lx, r=0x%lx", __entry->lpid, __entry->local, 3190428491cSBalbir Singh __entry->rb, __entry->rs, __entry->ric, __entry->prs, 3200428491cSBalbir Singh __entry->r) 3210428491cSBalbir Singh ); 3220428491cSBalbir Singh 3238114c36eSChristophe Leroy TRACE_EVENT(tlbia, 3248114c36eSChristophe Leroy 3258114c36eSChristophe Leroy TP_PROTO(unsigned long id), 3268114c36eSChristophe Leroy TP_ARGS(id), 3278114c36eSChristophe Leroy TP_STRUCT__entry( 3288114c36eSChristophe Leroy __field(unsigned long, id) 3298114c36eSChristophe Leroy ), 3308114c36eSChristophe Leroy 3318114c36eSChristophe Leroy TP_fast_assign( 3328114c36eSChristophe Leroy __entry->id = id; 3338114c36eSChristophe Leroy ), 3348114c36eSChristophe Leroy 3358114c36eSChristophe Leroy TP_printk("ctx.id=0x%lx", __entry->id) 3368114c36eSChristophe Leroy ); 3378114c36eSChristophe Leroy 3381bf4af16SAnton Blanchard #endif /* _TRACE_POWERPC_H */ 3391bf4af16SAnton Blanchard 3401bf4af16SAnton Blanchard #undef TRACE_INCLUDE_PATH 3411bf4af16SAnton Blanchard #undef TRACE_INCLUDE_FILE 3421bf4af16SAnton Blanchard 3431bf4af16SAnton Blanchard #define TRACE_INCLUDE_PATH asm 3441bf4af16SAnton Blanchard #define TRACE_INCLUDE_FILE trace 3451bf4af16SAnton Blanchard 3461bf4af16SAnton Blanchard #include <trace/define_trace.h> 347