xref: /linux/drivers/firmware/qcom/qcom_scm_trace.h (revision 368cf60c36a3a311474de08e52dc6314df3b06ce)
1*f6bb2daaSYuvaraj Ranganathan /* SPDX-License-Identifier: GPL-2.0-only */
2*f6bb2daaSYuvaraj Ranganathan /*
3*f6bb2daaSYuvaraj Ranganathan  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4*f6bb2daaSYuvaraj Ranganathan  */
5*f6bb2daaSYuvaraj Ranganathan 
6*f6bb2daaSYuvaraj Ranganathan #undef TRACE_SYSTEM
7*f6bb2daaSYuvaraj Ranganathan #define TRACE_SYSTEM qcom_scm
8*f6bb2daaSYuvaraj Ranganathan 
9*f6bb2daaSYuvaraj Ranganathan #if !defined(_TRACE_SCM_SMC_INTERFACE_H) || defined(TRACE_HEADER_MULTI_READ)
10*f6bb2daaSYuvaraj Ranganathan 
11*f6bb2daaSYuvaraj Ranganathan #define _TRACE_SCM_SMC_INTERFACE_H
12*f6bb2daaSYuvaraj Ranganathan 
13*f6bb2daaSYuvaraj Ranganathan #include <linux/tracepoint.h>
14*f6bb2daaSYuvaraj Ranganathan 
15*f6bb2daaSYuvaraj Ranganathan TRACE_EVENT(scm_smc_request,
16*f6bb2daaSYuvaraj Ranganathan 
17*f6bb2daaSYuvaraj Ranganathan 	TP_PROTO(unsigned long a0, const struct arm_smccc_args *smc),
18*f6bb2daaSYuvaraj Ranganathan 
19*f6bb2daaSYuvaraj Ranganathan 	TP_ARGS(a0, smc),
20*f6bb2daaSYuvaraj Ranganathan 
21*f6bb2daaSYuvaraj Ranganathan 	TP_STRUCT__entry(
22*f6bb2daaSYuvaraj Ranganathan 		__field(u64, smc_id)
23*f6bb2daaSYuvaraj Ranganathan 		__field(u8, svc_id)
24*f6bb2daaSYuvaraj Ranganathan 		__field(u8, cmd_id)
25*f6bb2daaSYuvaraj Ranganathan 		__field(u8, args_cnt)
26*f6bb2daaSYuvaraj Ranganathan 		__dynamic_array(unsigned long, args,
27*f6bb2daaSYuvaraj Ranganathan 				min_t(u8, (smc->args[1] & 0xF), (u8)6))
28*f6bb2daaSYuvaraj Ranganathan 	),
29*f6bb2daaSYuvaraj Ranganathan 
30*f6bb2daaSYuvaraj Ranganathan 	TP_fast_assign(
31*f6bb2daaSYuvaraj Ranganathan 		__entry->smc_id = a0;
32*f6bb2daaSYuvaraj Ranganathan 		__entry->svc_id = (smc->args[0] >> 8) & 0xFF;
33*f6bb2daaSYuvaraj Ranganathan 		__entry->cmd_id = smc->args[0] & 0xFF;
34*f6bb2daaSYuvaraj Ranganathan 		u8 n = min_t(u8, (smc->args[1] & 0xF), (u8)6);
35*f6bb2daaSYuvaraj Ranganathan 
36*f6bb2daaSYuvaraj Ranganathan 		__entry->args_cnt = n;
37*f6bb2daaSYuvaraj Ranganathan 
38*f6bb2daaSYuvaraj Ranganathan 		unsigned long *dst = __get_dynamic_array(args);
39*f6bb2daaSYuvaraj Ranganathan 
40*f6bb2daaSYuvaraj Ranganathan 		for (int i = 0; i < n; i++)
41*f6bb2daaSYuvaraj Ranganathan 			dst[i] = smc->args[2 + i];
42*f6bb2daaSYuvaraj Ranganathan 	),
43*f6bb2daaSYuvaraj Ranganathan 
44*f6bb2daaSYuvaraj Ranganathan 	TP_printk("smc_id:0x%08llx svc_id:0x%02x cmd_id:0x%02x args_cnt:%u args:%s",
45*f6bb2daaSYuvaraj Ranganathan 		  __entry->smc_id, __entry->svc_id, __entry->cmd_id, __entry->args_cnt,
46*f6bb2daaSYuvaraj Ranganathan 		  __print_dynamic_array(args, sizeof(unsigned long)))
47*f6bb2daaSYuvaraj Ranganathan );
48*f6bb2daaSYuvaraj Ranganathan 
49*f6bb2daaSYuvaraj Ranganathan TRACE_EVENT(scm_waitq_sleep,
50*f6bb2daaSYuvaraj Ranganathan 
51*f6bb2daaSYuvaraj Ranganathan 	TP_PROTO(u32 wq_ctx, u32 smc_ctx),
52*f6bb2daaSYuvaraj Ranganathan 
53*f6bb2daaSYuvaraj Ranganathan 	TP_ARGS(wq_ctx, smc_ctx),
54*f6bb2daaSYuvaraj Ranganathan 
55*f6bb2daaSYuvaraj Ranganathan 	TP_STRUCT__entry(
56*f6bb2daaSYuvaraj Ranganathan 		__field(u32, wq_ctx)
57*f6bb2daaSYuvaraj Ranganathan 		__field(u32, smc_call_ctx)
58*f6bb2daaSYuvaraj Ranganathan 	),
59*f6bb2daaSYuvaraj Ranganathan 
60*f6bb2daaSYuvaraj Ranganathan 	TP_fast_assign(
61*f6bb2daaSYuvaraj Ranganathan 		__entry->wq_ctx = wq_ctx;
62*f6bb2daaSYuvaraj Ranganathan 		__entry->smc_call_ctx = smc_ctx;
63*f6bb2daaSYuvaraj Ranganathan 	),
64*f6bb2daaSYuvaraj Ranganathan 
65*f6bb2daaSYuvaraj Ranganathan 	TP_printk("wq_ctx:%u, smc_call_ctx:%u", __entry->wq_ctx, __entry->smc_call_ctx)
66*f6bb2daaSYuvaraj Ranganathan );
67*f6bb2daaSYuvaraj Ranganathan 
68*f6bb2daaSYuvaraj Ranganathan TRACE_EVENT(scm_waitq_resume,
69*f6bb2daaSYuvaraj Ranganathan 
70*f6bb2daaSYuvaraj Ranganathan 	TP_PROTO(u32 smc_ctx),
71*f6bb2daaSYuvaraj Ranganathan 
72*f6bb2daaSYuvaraj Ranganathan 	TP_ARGS(smc_ctx),
73*f6bb2daaSYuvaraj Ranganathan 
74*f6bb2daaSYuvaraj Ranganathan 	TP_STRUCT__entry(
75*f6bb2daaSYuvaraj Ranganathan 		__field(u32, smc_call_ctx)
76*f6bb2daaSYuvaraj Ranganathan 	),
77*f6bb2daaSYuvaraj Ranganathan 
78*f6bb2daaSYuvaraj Ranganathan 	TP_fast_assign(
79*f6bb2daaSYuvaraj Ranganathan 		__entry->smc_call_ctx = smc_ctx;
80*f6bb2daaSYuvaraj Ranganathan 	),
81*f6bb2daaSYuvaraj Ranganathan 
82*f6bb2daaSYuvaraj Ranganathan 	TP_printk("smc_call_ctx:%u", __entry->smc_call_ctx)
83*f6bb2daaSYuvaraj Ranganathan );
84*f6bb2daaSYuvaraj Ranganathan 
85*f6bb2daaSYuvaraj Ranganathan TRACE_EVENT(scm_waitq_get_wq_ctx,
86*f6bb2daaSYuvaraj Ranganathan 
87*f6bb2daaSYuvaraj Ranganathan 	TP_PROTO(u32 wq_ctx, u32 flags, u32 pending),
88*f6bb2daaSYuvaraj Ranganathan 
89*f6bb2daaSYuvaraj Ranganathan 	TP_ARGS(wq_ctx, flags, pending),
90*f6bb2daaSYuvaraj Ranganathan 
91*f6bb2daaSYuvaraj Ranganathan 	TP_STRUCT__entry(
92*f6bb2daaSYuvaraj Ranganathan 		__field(u32, wq_ctx)
93*f6bb2daaSYuvaraj Ranganathan 		__field(u32, flags)
94*f6bb2daaSYuvaraj Ranganathan 		__field(u32, more_pending)
95*f6bb2daaSYuvaraj Ranganathan 	),
96*f6bb2daaSYuvaraj Ranganathan 
97*f6bb2daaSYuvaraj Ranganathan 	TP_fast_assign(
98*f6bb2daaSYuvaraj Ranganathan 		__entry->wq_ctx = wq_ctx;
99*f6bb2daaSYuvaraj Ranganathan 		__entry->flags = flags;
100*f6bb2daaSYuvaraj Ranganathan 		__entry->more_pending = pending;
101*f6bb2daaSYuvaraj Ranganathan 	),
102*f6bb2daaSYuvaraj Ranganathan 
103*f6bb2daaSYuvaraj Ranganathan 	TP_printk("wq_ctx:%u, flags:%u, more_pending:%u",
104*f6bb2daaSYuvaraj Ranganathan 		  __entry->wq_ctx, __entry->flags, __entry->more_pending)
105*f6bb2daaSYuvaraj Ranganathan );
106*f6bb2daaSYuvaraj Ranganathan 
107*f6bb2daaSYuvaraj Ranganathan TRACE_EVENT(scm_smc_done,
108*f6bb2daaSYuvaraj Ranganathan 
109*f6bb2daaSYuvaraj Ranganathan 	TP_PROTO(int ret, u64 smc_id, struct arm_smccc_res *smc_res),
110*f6bb2daaSYuvaraj Ranganathan 
111*f6bb2daaSYuvaraj Ranganathan 	TP_ARGS(ret, smc_id, smc_res),
112*f6bb2daaSYuvaraj Ranganathan 
113*f6bb2daaSYuvaraj Ranganathan 	TP_STRUCT__entry(
114*f6bb2daaSYuvaraj Ranganathan 		__field(int, ret)
115*f6bb2daaSYuvaraj Ranganathan 		__field(u64, smc_id)
116*f6bb2daaSYuvaraj Ranganathan 		__field(unsigned long, res)
117*f6bb2daaSYuvaraj Ranganathan 		__field(unsigned long, res0)
118*f6bb2daaSYuvaraj Ranganathan 		__field(unsigned long, res1)
119*f6bb2daaSYuvaraj Ranganathan 		__field(unsigned long, res2)
120*f6bb2daaSYuvaraj Ranganathan 	),
121*f6bb2daaSYuvaraj Ranganathan 
122*f6bb2daaSYuvaraj Ranganathan 	TP_fast_assign(
123*f6bb2daaSYuvaraj Ranganathan 		__entry->ret = ret;
124*f6bb2daaSYuvaraj Ranganathan 		__entry->smc_id = smc_id;
125*f6bb2daaSYuvaraj Ranganathan 		__entry->res = smc_res->a0;
126*f6bb2daaSYuvaraj Ranganathan 		__entry->res0 = smc_res->a1;
127*f6bb2daaSYuvaraj Ranganathan 		__entry->res1 = smc_res->a2;
128*f6bb2daaSYuvaraj Ranganathan 		__entry->res2 = smc_res->a3;
129*f6bb2daaSYuvaraj Ranganathan 	),
130*f6bb2daaSYuvaraj Ranganathan 
131*f6bb2daaSYuvaraj Ranganathan 	TP_printk("smc_id:0x%08llx, ret:%d res_to_callee:0x%lx res0:0x%lx res1:0x%lx res2:0x%lx",
132*f6bb2daaSYuvaraj Ranganathan 		  __entry->smc_id, __entry->ret, __entry->res,
133*f6bb2daaSYuvaraj Ranganathan 		  __entry->res0, __entry->res1, __entry->res2)
134*f6bb2daaSYuvaraj Ranganathan );
135*f6bb2daaSYuvaraj Ranganathan 
136*f6bb2daaSYuvaraj Ranganathan #endif /* _TRACE_SCM_SMC_INTERFACE_H */
137*f6bb2daaSYuvaraj Ranganathan 
138*f6bb2daaSYuvaraj Ranganathan #undef TRACE_INCLUDE_PATH
139*f6bb2daaSYuvaraj Ranganathan #define TRACE_INCLUDE_PATH .
140*f6bb2daaSYuvaraj Ranganathan #define TRACE_INCLUDE_FILE qcom_scm_trace
141*f6bb2daaSYuvaraj Ranganathan 
142*f6bb2daaSYuvaraj Ranganathan #include <trace/define_trace.h>
143*f6bb2daaSYuvaraj Ranganathan 
144