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