Unverified Commit 026c99b5 authored by Dmitry Rokosov's avatar Dmitry Rokosov Committed by Mark Brown
Browse files

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: default avatarDmitry Rokosov <ddrokosov@sberdevices.ru>
Link: https://lore.kernel.org/r/20220816181451.5628-1-ddrokosov@sberdevices.ru


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f8f60615
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2448,6 +2448,10 @@ int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,

		kfree(wval);
	}

	if (!ret)
		trace_regmap_bulk_write(map, reg, val, val_bytes * val_count);

	return ret;
}
EXPORT_SYMBOL_GPL(regmap_bulk_write);
@@ -3209,6 +3213,9 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
		map->unlock(map->lock_arg);
	}

	if (!ret)
		trace_regmap_bulk_read(map, reg, val, val_bytes * val_count);

	return ret;
}
EXPORT_SYMBOL_GPL(regmap_bulk_read);
+43 −0
Original line number Diff line number Diff line
@@ -64,6 +64,49 @@ DEFINE_EVENT(regmap_reg, regmap_reg_read_cache,

);

DECLARE_EVENT_CLASS(regmap_bulk,

	TP_PROTO(struct regmap *map, unsigned int reg,
		 const void *val, int val_len),

	TP_ARGS(map, reg, val, val_len),

	TP_STRUCT__entry(
		__string(name, regmap_name(map))
		__field(unsigned int, reg)
		__dynamic_array(char, buf, val_len)
		__field(int, val_len)
	),

	TP_fast_assign(
		__assign_str(name, regmap_name(map));
		__entry->reg = reg;
		__entry->val_len = val_len;
		if (val)
			memcpy(__get_dynamic_array(buf), val, val_len);
	),

	TP_printk("%s reg=%x val=%s", __get_str(name),
		  (unsigned int)__entry->reg,
		  __print_hex(__get_dynamic_array(buf), __entry->val_len))
);

DEFINE_EVENT(regmap_bulk, regmap_bulk_write,

	TP_PROTO(struct regmap *map, unsigned int reg,
		 const void *val, int val_len),

	TP_ARGS(map, reg, val, val_len)
);

DEFINE_EVENT(regmap_bulk, regmap_bulk_read,

	TP_PROTO(struct regmap *map, unsigned int reg,
		 const void *val, int val_len),

	TP_ARGS(map, reg, val, val_len)
);

DECLARE_EVENT_CLASS(regmap_block,

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