1/* SPDX-License-Identifier: GPL-2.0 */
2
3#undef TRACE_SYSTEM
4#define TRACE_SYSTEM fsi
5
6#if !defined(_TRACE_FSI_H) || defined(TRACE_HEADER_MULTI_READ)
7#define _TRACE_FSI_H
8
9#include <linux/tracepoint.h>
10
11TRACE_EVENT(fsi_master_read,
12	TP_PROTO(const struct fsi_master *master, int link, int id,
13			uint32_t addr, size_t size),
14	TP_ARGS(master, link, id, addr, size),
15	TP_STRUCT__entry(
16		__field(int,	master_idx)
17		__field(int,	link)
18		__field(int,	id)
19		__field(__u32,	addr)
20		__field(size_t,	size)
21	),
22	TP_fast_assign(
23		__entry->master_idx = master->idx;
24		__entry->link = link;
25		__entry->id = id;
26		__entry->addr = addr;
27		__entry->size = size;
28	),
29	TP_printk("fsi%d:%02d:%02d %08x[%zu]",
30		__entry->master_idx,
31		__entry->link,
32		__entry->id,
33		__entry->addr,
34		__entry->size
35	)
36);
37
38TRACE_EVENT(fsi_master_write,
39	TP_PROTO(const struct fsi_master *master, int link, int id,
40			uint32_t addr, size_t size, const void *data),
41	TP_ARGS(master, link, id, addr, size, data),
42	TP_STRUCT__entry(
43		__field(int,	master_idx)
44		__field(int,	link)
45		__field(int,	id)
46		__field(__u32,	addr)
47		__field(size_t,	size)
48		__field(__u32,	data)
49	),
50	TP_fast_assign(
51		__entry->master_idx = master->idx;
52		__entry->link = link;
53		__entry->id = id;
54		__entry->addr = addr;
55		__entry->size = size;
56		__entry->data = 0;
57		memcpy(&__entry->data, data, size);
58	),
59	TP_printk("fsi%d:%02d:%02d %08x[%zu] <= {%*ph}",
60		__entry->master_idx,
61		__entry->link,
62		__entry->id,
63		__entry->addr,
64		__entry->size,
65		(int)__entry->size, &__entry->data
66	)
67);
68
69TRACE_EVENT(fsi_master_rw_result,
70	TP_PROTO(const struct fsi_master *master, int link, int id,
71			uint32_t addr, size_t size,
72			bool write, const void *data, int ret),
73	TP_ARGS(master, link, id, addr, size, write, data, ret),
74	TP_STRUCT__entry(
75		__field(int,	master_idx)
76		__field(int,	link)
77		__field(int,	id)
78		__field(__u32,	addr)
79		__field(size_t,	size)
80		__field(bool,	write)
81		__field(__u32,	data)
82		__field(int,	ret)
83	),
84	TP_fast_assign(
85		__entry->master_idx = master->idx;
86		__entry->link = link;
87		__entry->id = id;
88		__entry->addr = addr;
89		__entry->size = size;
90		__entry->write = write;
91		__entry->data = 0;
92		__entry->ret = ret;
93		if (__entry->write || !__entry->ret)
94			memcpy(&__entry->data, data, size);
95	),
96	TP_printk("fsi%d:%02d:%02d %08x[%zu] %s {%*ph} ret %d",
97		__entry->master_idx,
98		__entry->link,
99		__entry->id,
100		__entry->addr,
101		__entry->size,
102		__entry->write ? "<=" : "=>",
103		(int)__entry->size, &__entry->data,
104		__entry->ret
105	)
106);
107
108TRACE_EVENT(fsi_master_break,
109	TP_PROTO(const struct fsi_master *master, int link),
110	TP_ARGS(master, link),
111	TP_STRUCT__entry(
112		__field(int,	master_idx)
113		__field(int,	link)
114	),
115	TP_fast_assign(
116		__entry->master_idx = master->idx;
117		__entry->link = link;
118	),
119	TP_printk("fsi%d:%d",
120		__entry->master_idx,
121		__entry->link
122	)
123);
124
125TRACE_EVENT(fsi_master_scan,
126	TP_PROTO(const struct fsi_master *master, bool scan),
127	TP_ARGS(master, scan),
128	TP_STRUCT__entry(
129		__field(int,	master_idx)
130		__field(int,	n_links)
131		__field(bool,	scan)
132	),
133	TP_fast_assign(
134		__entry->master_idx = master->idx;
135		__entry->n_links = master->n_links;
136		__entry->scan = scan;
137	),
138	TP_printk("fsi%d (%d links) %s", __entry->master_idx, __entry->n_links,
139		  __entry->scan ? "scan" : "unscan")
140);
141
142TRACE_EVENT(fsi_master_unregister,
143	TP_PROTO(const struct fsi_master *master),
144	TP_ARGS(master),
145	TP_STRUCT__entry(
146		__field(int,	master_idx)
147		__field(int,	n_links)
148	),
149	TP_fast_assign(
150		__entry->master_idx = master->idx;
151		__entry->n_links = master->n_links;
152	),
153	TP_printk("fsi%d (%d links)", __entry->master_idx, __entry->n_links)
154);
155
156TRACE_EVENT(fsi_slave_init,
157	TP_PROTO(const struct fsi_slave *slave),
158	TP_ARGS(slave),
159	TP_STRUCT__entry(
160		__field(int,	master_idx)
161		__field(int,	master_n_links)
162		__field(int,	idx)
163		__field(int,	link)
164		__field(int,	chip_id)
165		__field(__u32,	cfam_id)
166		__field(__u32,	size)
167	),
168	TP_fast_assign(
169		__entry->master_idx = slave->master->idx;
170		__entry->master_n_links = slave->master->n_links;
171		__entry->idx = slave->cdev_idx;
172		__entry->link = slave->link;
173		__entry->chip_id = slave->chip_id;
174		__entry->cfam_id = slave->cfam_id;
175		__entry->size = slave->size;
176	),
177	TP_printk("fsi%d: idx:%d link:%d/%d cid:%d cfam:%08x %08x",
178		__entry->master_idx,
179		__entry->idx,
180		__entry->link,
181		__entry->master_n_links,
182		__entry->chip_id,
183		__entry->cfam_id,
184		__entry->size
185	)
186);
187
188TRACE_EVENT(fsi_slave_invalid_cfam,
189	TP_PROTO(const struct fsi_master *master, int link, uint32_t cfam_id),
190	TP_ARGS(master, link, cfam_id),
191	TP_STRUCT__entry(
192		__field(int,	master_idx)
193		__field(int,	master_n_links)
194		__field(int,	link)
195		__field(__u32,	cfam_id)
196	),
197	TP_fast_assign(
198		__entry->master_idx = master->idx;
199		__entry->master_n_links = master->n_links;
200		__entry->link = link;
201		__entry->cfam_id = cfam_id;
202	),
203	TP_printk("fsi%d: cfam:%08x link:%d/%d",
204		__entry->master_idx,
205		__entry->cfam_id,
206		__entry->link,
207		__entry->master_n_links
208	)
209);
210
211TRACE_EVENT(fsi_dev_init,
212	TP_PROTO(const struct fsi_device *dev),
213	TP_ARGS(dev),
214	TP_STRUCT__entry(
215		__field(int,	master_idx)
216		__field(int,	link)
217		__field(int,	type)
218		__field(int,	unit)
219		__field(int,	version)
220		__field(__u32,	addr)
221		__field(__u32,	size)
222	),
223	TP_fast_assign(
224		__entry->master_idx = dev->slave->master->idx;
225		__entry->link = dev->slave->link;
226		__entry->type = dev->engine_type;
227		__entry->unit = dev->unit;
228		__entry->version = dev->version;
229		__entry->addr = dev->addr;
230		__entry->size = dev->size;
231	),
232	TP_printk("fsi%d: slv%d: t:%02x u:%02x v:%02x %08x@%08x",
233		__entry->master_idx,
234		__entry->link,
235		__entry->type,
236		__entry->unit,
237		__entry->version,
238		__entry->size,
239		__entry->addr
240	)
241);
242
243#endif /* _TRACE_FSI_H */
244
245#include <trace/define_trace.h>
246