xref: /openbmc/linux/arch/powerpc/include/asm/trace.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
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