Skip to content

Commit 026c99b

Browse files
rockosovbroonie
authored andcommitted
regmap: introduce value tracing for regmap bulk operations
Currently, only one-register io operations support tracepoints with value logging. For the regmap bulk operations developer can view hw_start/hw_done tracepoints with starting reg number and registers count to be reading or writing. This patch injects tracepoints with dumping registers values in the hex format to regmap bulk reading and writing. Signed-off-by: Dmitry Rokosov <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent f8f6061 commit 026c99b

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

drivers/base/regmap/regmap.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2448,6 +2448,10 @@ int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
24482448

24492449
kfree(wval);
24502450
}
2451+
2452+
if (!ret)
2453+
trace_regmap_bulk_write(map, reg, val, val_bytes * val_count);
2454+
24512455
return ret;
24522456
}
24532457
EXPORT_SYMBOL_GPL(regmap_bulk_write);
@@ -3209,6 +3213,9 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
32093213
map->unlock(map->lock_arg);
32103214
}
32113215

3216+
if (!ret)
3217+
trace_regmap_bulk_read(map, reg, val, val_bytes * val_count);
3218+
32123219
return ret;
32133220
}
32143221
EXPORT_SYMBOL_GPL(regmap_bulk_read);

drivers/base/regmap/trace.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,49 @@ DEFINE_EVENT(regmap_reg, regmap_reg_read_cache,
6464

6565
);
6666

67+
DECLARE_EVENT_CLASS(regmap_bulk,
68+
69+
TP_PROTO(struct regmap *map, unsigned int reg,
70+
const void *val, int val_len),
71+
72+
TP_ARGS(map, reg, val, val_len),
73+
74+
TP_STRUCT__entry(
75+
__string(name, regmap_name(map))
76+
__field(unsigned int, reg)
77+
__dynamic_array(char, buf, val_len)
78+
__field(int, val_len)
79+
),
80+
81+
TP_fast_assign(
82+
__assign_str(name, regmap_name(map));
83+
__entry->reg = reg;
84+
__entry->val_len = val_len;
85+
if (val)
86+
memcpy(__get_dynamic_array(buf), val, val_len);
87+
),
88+
89+
TP_printk("%s reg=%x val=%s", __get_str(name),
90+
(unsigned int)__entry->reg,
91+
__print_hex(__get_dynamic_array(buf), __entry->val_len))
92+
);
93+
94+
DEFINE_EVENT(regmap_bulk, regmap_bulk_write,
95+
96+
TP_PROTO(struct regmap *map, unsigned int reg,
97+
const void *val, int val_len),
98+
99+
TP_ARGS(map, reg, val, val_len)
100+
);
101+
102+
DEFINE_EVENT(regmap_bulk, regmap_bulk_read,
103+
104+
TP_PROTO(struct regmap *map, unsigned int reg,
105+
const void *val, int val_len),
106+
107+
TP_ARGS(map, reg, val, val_len)
108+
);
109+
67110
DECLARE_EVENT_CLASS(regmap_block,
68111

69112
TP_PROTO(struct regmap *map, unsigned int reg, int count),

0 commit comments

Comments
 (0)