1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM regmap 4 5 #if !defined(_TRACE_REGMAP_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_REGMAP_H 7 8 #include <linux/ktime.h> 9 #include <linux/tracepoint.h> 10 11 #include "internal.h" 12 13 /* 14 * Log register events 15 */ 16 DECLARE_EVENT_CLASS(regmap_reg, 17 18 TP_PROTO(struct regmap *map, unsigned int reg, 19 unsigned int val), 20 21 TP_ARGS(map, reg, val), 22 23 TP_STRUCT__entry( 24 __string( name, regmap_name(map) ) 25 __field( unsigned int, reg ) 26 __field( unsigned int, val ) 27 ), 28 29 TP_fast_assign( 30 __assign_str(name); 31 __entry->reg = reg; 32 __entry->val = val; 33 ), 34 35 TP_printk("%s reg=%x val=%x", __get_str(name), __entry->reg, __entry->val) 36 ); 37 38 DEFINE_EVENT(regmap_reg, regmap_reg_write, 39 40 TP_PROTO(struct regmap *map, unsigned int reg, 41 unsigned int val), 42 43 TP_ARGS(map, reg, val) 44 ); 45 46 DEFINE_EVENT(regmap_reg, regmap_reg_read, 47 48 TP_PROTO(struct regmap *map, unsigned int reg, 49 unsigned int val), 50 51 TP_ARGS(map, reg, val) 52 ); 53 54 DEFINE_EVENT(regmap_reg, regmap_reg_read_cache, 55 56 TP_PROTO(struct regmap *map, unsigned int reg, 57 unsigned int val), 58 59 TP_ARGS(map, reg, val) 60 ); 61 62 DECLARE_EVENT_CLASS(regmap_bulk, 63 64 TP_PROTO(struct regmap *map, unsigned int reg, 65 const void *val, int val_len), 66 67 TP_ARGS(map, reg, val, val_len), 68 69 TP_STRUCT__entry( 70 __string(name, regmap_name(map)) 71 __field(unsigned int, reg) 72 __dynamic_array(char, buf, val_len) 73 __field(int, val_len) 74 ), 75 76 TP_fast_assign( 77 __assign_str(name); 78 __entry->reg = reg; 79 __entry->val_len = val_len; 80 memcpy(__get_dynamic_array(buf), val, val_len); 81 ), 82 83 TP_printk("%s reg=%x val=%s", __get_str(name), __entry->reg, 84 __print_hex(__get_dynamic_array(buf), __entry->val_len)) 85 ); 86 87 DEFINE_EVENT(regmap_bulk, regmap_bulk_write, 88 89 TP_PROTO(struct regmap *map, unsigned int reg, 90 const void *val, int val_len), 91 92 TP_ARGS(map, reg, val, val_len) 93 ); 94 95 DEFINE_EVENT(regmap_bulk, regmap_bulk_read, 96 97 TP_PROTO(struct regmap *map, unsigned int reg, 98 const void *val, int val_len), 99 100 TP_ARGS(map, reg, val, val_len) 101 ); 102 103 DECLARE_EVENT_CLASS(regmap_block, 104 105 TP_PROTO(struct regmap *map, unsigned int reg, int count), 106 107 TP_ARGS(map, reg, count), 108 109 TP_STRUCT__entry( 110 __string( name, regmap_name(map) ) 111 __field( unsigned int, reg ) 112 __field( int, count ) 113 ), 114 115 TP_fast_assign( 116 __assign_str(name); 117 __entry->reg = reg; 118 __entry->count = count; 119 ), 120 121 TP_printk("%s reg=%x count=%d", __get_str(name), __entry->reg, __entry->count) 122 ); 123 124 DEFINE_EVENT(regmap_block, regmap_hw_read_start, 125 126 TP_PROTO(struct regmap *map, unsigned int reg, int count), 127 128 TP_ARGS(map, reg, count) 129 ); 130 131 DEFINE_EVENT(regmap_block, regmap_hw_read_done, 132 133 TP_PROTO(struct regmap *map, unsigned int reg, int count), 134 135 TP_ARGS(map, reg, count) 136 ); 137 138 DEFINE_EVENT(regmap_block, regmap_hw_write_start, 139 140 TP_PROTO(struct regmap *map, unsigned int reg, int count), 141 142 TP_ARGS(map, reg, count) 143 ); 144 145 DEFINE_EVENT(regmap_block, regmap_hw_write_done, 146 147 TP_PROTO(struct regmap *map, unsigned int reg, int count), 148 149 TP_ARGS(map, reg, count) 150 ); 151 152 TRACE_EVENT(regcache_sync, 153 154 TP_PROTO(struct regmap *map, const char *type, 155 const char *status), 156 157 TP_ARGS(map, type, status), 158 159 TP_STRUCT__entry( 160 __string( name, regmap_name(map) ) 161 __string( status, status ) 162 __string( type, type ) 163 ), 164 165 TP_fast_assign( 166 __assign_str(name); 167 __assign_str(status); 168 __assign_str(type); 169 ), 170 171 TP_printk("%s type=%s status=%s", __get_str(name), 172 __get_str(type), __get_str(status)) 173 ); 174 175 DECLARE_EVENT_CLASS(regmap_bool, 176 177 TP_PROTO(struct regmap *map, bool flag), 178 179 TP_ARGS(map, flag), 180 181 TP_STRUCT__entry( 182 __string( name, regmap_name(map) ) 183 __field( int, flag ) 184 ), 185 186 TP_fast_assign( 187 __assign_str(name); 188 __entry->flag = flag; 189 ), 190 191 TP_printk("%s flag=%d", __get_str(name), __entry->flag) 192 ); 193 194 DEFINE_EVENT(regmap_bool, regmap_cache_only, 195 196 TP_PROTO(struct regmap *map, bool flag), 197 198 TP_ARGS(map, flag) 199 ); 200 201 DEFINE_EVENT(regmap_bool, regmap_cache_bypass, 202 203 TP_PROTO(struct regmap *map, bool flag), 204 205 TP_ARGS(map, flag) 206 ); 207 208 DECLARE_EVENT_CLASS(regmap_async, 209 210 TP_PROTO(struct regmap *map), 211 212 TP_ARGS(map), 213 214 TP_STRUCT__entry( 215 __string( name, regmap_name(map) ) 216 ), 217 218 TP_fast_assign( 219 __assign_str(name); 220 ), 221 222 TP_printk("%s", __get_str(name)) 223 ); 224 225 DEFINE_EVENT(regmap_block, regmap_async_write_start, 226 227 TP_PROTO(struct regmap *map, unsigned int reg, int count), 228 229 TP_ARGS(map, reg, count) 230 ); 231 232 DEFINE_EVENT(regmap_async, regmap_async_io_complete, 233 234 TP_PROTO(struct regmap *map), 235 236 TP_ARGS(map) 237 ); 238 239 DEFINE_EVENT(regmap_async, regmap_async_complete_start, 240 241 TP_PROTO(struct regmap *map), 242 243 TP_ARGS(map) 244 ); 245 246 DEFINE_EVENT(regmap_async, regmap_async_complete_done, 247 248 TP_PROTO(struct regmap *map), 249 250 TP_ARGS(map) 251 ); 252 253 TRACE_EVENT(regcache_drop_region, 254 255 TP_PROTO(struct regmap *map, unsigned int from, 256 unsigned int to), 257 258 TP_ARGS(map, from, to), 259 260 TP_STRUCT__entry( 261 __string( name, regmap_name(map) ) 262 __field( unsigned int, from ) 263 __field( unsigned int, to ) 264 ), 265 266 TP_fast_assign( 267 __assign_str(name); 268 __entry->from = from; 269 __entry->to = to; 270 ), 271 272 TP_printk("%s %u-%u", __get_str(name), __entry->from, __entry->to) 273 ); 274 275 #endif /* _TRACE_REGMAP_H */ 276 277 #undef TRACE_INCLUDE_PATH 278 #define TRACE_INCLUDE_PATH . 279 280 #undef TRACE_INCLUDE_FILE 281 #define TRACE_INCLUDE_FILE trace 282 283 /* This part must be outside protection */ 284 #include <trace/define_trace.h> 285