xref: /OK3568_Linux_fs/kernel/include/trace/events/power.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #undef TRACE_SYSTEM
3*4882a593Smuzhiyun #define TRACE_SYSTEM power
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
6*4882a593Smuzhiyun #define _TRACE_POWER_H
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/cpufreq.h>
9*4882a593Smuzhiyun #include <linux/ktime.h>
10*4882a593Smuzhiyun #include <linux/pm_qos.h>
11*4882a593Smuzhiyun #include <linux/tracepoint.h>
12*4882a593Smuzhiyun #include <linux/trace_events.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define TPS(x)  tracepoint_string(x)
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun DECLARE_EVENT_CLASS(cpu,
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 	TP_PROTO(unsigned int state, unsigned int cpu_id),
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun 	TP_ARGS(state, cpu_id),
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun 	TP_STRUCT__entry(
23*4882a593Smuzhiyun 		__field(	u32,		state		)
24*4882a593Smuzhiyun 		__field(	u32,		cpu_id		)
25*4882a593Smuzhiyun 	),
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun 	TP_fast_assign(
28*4882a593Smuzhiyun 		__entry->state = state;
29*4882a593Smuzhiyun 		__entry->cpu_id = cpu_id;
30*4882a593Smuzhiyun 	),
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	TP_printk("state=%lu cpu_id=%lu", (unsigned long)__entry->state,
33*4882a593Smuzhiyun 		  (unsigned long)__entry->cpu_id)
34*4882a593Smuzhiyun );
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun DEFINE_EVENT(cpu, cpu_idle,
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	TP_PROTO(unsigned int state, unsigned int cpu_id),
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	TP_ARGS(state, cpu_id)
41*4882a593Smuzhiyun );
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun TRACE_EVENT(powernv_throttle,
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 	TP_PROTO(int chip_id, const char *reason, int pmax),
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	TP_ARGS(chip_id, reason, pmax),
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 	TP_STRUCT__entry(
50*4882a593Smuzhiyun 		__field(int, chip_id)
51*4882a593Smuzhiyun 		__string(reason, reason)
52*4882a593Smuzhiyun 		__field(int, pmax)
53*4882a593Smuzhiyun 	),
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun 	TP_fast_assign(
56*4882a593Smuzhiyun 		__entry->chip_id = chip_id;
57*4882a593Smuzhiyun 		__assign_str(reason, reason);
58*4882a593Smuzhiyun 		__entry->pmax = pmax;
59*4882a593Smuzhiyun 	),
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 	TP_printk("Chip %d Pmax %d %s", __entry->chip_id,
62*4882a593Smuzhiyun 		  __entry->pmax, __get_str(reason))
63*4882a593Smuzhiyun );
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun TRACE_EVENT(pstate_sample,
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun 	TP_PROTO(u32 core_busy,
68*4882a593Smuzhiyun 		u32 scaled_busy,
69*4882a593Smuzhiyun 		u32 from,
70*4882a593Smuzhiyun 		u32 to,
71*4882a593Smuzhiyun 		u64 mperf,
72*4882a593Smuzhiyun 		u64 aperf,
73*4882a593Smuzhiyun 		u64 tsc,
74*4882a593Smuzhiyun 		u32 freq,
75*4882a593Smuzhiyun 		u32 io_boost
76*4882a593Smuzhiyun 		),
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 	TP_ARGS(core_busy,
79*4882a593Smuzhiyun 		scaled_busy,
80*4882a593Smuzhiyun 		from,
81*4882a593Smuzhiyun 		to,
82*4882a593Smuzhiyun 		mperf,
83*4882a593Smuzhiyun 		aperf,
84*4882a593Smuzhiyun 		tsc,
85*4882a593Smuzhiyun 		freq,
86*4882a593Smuzhiyun 		io_boost
87*4882a593Smuzhiyun 		),
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	TP_STRUCT__entry(
90*4882a593Smuzhiyun 		__field(u32, core_busy)
91*4882a593Smuzhiyun 		__field(u32, scaled_busy)
92*4882a593Smuzhiyun 		__field(u32, from)
93*4882a593Smuzhiyun 		__field(u32, to)
94*4882a593Smuzhiyun 		__field(u64, mperf)
95*4882a593Smuzhiyun 		__field(u64, aperf)
96*4882a593Smuzhiyun 		__field(u64, tsc)
97*4882a593Smuzhiyun 		__field(u32, freq)
98*4882a593Smuzhiyun 		__field(u32, io_boost)
99*4882a593Smuzhiyun 		),
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	TP_fast_assign(
102*4882a593Smuzhiyun 		__entry->core_busy = core_busy;
103*4882a593Smuzhiyun 		__entry->scaled_busy = scaled_busy;
104*4882a593Smuzhiyun 		__entry->from = from;
105*4882a593Smuzhiyun 		__entry->to = to;
106*4882a593Smuzhiyun 		__entry->mperf = mperf;
107*4882a593Smuzhiyun 		__entry->aperf = aperf;
108*4882a593Smuzhiyun 		__entry->tsc = tsc;
109*4882a593Smuzhiyun 		__entry->freq = freq;
110*4882a593Smuzhiyun 		__entry->io_boost = io_boost;
111*4882a593Smuzhiyun 		),
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun 	TP_printk("core_busy=%lu scaled=%lu from=%lu to=%lu mperf=%llu aperf=%llu tsc=%llu freq=%lu io_boost=%lu",
114*4882a593Smuzhiyun 		(unsigned long)__entry->core_busy,
115*4882a593Smuzhiyun 		(unsigned long)__entry->scaled_busy,
116*4882a593Smuzhiyun 		(unsigned long)__entry->from,
117*4882a593Smuzhiyun 		(unsigned long)__entry->to,
118*4882a593Smuzhiyun 		(unsigned long long)__entry->mperf,
119*4882a593Smuzhiyun 		(unsigned long long)__entry->aperf,
120*4882a593Smuzhiyun 		(unsigned long long)__entry->tsc,
121*4882a593Smuzhiyun 		(unsigned long)__entry->freq,
122*4882a593Smuzhiyun 		(unsigned long)__entry->io_boost
123*4882a593Smuzhiyun 		)
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun );
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */
128*4882a593Smuzhiyun #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING
129*4882a593Smuzhiyun #define _PWR_EVENT_AVOID_DOUBLE_DEFINING
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #define PWR_EVENT_EXIT -1
132*4882a593Smuzhiyun #endif
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun #define pm_verb_symbolic(event) \
135*4882a593Smuzhiyun 	__print_symbolic(event, \
136*4882a593Smuzhiyun 		{ PM_EVENT_SUSPEND, "suspend" }, \
137*4882a593Smuzhiyun 		{ PM_EVENT_RESUME, "resume" }, \
138*4882a593Smuzhiyun 		{ PM_EVENT_FREEZE, "freeze" }, \
139*4882a593Smuzhiyun 		{ PM_EVENT_QUIESCE, "quiesce" }, \
140*4882a593Smuzhiyun 		{ PM_EVENT_HIBERNATE, "hibernate" }, \
141*4882a593Smuzhiyun 		{ PM_EVENT_THAW, "thaw" }, \
142*4882a593Smuzhiyun 		{ PM_EVENT_RESTORE, "restore" }, \
143*4882a593Smuzhiyun 		{ PM_EVENT_RECOVER, "recover" })
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun DEFINE_EVENT(cpu, cpu_frequency,
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	TP_PROTO(unsigned int frequency, unsigned int cpu_id),
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	TP_ARGS(frequency, cpu_id)
150*4882a593Smuzhiyun );
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun TRACE_EVENT(cpu_frequency_limits,
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun 	TP_PROTO(struct cpufreq_policy *policy),
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun 	TP_ARGS(policy),
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun 	TP_STRUCT__entry(
159*4882a593Smuzhiyun 		__field(u32, min_freq)
160*4882a593Smuzhiyun 		__field(u32, max_freq)
161*4882a593Smuzhiyun 		__field(u32, cpu_id)
162*4882a593Smuzhiyun 	),
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun 	TP_fast_assign(
165*4882a593Smuzhiyun 		__entry->min_freq = policy->min;
166*4882a593Smuzhiyun 		__entry->max_freq = policy->max;
167*4882a593Smuzhiyun 		__entry->cpu_id = policy->cpu;
168*4882a593Smuzhiyun 	),
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun 	TP_printk("min=%lu max=%lu cpu_id=%lu",
171*4882a593Smuzhiyun 		  (unsigned long)__entry->min_freq,
172*4882a593Smuzhiyun 		  (unsigned long)__entry->max_freq,
173*4882a593Smuzhiyun 		  (unsigned long)__entry->cpu_id)
174*4882a593Smuzhiyun );
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun TRACE_EVENT(device_pm_callback_start,
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun 	TP_PROTO(struct device *dev, const char *pm_ops, int event),
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun 	TP_ARGS(dev, pm_ops, event),
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun 	TP_STRUCT__entry(
183*4882a593Smuzhiyun 		__string(device, dev_name(dev))
184*4882a593Smuzhiyun 		__string(driver, dev_driver_string(dev))
185*4882a593Smuzhiyun 		__string(parent, dev->parent ? dev_name(dev->parent) : "none")
186*4882a593Smuzhiyun 		__string(pm_ops, pm_ops ? pm_ops : "none ")
187*4882a593Smuzhiyun 		__field(int, event)
188*4882a593Smuzhiyun 	),
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun 	TP_fast_assign(
191*4882a593Smuzhiyun 		__assign_str(device, dev_name(dev));
192*4882a593Smuzhiyun 		__assign_str(driver, dev_driver_string(dev));
193*4882a593Smuzhiyun 		__assign_str(parent,
194*4882a593Smuzhiyun 			dev->parent ? dev_name(dev->parent) : "none");
195*4882a593Smuzhiyun 		__assign_str(pm_ops, pm_ops ? pm_ops : "none ");
196*4882a593Smuzhiyun 		__entry->event = event;
197*4882a593Smuzhiyun 	),
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun 	TP_printk("%s %s, parent: %s, %s[%s]", __get_str(driver),
200*4882a593Smuzhiyun 		__get_str(device), __get_str(parent), __get_str(pm_ops),
201*4882a593Smuzhiyun 		pm_verb_symbolic(__entry->event))
202*4882a593Smuzhiyun );
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun TRACE_EVENT(device_pm_callback_end,
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun 	TP_PROTO(struct device *dev, int error),
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	TP_ARGS(dev, error),
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 	TP_STRUCT__entry(
211*4882a593Smuzhiyun 		__string(device, dev_name(dev))
212*4882a593Smuzhiyun 		__string(driver, dev_driver_string(dev))
213*4882a593Smuzhiyun 		__field(int, error)
214*4882a593Smuzhiyun 	),
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun 	TP_fast_assign(
217*4882a593Smuzhiyun 		__assign_str(device, dev_name(dev));
218*4882a593Smuzhiyun 		__assign_str(driver, dev_driver_string(dev));
219*4882a593Smuzhiyun 		__entry->error = error;
220*4882a593Smuzhiyun 	),
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	TP_printk("%s %s, err=%d",
223*4882a593Smuzhiyun 		__get_str(driver), __get_str(device), __entry->error)
224*4882a593Smuzhiyun );
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun TRACE_EVENT(suspend_resume,
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun 	TP_PROTO(const char *action, int val, bool start),
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun 	TP_ARGS(action, val, start),
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	TP_STRUCT__entry(
233*4882a593Smuzhiyun 		__field(const char *, action)
234*4882a593Smuzhiyun 		__field(int, val)
235*4882a593Smuzhiyun 		__field(bool, start)
236*4882a593Smuzhiyun 	),
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 	TP_fast_assign(
239*4882a593Smuzhiyun 		__entry->action = action;
240*4882a593Smuzhiyun 		__entry->val = val;
241*4882a593Smuzhiyun 		__entry->start = start;
242*4882a593Smuzhiyun 	),
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun 	TP_printk("%s[%u] %s", __entry->action, (unsigned int)__entry->val,
245*4882a593Smuzhiyun 		(__entry->start)?"begin":"end")
246*4882a593Smuzhiyun );
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun DECLARE_EVENT_CLASS(wakeup_source,
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state),
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun 	TP_ARGS(name, state),
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun 	TP_STRUCT__entry(
255*4882a593Smuzhiyun 		__string(       name,           name            )
256*4882a593Smuzhiyun 		__field(        u64,            state           )
257*4882a593Smuzhiyun 	),
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun 	TP_fast_assign(
260*4882a593Smuzhiyun 		__assign_str(name, name);
261*4882a593Smuzhiyun 		__entry->state = state;
262*4882a593Smuzhiyun 	),
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun 	TP_printk("%s state=0x%lx", __get_str(name),
265*4882a593Smuzhiyun 		(unsigned long)__entry->state)
266*4882a593Smuzhiyun );
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun DEFINE_EVENT(wakeup_source, wakeup_source_activate,
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state),
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun 	TP_ARGS(name, state)
273*4882a593Smuzhiyun );
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun DEFINE_EVENT(wakeup_source, wakeup_source_deactivate,
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state),
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 	TP_ARGS(name, state)
280*4882a593Smuzhiyun );
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun /*
283*4882a593Smuzhiyun  * The clock events are used for clock enable/disable and for
284*4882a593Smuzhiyun  *  clock rate change
285*4882a593Smuzhiyun  */
286*4882a593Smuzhiyun DECLARE_EVENT_CLASS(clock,
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id),
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 	TP_STRUCT__entry(
293*4882a593Smuzhiyun 		__string(       name,           name            )
294*4882a593Smuzhiyun 		__field(        u64,            state           )
295*4882a593Smuzhiyun 		__field(        u64,            cpu_id          )
296*4882a593Smuzhiyun 	),
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	TP_fast_assign(
299*4882a593Smuzhiyun 		__assign_str(name, name);
300*4882a593Smuzhiyun 		__entry->state = state;
301*4882a593Smuzhiyun 		__entry->cpu_id = cpu_id;
302*4882a593Smuzhiyun 	),
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
305*4882a593Smuzhiyun 		(unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
306*4882a593Smuzhiyun );
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun DEFINE_EVENT(clock, clock_enable,
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id)
313*4882a593Smuzhiyun );
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun DEFINE_EVENT(clock, clock_disable,
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id)
320*4882a593Smuzhiyun );
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun DEFINE_EVENT(clock, clock_set_rate,
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id)
327*4882a593Smuzhiyun );
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun /*
330*4882a593Smuzhiyun  * The power domain events are used for power domains transitions
331*4882a593Smuzhiyun  */
332*4882a593Smuzhiyun DECLARE_EVENT_CLASS(power_domain,
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id),
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun 	TP_STRUCT__entry(
339*4882a593Smuzhiyun 		__string(       name,           name            )
340*4882a593Smuzhiyun 		__field(        u64,            state           )
341*4882a593Smuzhiyun 		__field(        u64,            cpu_id          )
342*4882a593Smuzhiyun 	),
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun 	TP_fast_assign(
345*4882a593Smuzhiyun 		__assign_str(name, name);
346*4882a593Smuzhiyun 		__entry->state = state;
347*4882a593Smuzhiyun 		__entry->cpu_id = cpu_id;
348*4882a593Smuzhiyun ),
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun 	TP_printk("%s state=%lu cpu_id=%lu", __get_str(name),
351*4882a593Smuzhiyun 		(unsigned long)__entry->state, (unsigned long)__entry->cpu_id)
352*4882a593Smuzhiyun );
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun DEFINE_EVENT(power_domain, power_domain_target,
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun 	TP_PROTO(const char *name, unsigned int state, unsigned int cpu_id),
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun 	TP_ARGS(name, state, cpu_id)
359*4882a593Smuzhiyun );
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun /*
362*4882a593Smuzhiyun  * CPU latency QoS events used for global CPU latency QoS list updates
363*4882a593Smuzhiyun  */
364*4882a593Smuzhiyun DECLARE_EVENT_CLASS(cpu_latency_qos_request,
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun 	TP_PROTO(s32 value),
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun 	TP_ARGS(value),
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	TP_STRUCT__entry(
371*4882a593Smuzhiyun 		__field( s32,                    value          )
372*4882a593Smuzhiyun 	),
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun 	TP_fast_assign(
375*4882a593Smuzhiyun 		__entry->value = value;
376*4882a593Smuzhiyun 	),
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun 	TP_printk("CPU_DMA_LATENCY value=%d",
379*4882a593Smuzhiyun 		  __entry->value)
380*4882a593Smuzhiyun );
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun DEFINE_EVENT(cpu_latency_qos_request, pm_qos_add_request,
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	TP_PROTO(s32 value),
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun 	TP_ARGS(value)
387*4882a593Smuzhiyun );
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun DEFINE_EVENT(cpu_latency_qos_request, pm_qos_update_request,
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun 	TP_PROTO(s32 value),
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun 	TP_ARGS(value)
394*4882a593Smuzhiyun );
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun DEFINE_EVENT(cpu_latency_qos_request, pm_qos_remove_request,
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun 	TP_PROTO(s32 value),
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun 	TP_ARGS(value)
401*4882a593Smuzhiyun );
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun /*
404*4882a593Smuzhiyun  * General PM QoS events used for updates of PM QoS request lists
405*4882a593Smuzhiyun  */
406*4882a593Smuzhiyun DECLARE_EVENT_CLASS(pm_qos_update,
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun 	TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun 	TP_ARGS(action, prev_value, curr_value),
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun 	TP_STRUCT__entry(
413*4882a593Smuzhiyun 		__field( enum pm_qos_req_action, action         )
414*4882a593Smuzhiyun 		__field( int,                    prev_value     )
415*4882a593Smuzhiyun 		__field( int,                    curr_value     )
416*4882a593Smuzhiyun 	),
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun 	TP_fast_assign(
419*4882a593Smuzhiyun 		__entry->action = action;
420*4882a593Smuzhiyun 		__entry->prev_value = prev_value;
421*4882a593Smuzhiyun 		__entry->curr_value = curr_value;
422*4882a593Smuzhiyun 	),
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun 	TP_printk("action=%s prev_value=%d curr_value=%d",
425*4882a593Smuzhiyun 		  __print_symbolic(__entry->action,
426*4882a593Smuzhiyun 			{ PM_QOS_ADD_REQ,	"ADD_REQ" },
427*4882a593Smuzhiyun 			{ PM_QOS_UPDATE_REQ,	"UPDATE_REQ" },
428*4882a593Smuzhiyun 			{ PM_QOS_REMOVE_REQ,	"REMOVE_REQ" }),
429*4882a593Smuzhiyun 		  __entry->prev_value, __entry->curr_value)
430*4882a593Smuzhiyun );
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun DEFINE_EVENT(pm_qos_update, pm_qos_update_target,
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun 	TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun 	TP_ARGS(action, prev_value, curr_value)
437*4882a593Smuzhiyun );
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun DEFINE_EVENT_PRINT(pm_qos_update, pm_qos_update_flags,
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun 	TP_PROTO(enum pm_qos_req_action action, int prev_value, int curr_value),
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun 	TP_ARGS(action, prev_value, curr_value),
444*4882a593Smuzhiyun 
445*4882a593Smuzhiyun 	TP_printk("action=%s prev_value=0x%x curr_value=0x%x",
446*4882a593Smuzhiyun 		  __print_symbolic(__entry->action,
447*4882a593Smuzhiyun 			{ PM_QOS_ADD_REQ,	"ADD_REQ" },
448*4882a593Smuzhiyun 			{ PM_QOS_UPDATE_REQ,	"UPDATE_REQ" },
449*4882a593Smuzhiyun 			{ PM_QOS_REMOVE_REQ,	"REMOVE_REQ" }),
450*4882a593Smuzhiyun 		  __entry->prev_value, __entry->curr_value)
451*4882a593Smuzhiyun );
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun DECLARE_EVENT_CLASS(dev_pm_qos_request,
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun 	TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
456*4882a593Smuzhiyun 		 s32 new_value),
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun 	TP_ARGS(name, type, new_value),
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun 	TP_STRUCT__entry(
461*4882a593Smuzhiyun 		__string( name,                    name         )
462*4882a593Smuzhiyun 		__field( enum dev_pm_qos_req_type, type         )
463*4882a593Smuzhiyun 		__field( s32,                      new_value    )
464*4882a593Smuzhiyun 	),
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun 	TP_fast_assign(
467*4882a593Smuzhiyun 		__assign_str(name, name);
468*4882a593Smuzhiyun 		__entry->type = type;
469*4882a593Smuzhiyun 		__entry->new_value = new_value;
470*4882a593Smuzhiyun 	),
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun 	TP_printk("device=%s type=%s new_value=%d",
473*4882a593Smuzhiyun 		  __get_str(name),
474*4882a593Smuzhiyun 		  __print_symbolic(__entry->type,
475*4882a593Smuzhiyun 			{ DEV_PM_QOS_RESUME_LATENCY, "DEV_PM_QOS_RESUME_LATENCY" },
476*4882a593Smuzhiyun 			{ DEV_PM_QOS_FLAGS, "DEV_PM_QOS_FLAGS" }),
477*4882a593Smuzhiyun 		  __entry->new_value)
478*4882a593Smuzhiyun );
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_add_request,
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun 	TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
483*4882a593Smuzhiyun 		 s32 new_value),
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 	TP_ARGS(name, type, new_value)
486*4882a593Smuzhiyun );
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_update_request,
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun 	TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
491*4882a593Smuzhiyun 		 s32 new_value),
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun 	TP_ARGS(name, type, new_value)
494*4882a593Smuzhiyun );
495*4882a593Smuzhiyun 
496*4882a593Smuzhiyun DEFINE_EVENT(dev_pm_qos_request, dev_pm_qos_remove_request,
497*4882a593Smuzhiyun 
498*4882a593Smuzhiyun 	TP_PROTO(const char *name, enum dev_pm_qos_req_type type,
499*4882a593Smuzhiyun 		 s32 new_value),
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun 	TP_ARGS(name, type, new_value)
502*4882a593Smuzhiyun );
503*4882a593Smuzhiyun #endif /* _TRACE_POWER_H */
504*4882a593Smuzhiyun 
505*4882a593Smuzhiyun /* This part must be outside protection */
506*4882a593Smuzhiyun #include <trace/define_trace.h>
507