1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
7 #define TRACE_SYSTEM mhi_host
9 #if !defined(_TRACE_EVENT_MHI_HOST_H) || defined(TRACE_HEADER_MULTI_READ)
10 #define _TRACE_EVENT_MHI_HOST_H
12 #include <linux/byteorder/generic.h>
13 #include <linux/tracepoint.h>
14 #include <linux/trace_seq.h>
15 #include "../common.h"
21 #define mhi_state(a, b) TRACE_DEFINE_ENUM(MHI_STATE_##a);
22 #define mhi_state_end(a, b) TRACE_DEFINE_ENUM(MHI_STATE_##a);
29 #define mhi_state(a, b) { MHI_STATE_##a, b },
30 #define mhi_state_end(a, b) { MHI_STATE_##a, b }
33 #undef mhi_pm_state_end
35 #define mhi_pm_state(a, b) TRACE_DEFINE_ENUM(MHI_PM_STATE_##a);
36 #define mhi_pm_state_end(a, b) TRACE_DEFINE_ENUM(MHI_PM_STATE_##a);
41 #undef mhi_pm_state_end
43 #define mhi_pm_state(a, b) { MHI_PM_STATE_##a, b },
44 #define mhi_pm_state_end(a, b) { MHI_PM_STATE_##a, b }
49 #define mhi_ee(a, b) TRACE_DEFINE_ENUM(MHI_EE_##a);
50 #define mhi_ee_end(a, b) TRACE_DEFINE_ENUM(MHI_EE_##a);
57 #define mhi_ee(a, b) { MHI_EE_##a, b },
58 #define mhi_ee_end(a, b) { MHI_EE_##a, b }
61 #undef ch_state_type_end
63 #define ch_state_type(a, b) TRACE_DEFINE_ENUM(MHI_CH_STATE_TYPE_##a);
64 #define ch_state_type_end(a, b) TRACE_DEFINE_ENUM(MHI_CH_STATE_TYPE_##a);
66 MHI_CH_STATE_TYPE_LIST
69 #undef ch_state_type_end
71 #define ch_state_type(a, b) { MHI_CH_STATE_TYPE_##a, b },
72 #define ch_state_type_end(a, b) { MHI_CH_STATE_TYPE_##a, b }
75 #undef dev_st_trans_end
77 #define dev_st_trans(a, b) TRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);
78 #define dev_st_trans_end(a, b) TRACE_DEFINE_ENUM(DEV_ST_TRANSITION_##a);
80 DEV_ST_TRANSITION_LIST
83 #undef dev_st_trans_end
85 #define dev_st_trans(a, b) { DEV_ST_TRANSITION_##a, b },
86 #define dev_st_trans_end(a, b) { DEV_ST_TRANSITION_##a, b }
88 #define TPS(x) tracepoint_string(x)
90 TRACE_EVENT(mhi_gen_tre
,
92 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_chan
*mhi_chan
,
93 struct mhi_ring_element
*mhi_tre
),
95 TP_ARGS(mhi_cntrl
, mhi_chan
, mhi_tre
),
98 __string(name
, mhi_cntrl
->mhi_dev
->name
)
101 __field(uint64_t, tre_ptr
)
102 __field(uint32_t, dword0
)
103 __field(uint32_t, dword1
)
108 __entry
->ch_num
= mhi_chan
->chan
;
109 __entry
->wp
= mhi_tre
;
110 __entry
->tre_ptr
= le64_to_cpu(mhi_tre
->ptr
);
111 __entry
->dword0
= le32_to_cpu(mhi_tre
->dword
[0]);
112 __entry
->dword1
= le32_to_cpu(mhi_tre
->dword
[1]);
115 TP_printk("%s: Chan: %d TRE: 0x%p TRE buf: 0x%llx DWORD0: 0x%08x DWORD1: 0x%08x\n",
116 __get_str(name
), __entry
->ch_num
, __entry
->wp
, __entry
->tre_ptr
,
117 __entry
->dword0
, __entry
->dword1
)
120 TRACE_EVENT(mhi_intvec_states
,
122 TP_PROTO(struct mhi_controller
*mhi_cntrl
, int dev_ee
, int dev_state
),
124 TP_ARGS(mhi_cntrl
, dev_ee
, dev_state
),
127 __string(name
, mhi_cntrl
->mhi_dev
->name
)
128 __field(int, local_ee
)
131 __field(int, dev_state
)
136 __entry
->local_ee
= mhi_cntrl
->ee
;
137 __entry
->state
= mhi_cntrl
->dev_state
;
138 __entry
->dev_ee
= dev_ee
;
139 __entry
->dev_state
= dev_state
;
142 TP_printk("%s: Local EE: %s State: %s Device EE: %s Dev State: %s\n",
144 __print_symbolic(__entry
->local_ee
, MHI_EE_LIST
),
145 __print_symbolic(__entry
->state
, MHI_STATE_LIST
),
146 __print_symbolic(__entry
->dev_ee
, MHI_EE_LIST
),
147 __print_symbolic(__entry
->dev_state
, MHI_STATE_LIST
))
150 TRACE_EVENT(mhi_tryset_pm_state
,
152 TP_PROTO(struct mhi_controller
*mhi_cntrl
, int pm_state
),
154 TP_ARGS(mhi_cntrl
, pm_state
),
157 __string(name
, mhi_cntrl
->mhi_dev
->name
)
158 __field(int, pm_state
)
164 pm_state
= __fls(pm_state
);
165 __entry
->pm_state
= pm_state
;
168 TP_printk("%s: PM state: %s\n", __get_str(name
),
169 __print_symbolic(__entry
->pm_state
, MHI_PM_STATE_LIST
))
172 DECLARE_EVENT_CLASS(mhi_process_event_ring
,
174 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_ring_element
*rp
),
176 TP_ARGS(mhi_cntrl
, rp
),
179 __string(name
, mhi_cntrl
->mhi_dev
->name
)
180 __field(uint32_t, dword0
)
181 __field(uint32_t, dword1
)
183 __field(uint64_t, ptr
)
190 __entry
->ptr
= le64_to_cpu(rp
->ptr
);
191 __entry
->dword0
= le32_to_cpu(rp
->dword
[0]);
192 __entry
->dword1
= le32_to_cpu(rp
->dword
[1]);
193 __entry
->state
= MHI_TRE_GET_EV_STATE(rp
);
196 TP_printk("%s: TRE: 0x%p TRE buf: 0x%llx DWORD0: 0x%08x DWORD1: 0x%08x State: %s\n",
197 __get_str(name
), __entry
->rp
, __entry
->ptr
, __entry
->dword0
,
198 __entry
->dword1
, __print_symbolic(__entry
->state
, MHI_STATE_LIST
))
201 DEFINE_EVENT(mhi_process_event_ring
, mhi_data_event
,
203 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_ring_element
*rp
),
205 TP_ARGS(mhi_cntrl
, rp
)
208 DEFINE_EVENT(mhi_process_event_ring
, mhi_ctrl_event
,
210 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_ring_element
*rp
),
212 TP_ARGS(mhi_cntrl
, rp
)
215 DECLARE_EVENT_CLASS(mhi_update_channel_state
,
217 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_chan
*mhi_chan
, int state
,
220 TP_ARGS(mhi_cntrl
, mhi_chan
, state
, reason
),
223 __string(name
, mhi_cntrl
->mhi_dev
->name
)
226 __field(const char *, reason
)
231 __entry
->ch_num
= mhi_chan
->chan
;
232 __entry
->state
= state
;
233 __entry
->reason
= reason
;
236 TP_printk("%s: chan%d: %s state to: %s\n",
237 __get_str(name
), __entry
->ch_num
, __entry
->reason
,
238 __print_symbolic(__entry
->state
, MHI_CH_STATE_TYPE_LIST
))
241 DEFINE_EVENT(mhi_update_channel_state
, mhi_channel_command_start
,
243 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_chan
*mhi_chan
, int state
,
246 TP_ARGS(mhi_cntrl
, mhi_chan
, state
, reason
)
249 DEFINE_EVENT(mhi_update_channel_state
, mhi_channel_command_end
,
251 TP_PROTO(struct mhi_controller
*mhi_cntrl
, struct mhi_chan
*mhi_chan
, int state
,
254 TP_ARGS(mhi_cntrl
, mhi_chan
, state
, reason
)
257 TRACE_EVENT(mhi_pm_st_transition
,
259 TP_PROTO(struct mhi_controller
*mhi_cntrl
, int state
),
261 TP_ARGS(mhi_cntrl
, state
),
264 __string(name
, mhi_cntrl
->mhi_dev
->name
)
270 __entry
->state
= state
;
273 TP_printk("%s: Handling state transition: %s\n", __get_str(name
),
274 __print_symbolic(__entry
->state
, DEV_ST_TRANSITION_LIST
))
278 #undef TRACE_INCLUDE_PATH
279 #define TRACE_INCLUDE_PATH ../../drivers/bus/mhi/host
280 #undef TRACE_INCLUDE_FILE
281 #define TRACE_INCLUDE_FILE trace
283 #include <trace/define_trace.h>