aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2017-06-06 17:08:55 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-06-09 05:52:09 -0400
commit1247cf7ab876b6f1da7028bff64b3d89130dd8e3 (patch)
tree5a3a2b78b273ba270180a7ec77b80bd3e1d7647a
parentac0385d9f609e836e82213c75a24ae87f8fe1c9f (diff)
drivers/fsi/gpio: Add tracepoints for GPIO master
Trace low level input/output GPIO operations. Signed-off-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/fsi/fsi-master-gpio.c9
-rw-r--r--include/trace/events/fsi_master_gpio.h68
2 files changed, 77 insertions, 0 deletions
diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
index d467e61065a9..a5d6e705b3c5 100644
--- a/drivers/fsi/fsi-master-gpio.c
+++ b/drivers/fsi/fsi-master-gpio.c
@@ -61,6 +61,9 @@ struct fsi_master_gpio {
61 struct gpio_desc *gpio_mux; /* Mux control */ 61 struct gpio_desc *gpio_mux; /* Mux control */
62}; 62};
63 63
64#define CREATE_TRACE_POINTS
65#include <trace/events/fsi_master_gpio.h>
66
64#define to_fsi_master_gpio(m) container_of(m, struct fsi_master_gpio, master) 67#define to_fsi_master_gpio(m) container_of(m, struct fsi_master_gpio, master)
65 68
66struct fsi_gpio_msg { 69struct fsi_gpio_msg {
@@ -126,6 +129,8 @@ static void serial_in(struct fsi_master_gpio *master, struct fsi_gpio_msg *msg,
126 msg->msg |= ~in_bit & 0x1; /* Data is active low */ 129 msg->msg |= ~in_bit & 0x1; /* Data is active low */
127 } 130 }
128 msg->bits += num_bits; 131 msg->bits += num_bits;
132
133 trace_fsi_master_gpio_in(master, num_bits, msg->msg);
129} 134}
130 135
131static void serial_out(struct fsi_master_gpio *master, 136static void serial_out(struct fsi_master_gpio *master,
@@ -137,6 +142,8 @@ static void serial_out(struct fsi_master_gpio *master,
137 uint64_t last_bit = ~0; 142 uint64_t last_bit = ~0;
138 int next_bit; 143 int next_bit;
139 144
145 trace_fsi_master_gpio_out(master, cmd->bits, cmd->msg);
146
140 if (!cmd->bits) { 147 if (!cmd->bits) {
141 dev_warn(master->dev, "trying to output 0 bits\n"); 148 dev_warn(master->dev, "trying to output 0 bits\n");
142 return; 149 return;
@@ -458,6 +465,8 @@ static int fsi_master_gpio_break(struct fsi_master *_master, int link)
458 if (link != 0) 465 if (link != 0)
459 return -ENODEV; 466 return -ENODEV;
460 467
468 trace_fsi_master_gpio_break(master);
469
461 set_sda_output(master, 1); 470 set_sda_output(master, 1);
462 sda_out(master, 1); 471 sda_out(master, 1);
463 clock_toggle(master, FSI_PRE_BREAK_CLOCKS); 472 clock_toggle(master, FSI_PRE_BREAK_CLOCKS);
diff --git a/include/trace/events/fsi_master_gpio.h b/include/trace/events/fsi_master_gpio.h
new file mode 100644
index 000000000000..11b36c119048
--- /dev/null
+++ b/include/trace/events/fsi_master_gpio.h
@@ -0,0 +1,68 @@
1
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM fsi_master_gpio
4
5#if !defined(_TRACE_FSI_MASTER_GPIO_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_FSI_MASTER_GPIO_H
7
8#include <linux/tracepoint.h>
9
10TRACE_EVENT(fsi_master_gpio_in,
11 TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
12 TP_ARGS(master, bits, msg),
13 TP_STRUCT__entry(
14 __field(int, master_idx)
15 __field(int, bits)
16 __field(uint64_t, msg)
17 ),
18 TP_fast_assign(
19 __entry->master_idx = master->master.idx;
20 __entry->bits = bits;
21 __entry->msg = msg & ((1ull<<bits) - 1);
22 ),
23 TP_printk("fsi-gpio%d => %0*llx[%d]",
24 __entry->master_idx,
25 (__entry->bits + 3) / 4,
26 __entry->msg,
27 __entry->bits
28 )
29);
30
31TRACE_EVENT(fsi_master_gpio_out,
32 TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
33 TP_ARGS(master, bits, msg),
34 TP_STRUCT__entry(
35 __field(int, master_idx)
36 __field(int, bits)
37 __field(uint64_t, msg)
38 ),
39 TP_fast_assign(
40 __entry->master_idx = master->master.idx;
41 __entry->bits = bits;
42 __entry->msg = msg & ((1ull<<bits) - 1);
43 ),
44 TP_printk("fsi-gpio%d <= %0*llx[%d]",
45 __entry->master_idx,
46 (__entry->bits + 3) / 4,
47 __entry->msg,
48 __entry->bits
49 )
50);
51
52TRACE_EVENT(fsi_master_gpio_break,
53 TP_PROTO(const struct fsi_master_gpio *master),
54 TP_ARGS(master),
55 TP_STRUCT__entry(
56 __field(int, master_idx)
57 ),
58 TP_fast_assign(
59 __entry->master_idx = master->master.idx;
60 ),
61 TP_printk("fsi-gpio%d ----break---",
62 __entry->master_idx
63 )
64);
65
66#endif /* _TRACE_FSI_MASTER_GPIO_H */
67
68#include <trace/define_trace.h>