xref: /OK3568_Linux_fs/kernel/arch/powerpc/include/asm/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #undef TRACE_SYSTEM
3*4882a593Smuzhiyun #define TRACE_SYSTEM powerpc
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #if !defined(_TRACE_POWERPC_H) || defined(TRACE_HEADER_MULTI_READ)
6*4882a593Smuzhiyun #define _TRACE_POWERPC_H
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/tracepoint.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun struct pt_regs;
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ppc64_interrupt_class,
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun 	TP_ARGS(regs),
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 	TP_STRUCT__entry(
19*4882a593Smuzhiyun 		__field(struct pt_regs *, regs)
20*4882a593Smuzhiyun 	),
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun 	TP_fast_assign(
23*4882a593Smuzhiyun 		__entry->regs = regs;
24*4882a593Smuzhiyun 	),
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	TP_printk("pt_regs=%p", __entry->regs)
27*4882a593Smuzhiyun );
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, irq_entry,
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun 	TP_ARGS(regs)
34*4882a593Smuzhiyun );
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, irq_exit,
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	TP_ARGS(regs)
41*4882a593Smuzhiyun );
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_entry,
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	TP_ARGS(regs)
48*4882a593Smuzhiyun );
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun 	TP_ARGS(regs)
55*4882a593Smuzhiyun );
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #ifdef CONFIG_PPC_DOORBELL
58*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, doorbell_entry,
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	TP_ARGS(regs)
63*4882a593Smuzhiyun );
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun DEFINE_EVENT(ppc64_interrupt_class, doorbell_exit,
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun 	TP_PROTO(struct pt_regs *regs),
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun 	TP_ARGS(regs)
70*4882a593Smuzhiyun );
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #ifdef CONFIG_PPC_PSERIES
74*4882a593Smuzhiyun extern int hcall_tracepoint_regfunc(void);
75*4882a593Smuzhiyun extern void hcall_tracepoint_unregfunc(void);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun TRACE_EVENT_FN_COND(hcall_entry,
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun 	TP_PROTO(unsigned long opcode, unsigned long *args),
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun 	TP_ARGS(opcode, args),
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	TP_CONDITION(cpu_online(raw_smp_processor_id())),
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	TP_STRUCT__entry(
86*4882a593Smuzhiyun 		__field(unsigned long, opcode)
87*4882a593Smuzhiyun 	),
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	TP_fast_assign(
90*4882a593Smuzhiyun 		__entry->opcode = opcode;
91*4882a593Smuzhiyun 	),
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun 	TP_printk("opcode=%lu", __entry->opcode),
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun 	hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
96*4882a593Smuzhiyun );
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun TRACE_EVENT_FN_COND(hcall_exit,
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun 	TP_PROTO(unsigned long opcode, long retval, unsigned long *retbuf),
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun 	TP_ARGS(opcode, retval, retbuf),
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun 	TP_CONDITION(cpu_online(raw_smp_processor_id())),
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun 	TP_STRUCT__entry(
107*4882a593Smuzhiyun 		__field(unsigned long, opcode)
108*4882a593Smuzhiyun 		__field(long, retval)
109*4882a593Smuzhiyun 	),
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 	TP_fast_assign(
112*4882a593Smuzhiyun 		__entry->opcode = opcode;
113*4882a593Smuzhiyun 		__entry->retval = retval;
114*4882a593Smuzhiyun 	),
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun 	TP_printk("opcode=%lu retval=%ld", __entry->opcode, __entry->retval),
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun 	hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
119*4882a593Smuzhiyun );
120*4882a593Smuzhiyun #endif
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun #ifdef CONFIG_PPC_POWERNV
123*4882a593Smuzhiyun extern int opal_tracepoint_regfunc(void);
124*4882a593Smuzhiyun extern void opal_tracepoint_unregfunc(void);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun TRACE_EVENT_FN(opal_entry,
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun 	TP_PROTO(unsigned long opcode, unsigned long *args),
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	TP_ARGS(opcode, args),
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	TP_STRUCT__entry(
133*4882a593Smuzhiyun 		__field(unsigned long, opcode)
134*4882a593Smuzhiyun 	),
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 	TP_fast_assign(
137*4882a593Smuzhiyun 		__entry->opcode = opcode;
138*4882a593Smuzhiyun 	),
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun 	TP_printk("opcode=%lu", __entry->opcode),
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	opal_tracepoint_regfunc, opal_tracepoint_unregfunc
143*4882a593Smuzhiyun );
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun TRACE_EVENT_FN(opal_exit,
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	TP_PROTO(unsigned long opcode, unsigned long retval),
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	TP_ARGS(opcode, retval),
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun 	TP_STRUCT__entry(
152*4882a593Smuzhiyun 		__field(unsigned long, opcode)
153*4882a593Smuzhiyun 		__field(unsigned long, retval)
154*4882a593Smuzhiyun 	),
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun 	TP_fast_assign(
157*4882a593Smuzhiyun 		__entry->opcode = opcode;
158*4882a593Smuzhiyun 		__entry->retval = retval;
159*4882a593Smuzhiyun 	),
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun 	TP_printk("opcode=%lu retval=%lu", __entry->opcode, __entry->retval),
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun 	opal_tracepoint_regfunc, opal_tracepoint_unregfunc
164*4882a593Smuzhiyun );
165*4882a593Smuzhiyun #endif
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun TRACE_EVENT(hash_fault,
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun 	    TP_PROTO(unsigned long addr, unsigned long access, unsigned long trap),
170*4882a593Smuzhiyun 	    TP_ARGS(addr, access, trap),
171*4882a593Smuzhiyun 	    TP_STRUCT__entry(
172*4882a593Smuzhiyun 		    __field(unsigned long, addr)
173*4882a593Smuzhiyun 		    __field(unsigned long, access)
174*4882a593Smuzhiyun 		    __field(unsigned long, trap)
175*4882a593Smuzhiyun 		    ),
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun 	    TP_fast_assign(
178*4882a593Smuzhiyun 		    __entry->addr = addr;
179*4882a593Smuzhiyun 		    __entry->access = access;
180*4882a593Smuzhiyun 		    __entry->trap = trap;
181*4882a593Smuzhiyun 		    ),
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun 	    TP_printk("hash fault with addr 0x%lx and access = 0x%lx trap = 0x%lx",
184*4882a593Smuzhiyun 		      __entry->addr, __entry->access, __entry->trap)
185*4882a593Smuzhiyun );
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun TRACE_EVENT(tlbie,
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun 	TP_PROTO(unsigned long lpid, unsigned long local, unsigned long rb,
191*4882a593Smuzhiyun 		unsigned long rs, unsigned long ric, unsigned long prs,
192*4882a593Smuzhiyun 		unsigned long r),
193*4882a593Smuzhiyun 	TP_ARGS(lpid, local, rb, rs, ric, prs, r),
194*4882a593Smuzhiyun 	TP_STRUCT__entry(
195*4882a593Smuzhiyun 		__field(unsigned long, lpid)
196*4882a593Smuzhiyun 		__field(unsigned long, local)
197*4882a593Smuzhiyun 		__field(unsigned long, rb)
198*4882a593Smuzhiyun 		__field(unsigned long, rs)
199*4882a593Smuzhiyun 		__field(unsigned long, ric)
200*4882a593Smuzhiyun 		__field(unsigned long, prs)
201*4882a593Smuzhiyun 		__field(unsigned long, r)
202*4882a593Smuzhiyun 		),
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	TP_fast_assign(
205*4882a593Smuzhiyun 		__entry->lpid = lpid;
206*4882a593Smuzhiyun 		__entry->local = local;
207*4882a593Smuzhiyun 		__entry->rb = rb;
208*4882a593Smuzhiyun 		__entry->rs = rs;
209*4882a593Smuzhiyun 		__entry->ric = ric;
210*4882a593Smuzhiyun 		__entry->prs = prs;
211*4882a593Smuzhiyun 		__entry->r = r;
212*4882a593Smuzhiyun 		),
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun 	TP_printk("lpid=%ld, local=%ld, rb=0x%lx, rs=0x%lx, ric=0x%lx, "
215*4882a593Smuzhiyun 		"prs=0x%lx, r=0x%lx", __entry->lpid, __entry->local,
216*4882a593Smuzhiyun 		__entry->rb, __entry->rs, __entry->ric, __entry->prs,
217*4882a593Smuzhiyun 		__entry->r)
218*4882a593Smuzhiyun );
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun TRACE_EVENT(tlbia,
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	TP_PROTO(unsigned long id),
223*4882a593Smuzhiyun 	TP_ARGS(id),
224*4882a593Smuzhiyun 	TP_STRUCT__entry(
225*4882a593Smuzhiyun 		__field(unsigned long, id)
226*4882a593Smuzhiyun 		),
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun 	TP_fast_assign(
229*4882a593Smuzhiyun 		__entry->id = id;
230*4882a593Smuzhiyun 		),
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	TP_printk("ctx.id=0x%lx", __entry->id)
233*4882a593Smuzhiyun );
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #endif /* _TRACE_POWERPC_H */
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
238*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH asm
241*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun #include <trace/define_trace.h>
244