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