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