1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM thermal
5 #if !defined(_TRACE_THERMAL_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_THERMAL_H
8 #include <linux/devfreq.h>
9 #include <linux/thermal.h>
10 #include <linux/tracepoint.h>
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
);
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"})
24 TRACE_EVENT(thermal_temperature
,
26 TP_PROTO(struct thermal_zone_device
*tz
),
31 __string(thermal_zone
, tz
->type
)
33 __field(int, temp_prev
)
38 __assign_str(thermal_zone
, tz
->type
);
40 __entry
->temp_prev
= tz
->last_temperature
;
41 __entry
->temp
= tz
->temperature
;
44 TP_printk("thermal_zone=%s id=%d temp_prev=%d temp=%d",
45 __get_str(thermal_zone
), __entry
->id
, __entry
->temp_prev
,
49 TRACE_EVENT(cdev_update
,
51 TP_PROTO(struct thermal_cooling_device
*cdev
, unsigned long target
),
53 TP_ARGS(cdev
, target
),
56 __string(type
, cdev
->type
)
57 __field(unsigned long, target
)
61 __assign_str(type
, cdev
->type
);
62 __entry
->target
= target
;
65 TP_printk("type=%s target=%lu", __get_str(type
), __entry
->target
)
68 TRACE_EVENT(thermal_zone_trip
,
70 TP_PROTO(struct thermal_zone_device
*tz
, int trip
,
71 enum thermal_trip_type trip_type
),
73 TP_ARGS(tz
, trip
, trip_type
),
76 __string(thermal_zone
, tz
->type
)
79 __field(enum thermal_trip_type
, trip_type
)
83 __assign_str(thermal_zone
, tz
->type
);
86 __entry
->trip_type
= trip_type
;
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
))
94 #ifdef CONFIG_CPU_THERMAL
95 TRACE_EVENT(thermal_power_cpu_get_power
,
96 TP_PROTO(const struct cpumask
*cpus
, unsigned long freq
, u32
*load
,
97 size_t load_len
, u32 dynamic_power
),
99 TP_ARGS(cpus
, freq
, load
, load_len
, dynamic_power
),
102 __bitmask(cpumask
, num_possible_cpus())
103 __field(unsigned long, freq
)
104 __dynamic_array(u32
, load
, load_len
)
105 __field(size_t, load_len
)
106 __field(u32
, dynamic_power
)
110 __assign_bitmask(cpumask
, cpumask_bits(cpus
),
111 num_possible_cpus());
112 __entry
->freq
= freq
;
113 memcpy(__get_dynamic_array(load
), load
,
114 load_len
* sizeof(*load
));
115 __entry
->load_len
= load_len
;
116 __entry
->dynamic_power
= dynamic_power
;
119 TP_printk("cpus=%s freq=%lu load={%s} dynamic_power=%d",
120 __get_bitmask(cpumask
), __entry
->freq
,
121 __print_array(__get_dynamic_array(load
), __entry
->load_len
, 4),
122 __entry
->dynamic_power
)
125 TRACE_EVENT(thermal_power_cpu_limit
,
126 TP_PROTO(const struct cpumask
*cpus
, unsigned int freq
,
127 unsigned long cdev_state
, u32 power
),
129 TP_ARGS(cpus
, freq
, cdev_state
, power
),
132 __bitmask(cpumask
, num_possible_cpus())
133 __field(unsigned int, freq
)
134 __field(unsigned long, cdev_state
)
139 __assign_bitmask(cpumask
, cpumask_bits(cpus
),
140 num_possible_cpus());
141 __entry
->freq
= freq
;
142 __entry
->cdev_state
= cdev_state
;
143 __entry
->power
= power
;
146 TP_printk("cpus=%s freq=%u cdev_state=%lu power=%u",
147 __get_bitmask(cpumask
), __entry
->freq
, __entry
->cdev_state
,
150 #endif /* CONFIG_CPU_THERMAL */
152 #ifdef CONFIG_DEVFREQ_THERMAL
153 TRACE_EVENT(thermal_power_devfreq_get_power
,
154 TP_PROTO(struct thermal_cooling_device
*cdev
,
155 struct devfreq_dev_status
*status
, unsigned long freq
,
158 TP_ARGS(cdev
, status
, freq
, power
),
161 __string(type
, cdev
->type
)
162 __field(unsigned long, freq
)
163 __field(u32
, busy_time
)
164 __field(u32
, total_time
)
169 __assign_str(type
, cdev
->type
);
170 __entry
->freq
= freq
;
171 __entry
->busy_time
= status
->busy_time
;
172 __entry
->total_time
= status
->total_time
;
173 __entry
->power
= power
;
176 TP_printk("type=%s freq=%lu load=%u power=%u",
177 __get_str(type
), __entry
->freq
,
178 __entry
->total_time
== 0 ? 0 :
179 (100 * __entry
->busy_time
) / __entry
->total_time
,
183 TRACE_EVENT(thermal_power_devfreq_limit
,
184 TP_PROTO(struct thermal_cooling_device
*cdev
, unsigned long freq
,
185 unsigned long cdev_state
, u32 power
),
187 TP_ARGS(cdev
, freq
, cdev_state
, power
),
190 __string(type
, cdev
->type
)
191 __field(unsigned int, freq
)
192 __field(unsigned long, cdev_state
)
197 __assign_str(type
, cdev
->type
);
198 __entry
->freq
= freq
;
199 __entry
->cdev_state
= cdev_state
;
200 __entry
->power
= power
;
203 TP_printk("type=%s freq=%u cdev_state=%lu power=%u",
204 __get_str(type
), __entry
->freq
, __entry
->cdev_state
,
207 #endif /* CONFIG_DEVFREQ_THERMAL */
208 #endif /* _TRACE_THERMAL_H */
210 /* This part must be outside protection */
211 #include <trace/define_trace.h>