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
,
156 u32 dynamic_power
, u32 static_power
, u32 power
),
158 TP_ARGS(cdev
, status
, freq
, dynamic_power
, static_power
, power
),
161 __string(type
, cdev
->type
)
162 __field(unsigned long, freq
)
164 __field(u32
, dynamic_power
)
165 __field(u32
, static_power
)
170 __assign_str(type
, cdev
->type
);
171 __entry
->freq
= freq
;
172 __entry
->load
= (100 * status
->busy_time
) / status
->total_time
;
173 __entry
->dynamic_power
= dynamic_power
;
174 __entry
->static_power
= static_power
;
175 __entry
->power
= power
;
178 TP_printk("type=%s freq=%lu load=%u dynamic_power=%u static_power=%u power=%u",
179 __get_str(type
), __entry
->freq
,
180 __entry
->load
, __entry
->dynamic_power
, __entry
->static_power
,
184 TRACE_EVENT(thermal_power_devfreq_limit
,
185 TP_PROTO(struct thermal_cooling_device
*cdev
, unsigned long freq
,
186 unsigned long cdev_state
, u32 power
),
188 TP_ARGS(cdev
, freq
, cdev_state
, power
),
191 __string(type
, cdev
->type
)
192 __field(unsigned int, freq
)
193 __field(unsigned long, cdev_state
)
198 __assign_str(type
, cdev
->type
);
199 __entry
->freq
= freq
;
200 __entry
->cdev_state
= cdev_state
;
201 __entry
->power
= power
;
204 TP_printk("type=%s freq=%u cdev_state=%lu power=%u",
205 __get_str(type
), __entry
->freq
, __entry
->cdev_state
,
208 #endif /* CONFIG_DEVFREQ_THERMAL */
209 #endif /* _TRACE_THERMAL_H */
211 /* This part must be outside protection */
212 #include <trace/define_trace.h>