1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM thermal |
4 | |
5 | #if !defined(_TRACE_THERMAL_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_THERMAL_H |
7 | |
8 | #include <linux/devfreq.h> |
9 | #include <linux/thermal.h> |
10 | #include <linux/tracepoint.h> |
11 | |
12 | TRACE_DEFINE_ENUM(THERMAL_TRIP_CRITICAL); |
13 | TRACE_DEFINE_ENUM(THERMAL_TRIP_HOT); |
14 | TRACE_DEFINE_ENUM(THERMAL_TRIP_PASSIVE); |
15 | TRACE_DEFINE_ENUM(THERMAL_TRIP_ACTIVE); |
16 | |
17 | #define show_tzt_type(type) \ |
18 | __print_symbolic(type, \ |
19 | { THERMAL_TRIP_CRITICAL, "CRITICAL"}, \ |
20 | { THERMAL_TRIP_HOT, "HOT"}, \ |
21 | { THERMAL_TRIP_PASSIVE, "PASSIVE"}, \ |
22 | { THERMAL_TRIP_ACTIVE, "ACTIVE"}) |
23 | |
24 | TRACE_EVENT(thermal_temperature, |
25 | |
26 | TP_PROTO(struct thermal_zone_device *tz), |
27 | |
28 | TP_ARGS(tz), |
29 | |
30 | TP_STRUCT__entry( |
31 | __string(thermal_zone, tz->type) |
32 | __field(int, id) |
33 | __field(int, temp_prev) |
34 | __field(int, temp) |
35 | ), |
36 | |
37 | TP_fast_assign( |
38 | __assign_str(thermal_zone, tz->type); |
39 | __entry->id = tz->id; |
40 | __entry->temp_prev = tz->last_temperature; |
41 | __entry->temp = tz->temperature; |
42 | ), |
43 | |
44 | TP_printk("thermal_zone=%s id=%d temp_prev=%d temp=%d" , |
45 | __get_str(thermal_zone), __entry->id, __entry->temp_prev, |
46 | __entry->temp) |
47 | ); |
48 | |
49 | TRACE_EVENT(cdev_update, |
50 | |
51 | TP_PROTO(struct thermal_cooling_device *cdev, unsigned long target), |
52 | |
53 | TP_ARGS(cdev, target), |
54 | |
55 | TP_STRUCT__entry( |
56 | __string(type, cdev->type) |
57 | __field(unsigned long, target) |
58 | ), |
59 | |
60 | TP_fast_assign( |
61 | __assign_str(type, cdev->type); |
62 | __entry->target = target; |
63 | ), |
64 | |
65 | TP_printk("type=%s target=%lu" , __get_str(type), __entry->target) |
66 | ); |
67 | |
68 | TRACE_EVENT(thermal_zone_trip, |
69 | |
70 | TP_PROTO(struct thermal_zone_device *tz, int trip, |
71 | enum thermal_trip_type trip_type), |
72 | |
73 | TP_ARGS(tz, trip, trip_type), |
74 | |
75 | TP_STRUCT__entry( |
76 | __string(thermal_zone, tz->type) |
77 | __field(int, id) |
78 | __field(int, trip) |
79 | __field(enum thermal_trip_type, trip_type) |
80 | ), |
81 | |
82 | TP_fast_assign( |
83 | __assign_str(thermal_zone, tz->type); |
84 | __entry->id = tz->id; |
85 | __entry->trip = trip; |
86 | __entry->trip_type = trip_type; |
87 | ), |
88 | |
89 | TP_printk("thermal_zone=%s id=%d trip=%d trip_type=%s" , |
90 | __get_str(thermal_zone), __entry->id, __entry->trip, |
91 | show_tzt_type(__entry->trip_type)) |
92 | ); |
93 | |
94 | #ifdef CONFIG_CPU_THERMAL |
95 | TRACE_EVENT(thermal_power_cpu_get_power_simple, |
96 | TP_PROTO(int cpu, u32 power), |
97 | |
98 | TP_ARGS(cpu, power), |
99 | |
100 | TP_STRUCT__entry( |
101 | __field(int, cpu) |
102 | __field(u32, power) |
103 | ), |
104 | |
105 | TP_fast_assign( |
106 | __entry->cpu = cpu; |
107 | __entry->power = power; |
108 | ), |
109 | |
110 | TP_printk("cpu=%d power=%u" , __entry->cpu, __entry->power) |
111 | ); |
112 | |
113 | TRACE_EVENT(thermal_power_cpu_limit, |
114 | TP_PROTO(const struct cpumask *cpus, unsigned int freq, |
115 | unsigned long cdev_state, u32 power), |
116 | |
117 | TP_ARGS(cpus, freq, cdev_state, power), |
118 | |
119 | TP_STRUCT__entry( |
120 | __bitmask(cpumask, num_possible_cpus()) |
121 | __field(unsigned int, freq ) |
122 | __field(unsigned long, cdev_state) |
123 | __field(u32, power ) |
124 | ), |
125 | |
126 | TP_fast_assign( |
127 | __assign_bitmask(cpumask, cpumask_bits(cpus), |
128 | num_possible_cpus()); |
129 | __entry->freq = freq; |
130 | __entry->cdev_state = cdev_state; |
131 | __entry->power = power; |
132 | ), |
133 | |
134 | TP_printk("cpus=%s freq=%u cdev_state=%lu power=%u" , |
135 | __get_bitmask(cpumask), __entry->freq, __entry->cdev_state, |
136 | __entry->power) |
137 | ); |
138 | #endif /* CONFIG_CPU_THERMAL */ |
139 | |
140 | #ifdef CONFIG_DEVFREQ_THERMAL |
141 | TRACE_EVENT(thermal_power_devfreq_get_power, |
142 | TP_PROTO(struct thermal_cooling_device *cdev, |
143 | struct devfreq_dev_status *status, unsigned long freq, |
144 | u32 power), |
145 | |
146 | TP_ARGS(cdev, status, freq, power), |
147 | |
148 | TP_STRUCT__entry( |
149 | __string(type, cdev->type ) |
150 | __field(unsigned long, freq ) |
151 | __field(u32, busy_time) |
152 | __field(u32, total_time) |
153 | __field(u32, power) |
154 | ), |
155 | |
156 | TP_fast_assign( |
157 | __assign_str(type, cdev->type); |
158 | __entry->freq = freq; |
159 | __entry->busy_time = status->busy_time; |
160 | __entry->total_time = status->total_time; |
161 | __entry->power = power; |
162 | ), |
163 | |
164 | TP_printk("type=%s freq=%lu load=%u power=%u" , |
165 | __get_str(type), __entry->freq, |
166 | __entry->total_time == 0 ? 0 : |
167 | (100 * __entry->busy_time) / __entry->total_time, |
168 | __entry->power) |
169 | ); |
170 | |
171 | TRACE_EVENT(thermal_power_devfreq_limit, |
172 | TP_PROTO(struct thermal_cooling_device *cdev, unsigned long freq, |
173 | unsigned long cdev_state, u32 power), |
174 | |
175 | TP_ARGS(cdev, freq, cdev_state, power), |
176 | |
177 | TP_STRUCT__entry( |
178 | __string(type, cdev->type) |
179 | __field(unsigned int, freq ) |
180 | __field(unsigned long, cdev_state) |
181 | __field(u32, power ) |
182 | ), |
183 | |
184 | TP_fast_assign( |
185 | __assign_str(type, cdev->type); |
186 | __entry->freq = freq; |
187 | __entry->cdev_state = cdev_state; |
188 | __entry->power = power; |
189 | ), |
190 | |
191 | TP_printk("type=%s freq=%u cdev_state=%lu power=%u" , |
192 | __get_str(type), __entry->freq, __entry->cdev_state, |
193 | __entry->power) |
194 | ); |
195 | #endif /* CONFIG_DEVFREQ_THERMAL */ |
196 | #endif /* _TRACE_THERMAL_H */ |
197 | |
198 | #undef TRACE_INCLUDE_PATH |
199 | #define TRACE_INCLUDE_PATH . |
200 | |
201 | #undef TRACE_INCLUDE_FILE |
202 | #define TRACE_INCLUDE_FILE thermal_trace |
203 | |
204 | /* This part must be outside protection */ |
205 | #include <trace/define_trace.h> |
206 | |