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, 96 TP_PROTO(const struct cpumask *cpus, unsigned long freq, u32 *load, 97 size_t load_len, u32 dynamic_power), 98 99 TP_ARGS(cpus, freq, load, load_len, dynamic_power), 100 101 TP_STRUCT__entry( 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 ) 107 ), 108 109 TP_fast_assign( 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; 117 ), 118 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) 123 ); 124 125 TRACE_EVENT(thermal_power_cpu_limit, 126 TP_PROTO(const struct cpumask *cpus, unsigned int freq, 127 unsigned long cdev_state, u32 power), 128 129 TP_ARGS(cpus, freq, cdev_state, power), 130 131 TP_STRUCT__entry( 132 __bitmask(cpumask, num_possible_cpus()) 133 __field(unsigned int, freq ) 134 __field(unsigned long, cdev_state) 135 __field(u32, power ) 136 ), 137 138 TP_fast_assign( 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; 144 ), 145 146 TP_printk("cpus=%s freq=%u cdev_state=%lu power=%u", 147 __get_bitmask(cpumask), __entry->freq, __entry->cdev_state, 148 __entry->power) 149 ); 150 #endif /* CONFIG_CPU_THERMAL */ 151 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 power), 157 158 TP_ARGS(cdev, status, freq, power), 159 160 TP_STRUCT__entry( 161 __string(type, cdev->type ) 162 __field(unsigned long, freq ) 163 __field(u32, busy_time) 164 __field(u32, total_time) 165 __field(u32, power) 166 ), 167 168 TP_fast_assign( 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; 174 ), 175 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, 180 __entry->power) 181 ); 182 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), 186 187 TP_ARGS(cdev, freq, cdev_state, power), 188 189 TP_STRUCT__entry( 190 __string(type, cdev->type) 191 __field(unsigned int, freq ) 192 __field(unsigned long, cdev_state) 193 __field(u32, power ) 194 ), 195 196 TP_fast_assign( 197 __assign_str(type, cdev->type); 198 __entry->freq = freq; 199 __entry->cdev_state = cdev_state; 200 __entry->power = power; 201 ), 202 203 TP_printk("type=%s freq=%u cdev_state=%lu power=%u", 204 __get_str(type), __entry->freq, __entry->cdev_state, 205 __entry->power) 206 ); 207 #endif /* CONFIG_DEVFREQ_THERMAL */ 208 #endif /* _TRACE_THERMAL_H */ 209 210 /* This part must be outside protection */ 211 #include <trace/define_trace.h> 212