1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM regmap |
4 | |
5 | #if !defined(_TRACE_REGMAP_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_REGMAP_H |
7 | |
8 | #include <linux/ktime.h> |
9 | #include <linux/tracepoint.h> |
10 | |
11 | #include "internal.h" |
12 | |
13 | /* |
14 | * Log register events |
15 | */ |
16 | DECLARE_EVENT_CLASS(regmap_reg, |
17 | |
18 | TP_PROTO(struct regmap *map, unsigned int reg, |
19 | unsigned int val), |
20 | |
21 | TP_ARGS(map, reg, val), |
22 | |
23 | TP_STRUCT__entry( |
24 | __string( name, regmap_name(map) ) |
25 | __field( unsigned int, reg ) |
26 | __field( unsigned int, val ) |
27 | ), |
28 | |
29 | TP_fast_assign( |
30 | __assign_str(name, regmap_name(map)); |
31 | __entry->reg = reg; |
32 | __entry->val = val; |
33 | ), |
34 | |
35 | TP_printk("%s reg=%x val=%x" , __get_str(name), __entry->reg, __entry->val) |
36 | ); |
37 | |
38 | DEFINE_EVENT(regmap_reg, regmap_reg_write, |
39 | |
40 | TP_PROTO(struct regmap *map, unsigned int reg, |
41 | unsigned int val), |
42 | |
43 | TP_ARGS(map, reg, val) |
44 | ); |
45 | |
46 | DEFINE_EVENT(regmap_reg, regmap_reg_read, |
47 | |
48 | TP_PROTO(struct regmap *map, unsigned int reg, |
49 | unsigned int val), |
50 | |
51 | TP_ARGS(map, reg, val) |
52 | ); |
53 | |
54 | DEFINE_EVENT(regmap_reg, regmap_reg_read_cache, |
55 | |
56 | TP_PROTO(struct regmap *map, unsigned int reg, |
57 | unsigned int val), |
58 | |
59 | TP_ARGS(map, reg, val) |
60 | ); |
61 | |
62 | DECLARE_EVENT_CLASS(regmap_bulk, |
63 | |
64 | TP_PROTO(struct regmap *map, unsigned int reg, |
65 | const void *val, int val_len), |
66 | |
67 | TP_ARGS(map, reg, val, val_len), |
68 | |
69 | TP_STRUCT__entry( |
70 | __string(name, regmap_name(map)) |
71 | __field(unsigned int, reg) |
72 | __dynamic_array(char, buf, val_len) |
73 | __field(int, val_len) |
74 | ), |
75 | |
76 | TP_fast_assign( |
77 | __assign_str(name, regmap_name(map)); |
78 | __entry->reg = reg; |
79 | __entry->val_len = val_len; |
80 | memcpy(__get_dynamic_array(buf), val, val_len); |
81 | ), |
82 | |
83 | TP_printk("%s reg=%x val=%s" , __get_str(name), __entry->reg, |
84 | __print_hex(__get_dynamic_array(buf), __entry->val_len)) |
85 | ); |
86 | |
87 | DEFINE_EVENT(regmap_bulk, regmap_bulk_write, |
88 | |
89 | TP_PROTO(struct regmap *map, unsigned int reg, |
90 | const void *val, int val_len), |
91 | |
92 | TP_ARGS(map, reg, val, val_len) |
93 | ); |
94 | |
95 | DEFINE_EVENT(regmap_bulk, regmap_bulk_read, |
96 | |
97 | TP_PROTO(struct regmap *map, unsigned int reg, |
98 | const void *val, int val_len), |
99 | |
100 | TP_ARGS(map, reg, val, val_len) |
101 | ); |
102 | |
103 | DECLARE_EVENT_CLASS(regmap_block, |
104 | |
105 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
106 | |
107 | TP_ARGS(map, reg, count), |
108 | |
109 | TP_STRUCT__entry( |
110 | __string( name, regmap_name(map) ) |
111 | __field( unsigned int, reg ) |
112 | __field( int, count ) |
113 | ), |
114 | |
115 | TP_fast_assign( |
116 | __assign_str(name, regmap_name(map)); |
117 | __entry->reg = reg; |
118 | __entry->count = count; |
119 | ), |
120 | |
121 | TP_printk("%s reg=%x count=%d" , __get_str(name), __entry->reg, __entry->count) |
122 | ); |
123 | |
124 | DEFINE_EVENT(regmap_block, regmap_hw_read_start, |
125 | |
126 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
127 | |
128 | TP_ARGS(map, reg, count) |
129 | ); |
130 | |
131 | DEFINE_EVENT(regmap_block, regmap_hw_read_done, |
132 | |
133 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
134 | |
135 | TP_ARGS(map, reg, count) |
136 | ); |
137 | |
138 | DEFINE_EVENT(regmap_block, regmap_hw_write_start, |
139 | |
140 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
141 | |
142 | TP_ARGS(map, reg, count) |
143 | ); |
144 | |
145 | DEFINE_EVENT(regmap_block, regmap_hw_write_done, |
146 | |
147 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
148 | |
149 | TP_ARGS(map, reg, count) |
150 | ); |
151 | |
152 | TRACE_EVENT(regcache_sync, |
153 | |
154 | TP_PROTO(struct regmap *map, const char *type, |
155 | const char *status), |
156 | |
157 | TP_ARGS(map, type, status), |
158 | |
159 | TP_STRUCT__entry( |
160 | __string( name, regmap_name(map) ) |
161 | __string( status, status ) |
162 | __string( type, type ) |
163 | ), |
164 | |
165 | TP_fast_assign( |
166 | __assign_str(name, regmap_name(map)); |
167 | __assign_str(status, status); |
168 | __assign_str(type, type); |
169 | ), |
170 | |
171 | TP_printk("%s type=%s status=%s" , __get_str(name), |
172 | __get_str(type), __get_str(status)) |
173 | ); |
174 | |
175 | DECLARE_EVENT_CLASS(regmap_bool, |
176 | |
177 | TP_PROTO(struct regmap *map, bool flag), |
178 | |
179 | TP_ARGS(map, flag), |
180 | |
181 | TP_STRUCT__entry( |
182 | __string( name, regmap_name(map) ) |
183 | __field( int, flag ) |
184 | ), |
185 | |
186 | TP_fast_assign( |
187 | __assign_str(name, regmap_name(map)); |
188 | __entry->flag = flag; |
189 | ), |
190 | |
191 | TP_printk("%s flag=%d" , __get_str(name), __entry->flag) |
192 | ); |
193 | |
194 | DEFINE_EVENT(regmap_bool, regmap_cache_only, |
195 | |
196 | TP_PROTO(struct regmap *map, bool flag), |
197 | |
198 | TP_ARGS(map, flag) |
199 | ); |
200 | |
201 | DEFINE_EVENT(regmap_bool, regmap_cache_bypass, |
202 | |
203 | TP_PROTO(struct regmap *map, bool flag), |
204 | |
205 | TP_ARGS(map, flag) |
206 | ); |
207 | |
208 | DECLARE_EVENT_CLASS(regmap_async, |
209 | |
210 | TP_PROTO(struct regmap *map), |
211 | |
212 | TP_ARGS(map), |
213 | |
214 | TP_STRUCT__entry( |
215 | __string( name, regmap_name(map) ) |
216 | ), |
217 | |
218 | TP_fast_assign( |
219 | __assign_str(name, regmap_name(map)); |
220 | ), |
221 | |
222 | TP_printk("%s" , __get_str(name)) |
223 | ); |
224 | |
225 | DEFINE_EVENT(regmap_block, regmap_async_write_start, |
226 | |
227 | TP_PROTO(struct regmap *map, unsigned int reg, int count), |
228 | |
229 | TP_ARGS(map, reg, count) |
230 | ); |
231 | |
232 | DEFINE_EVENT(regmap_async, regmap_async_io_complete, |
233 | |
234 | TP_PROTO(struct regmap *map), |
235 | |
236 | TP_ARGS(map) |
237 | ); |
238 | |
239 | DEFINE_EVENT(regmap_async, regmap_async_complete_start, |
240 | |
241 | TP_PROTO(struct regmap *map), |
242 | |
243 | TP_ARGS(map) |
244 | ); |
245 | |
246 | DEFINE_EVENT(regmap_async, regmap_async_complete_done, |
247 | |
248 | TP_PROTO(struct regmap *map), |
249 | |
250 | TP_ARGS(map) |
251 | ); |
252 | |
253 | TRACE_EVENT(regcache_drop_region, |
254 | |
255 | TP_PROTO(struct regmap *map, unsigned int from, |
256 | unsigned int to), |
257 | |
258 | TP_ARGS(map, from, to), |
259 | |
260 | TP_STRUCT__entry( |
261 | __string( name, regmap_name(map) ) |
262 | __field( unsigned int, from ) |
263 | __field( unsigned int, to ) |
264 | ), |
265 | |
266 | TP_fast_assign( |
267 | __assign_str(name, regmap_name(map)); |
268 | __entry->from = from; |
269 | __entry->to = to; |
270 | ), |
271 | |
272 | TP_printk("%s %u-%u" , __get_str(name), __entry->from, __entry->to) |
273 | ); |
274 | |
275 | #endif /* _TRACE_REGMAP_H */ |
276 | |
277 | #undef TRACE_INCLUDE_PATH |
278 | #define TRACE_INCLUDE_PATH . |
279 | |
280 | #undef TRACE_INCLUDE_FILE |
281 | #define TRACE_INCLUDE_FILE trace |
282 | |
283 | /* This part must be outside protection */ |
284 | #include <trace/define_trace.h> |
285 | |