Branch data Line data Source code
1 : : #undef TRACE_SYSTEM
2 : : #define TRACE_SYSTEM power
3 : :
4 : : #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
5 : : #define _TRACE_POWER_H
6 : :
7 : : #include <linux/ktime.h>
8 : : #include <linux/pm_qos.h>
9 : : #include <linux/tracepoint.h>
10 : :
11 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(cpu,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
12 : :
13 : : TP_PROTO(unsigned int state, unsigned int cpu_id),
14 : :
15 : : TP_ARGS(state, cpu_id),
16 : :
17 : : TP_STRUCT__entry(
18 : : __field( u32, state )
19 : : __field( u32, cpu_id )
20 : : ),
21 : :
22 : : TP_fast_assign(
23 : : __entry->state = state;
24 : : __entry->cpu_id = cpu_id;
25 : : ),
26 : :
27 : : TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state,
28 : : (unsigned long)__entry->cpu_id)
29 : : );
30 : :
31 [ - + ][ # # ]: 11187480 : DEFINE_EVENT(cpu, cpu_idle,
[ # # ][ - + ]
[ # # ][ # # ]
32 : :
33 : : TP_PROTO(unsigned int state, unsigned int cpu_id),
34 : :
35 : : TP_ARGS(state, cpu_id)
36 : : );
37 : :
38 : : /* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */
39 : : #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING
40 : : #define _PWR_EVENT_AVOID_DOUBLE_DEFINING
41 : :
42 : : #define PWR_EVENT_EXIT -1
43 : : #endif
44 : :
45 [ - + # # ]: 12943 : DEFINE_EVENT(cpu, cpu_frequency,
[ # # ]
46 : :
47 : : TP_PROTO(unsigned int frequency, unsigned int cpu_id),
48 : :
49 : : TP_ARGS(frequency, cpu_id)
50 : : );
51 : :
52 [ # # # # ]: 0 : TRACE_EVENT(machine_suspend,
[ # # # # ]
[ # # ][ # # ]
[ # # ]
[ # # # # ]
[ # # ]
[ # # # # ]
53 : :
54 : : TP_PROTO(unsigned int state),
55 : :
56 : : TP_ARGS(state),
57 : :
58 : : TP_STRUCT__entry(
59 : : __field( u32, state )
60 : : ),
61 : :
62 : : TP_fast_assign(
63 : : __entry->state = state;
64 : : ),
65 : :
66 : : TP_printk("state=%lu", (unsigned long)__entry->state)
67 : : );
68 : :
69 [ # # ][ # # ]: 0 : TRACE_EVENT(device_pm_report_time,
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ]
70 : :
71 : : TP_PROTO(struct device *dev, const char *pm_ops, s64 ops_time,
72 : : char *pm_event_str, int error),
73 : :
74 : : TP_ARGS(dev, pm_ops, ops_time, pm_event_str, error),
75 : :
76 : : TP_STRUCT__entry(
77 : : __string(device, dev_name(dev))
78 : : __string(driver, dev_driver_string(dev))
79 : : __string(parent, dev->parent ? dev_name(dev->parent) : "none")
80 : : __string(pm_ops, pm_ops ? pm_ops : "none ")
81 : : __string(pm_event_str, pm_event_str)
82 : : __field(s64, ops_time)
83 : : __field(int, error)
84 : : ),
85 : :
86 : : TP_fast_assign(
87 : : const char *tmp = dev->parent ? dev_name(dev->parent) : "none";
88 : : const char *tmp_i = pm_ops ? pm_ops : "none ";
89 : :
90 : : __assign_str(device, dev_name(dev));
91 : : __assign_str(driver, dev_driver_string(dev));
92 : : __assign_str(parent, tmp);
93 : : __assign_str(pm_ops, tmp_i);
94 : : __assign_str(pm_event_str, pm_event_str);
95 : : __entry->ops_time = ops_time;
96 : : __entry->error = error;
97 : : ),
98 : :
99 : : /* ops_str has an extra space at the end */
100 : : TP_printk("%s %s parent=%s state=%s ops=%snsecs=%lld err=%d",
101 : : __get_str(driver), __get_str(device), __get_str(parent),
102 : : __get_str(pm_event_str), __get_str(pm_ops),
103 : : __entry->ops_time, __entry->error)
104 : : );
105 : :
106 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(wakeup_source,
[ # # # # ]
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
107 : :
108 : : TP_PROTO(const char *name, unsigned int state),
109 : :
110 : : TP_ARGS(name, state),
111 : :
112 : : TP_STRUCT__entry(
113 : : __string( name, name )
114 : : __field( u64, state )
115 : : ),
116 : :
117 : : TP_fast_assign(
118 : : __assign_str(name, name);
119 : : __entry->state = state;
120 : : ),
121 : :
122 : : TP_printk("%s state=0x%lx", __get_str(name),
123 : : (unsigned long)__entry->state)
124 : : );
125 : :
126 [ - + # # ]: 87232 : DEFINE_EVENT(wakeup_source, wakeup_source_activate,
[ # # ]
127 : :
128 : : TP_PROTO(const char *name, unsigned int state),
129 : :
130 : : TP_ARGS(name, state)
131 : : );
132 : :
133 [ - + # # ]: 87232 : DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
[ # # ]
134 : :
135 : : TP_PROTO(const char *name, unsigned int state),
136 : :
137 : : TP_ARGS(name, state)
138 : : );
139 : :
140 : : /*
141 : : * The clock events are used for clock enable/disable and for
142 : : * clock rate change
143 : : */
144 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(clock,
[ # # # # ]
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
145 : :
146 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
147 : :
148 : : TP_ARGS(name, state, cpu_id),
149 : :
150 : : TP_STRUCT__entry(
151 : : __string( name, name )
152 : : __field( u64, state )
153 : : __field( u64, cpu_id )
154 : : ),
155 : :
156 : : TP_fast_assign(
157 : : __assign_str(name, name);
158 : : __entry->state = state;
159 : : __entry->cpu_id = cpu_id;
160 : : ),
161 : :
162 : : TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
163 : : (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
164 : : );
165 : :
166 : : DEFINE_EVENT(clock, clock_enable,
167 : :
168 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
169 : :
170 : : TP_ARGS(name, state, cpu_id)
171 : : );
172 : :
173 : : DEFINE_EVENT(clock, clock_disable,
174 : :
175 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
176 : :
177 : : TP_ARGS(name, state, cpu_id)
178 : : );
179 : :
180 : : DEFINE_EVENT(clock, clock_set_rate,
181 : :
182 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
183 : :
184 : : TP_ARGS(name, state, cpu_id)
185 : : );
186 : :
187 [ # # ][ # # ]: 0 : TRACE_EVENT(clock_set_parent,
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
188 : :
189 : : TP_PROTO(const char *name, const char *parent_name),
190 : :
191 : : TP_ARGS(name, parent_name),
192 : :
193 : : TP_STRUCT__entry(
194 : : __string( name, name )
195 : : __string( parent_name, parent_name )
196 : : ),
197 : :
198 : : TP_fast_assign(
199 : : __assign_str(name, name);
200 : : __assign_str(parent_name, parent_name);
201 : : ),
202 : :
203 : : TP_printk("%s parent=%s", __get_str(name), __get_str(parent_name))
204 : : );
205 : :
206 : : /*
207 : : * The power domain events are used for power domains transitions
208 : : */
209 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(power_domain,
[ # # # # ]
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
210 : :
211 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
212 : :
213 : : TP_ARGS(name, state, cpu_id),
214 : :
215 : : TP_STRUCT__entry(
216 : : __string( name, name )
217 : : __field( u64, state )
218 : : __field( u64, cpu_id )
219 : : ),
220 : :
221 : : TP_fast_assign(
222 : : __assign_str(name, name);
223 : : __entry->state = state;
224 : : __entry->cpu_id = cpu_id;
225 : : ),
226 : :
227 : : TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
228 : : (unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
229 : : );
230 : :
231 : : DEFINE_EVENT(power_domain, power_domain_target,
232 : :
233 : : TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
234 : :
235 : : TP_ARGS(name, state, cpu_id)
236 : : );
237 : :
238 : : /*
239 : : * The pm qos events are used for pm qos update
240 : : */
241 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(pm_qos_request,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
242 : :
243 : : TP_PROTO(int pm_qos_class, s32 value),
244 : :
245 : : TP_ARGS(pm_qos_class, value),
246 : :
247 : : TP_STRUCT__entry(
248 : : __field( int, pm_qos_class )
249 : : __field( s32, value )
250 : : ),
251 : :
252 : : TP_fast_assign(
253 : : __entry->pm_qos_class = pm_qos_class;
254 : : __entry->value = value;
255 : : ),
256 : :
257 : : TP_printk("pm_qos_class=%s value=%d",
258 : : __print_symbolic(__entry->pm_qos_class,
259 : : { PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
260 : : { PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
261 : : { PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
262 : : __entry->value)
263 : : );
264 : :
265 [ # # # # ]: 0 : DEFINE_EVENT(pm_qos_request, pm_qos_add_request,
[ # # ]
266 : :
267 : : TP_PROTO(int pm_qos_class, s32 value),
268 : :
269 : : TP_ARGS(pm_qos_class, value)
270 : : );
271 : :
272 [ # # # # ]: 0 : DEFINE_EVENT(pm_qos_request, pm_qos_update_request,
[ # # ]
273 : :
274 : : TP_PROTO(int pm_qos_class, s32 value),
275 : :
276 : : TP_ARGS(pm_qos_class, value)
277 : : );
278 : :
279 [ # # # # ]: 0 : DEFINE_EVENT(pm_qos_request, pm_qos_remove_request,
[ # # ]
280 : :
281 : : TP_PROTO(int pm_qos_class, s32 value),
282 : :
283 : : TP_ARGS(pm_qos_class, value)
284 : : );
285 : :
286 [ # # # # ]: 0 : TRACE_EVENT(pm_qos_update_request_timeout,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
[ # # # # ]
[ # # ]
287 : :
288 : : TP_PROTO(int pm_qos_class, s32 value, unsigned long timeout_us),
289 : :
290 : : TP_ARGS(pm_qos_class, value, timeout_us),
291 : :
292 : : TP_STRUCT__entry(
293 : : __field( int, pm_qos_class )
294 : : __field( s32, value )
295 : : __field( unsigned long, timeout_us )
296 : : ),
297 : :
298 : : TP_fast_assign(
299 : : __entry->pm_qos_class = pm_qos_class;
300 : : __entry->value = value;
301 : : __entry->timeout_us = timeout_us;
302 : : ),
303 : :
304 : : TP_printk("pm_qos_class=%s value=%d, timeout_us=%ld",
305 : : __print_symbolic(__entry->pm_qos_class,
306 : : { PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
307 : : { PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
308 : : { PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
309 : : __entry->value, __entry->timeout_us)
310 : : );
311 : :
312 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(pm_qos_update,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
313 : :
314 : : TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
315 : :
316 : : TP_ARGS(action, prev_value, curr_value),
317 : :
318 : : TP_STRUCT__entry(
319 : : __field( enum pm_qos_req_action, action )
320 : : __field( int, prev_value )
321 : : __field( int, curr_value )
322 : : ),
323 : :
324 : : TP_fast_assign(
325 : : __entry->action = action;
326 : : __entry->prev_value = prev_value;
327 : : __entry->curr_value = curr_value;
328 : : ),
329 : :
330 : : TP_printk("action=%s prev_value=%d curr_value=%d",
331 : : __print_symbolic(__entry->action,
332 : : { PM_QOS_ADD_REQ, "ADD_REQ" },
333 : : { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
334 : : { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
335 : : __entry->prev_value, __entry->curr_value)
336 : : );
337 : :
338 [ # # # # ]: 0 : DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
[ # # ]
339 : :
340 : : TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
341 : :
342 : : TP_ARGS(action, prev_value, curr_value)
343 : : );
344 : :
345 [ # # ][ # # ]: 0 : DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
[ # # ][ # # ]
[ # # ]
[ # # # # ]
[ # # ]
346 : :
347 : : TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
348 : :
349 : : TP_ARGS(action, prev_value, curr_value),
350 : :
351 : : TP_printk("action=%s prev_value=0x%x curr_value=0x%x",
352 : : __print_symbolic(__entry->action,
353 : : { PM_QOS_ADD_REQ, "ADD_REQ" },
354 : : { PM_QOS_UPDATE_REQ, "UPDATE_REQ" },
355 : : { PM_QOS_REMOVE_REQ, "REMOVE_REQ" }),
356 : : __entry->prev_value, __entry->curr_value)
357 : : );
358 : :
359 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(dev_pm_qos_request,
[ # # # # ]
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
360 : :
361 : : TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
362 : : s32 new_value),
363 : :
364 : : TP_ARGS(name, type, new_value),
365 : :
366 : : TP_STRUCT__entry(
367 : : __string( name, name )
368 : : __field( enum dev_pm_qos_req_type, type )
369 : : __field( s32, new_value )
370 : : ),
371 : :
372 : : TP_fast_assign(
373 : : __assign_str(name, name);
374 : : __entry->type = type;
375 : : __entry->new_value = new_value;
376 : : ),
377 : :
378 : : TP_printk("device=%s type=%s new_value=%d",
379 : : __get_str(name),
380 : : __print_symbolic(__entry->type,
381 : : { DEV_PM_QOS_LATENCY, "DEV_PM_QOS_LATENCY" },
382 : : { DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
383 : : __entry->new_value)
384 : : );
385 : :
386 [ # # # # ]: 0 : DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
[ # # ]
387 : :
388 : : TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
389 : : s32 new_value),
390 : :
391 : : TP_ARGS(name, type, new_value)
392 : : );
393 : :
394 [ # # # # ]: 0 : DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
[ # # ]
395 : :
396 : : TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
397 : : s32 new_value),
398 : :
399 : : TP_ARGS(name, type, new_value)
400 : : );
401 : :
402 [ # # # # ]: 0 : DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
[ # # ]
403 : :
404 : : TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
405 : : s32 new_value),
406 : :
407 : : TP_ARGS(name, type, new_value)
408 : : );
409 : : #endif /* _TRACE_POWER_H */
410 : :
411 : : /* This part must be outside protection */
412 : : #include <trace/define_trace.h>
|