diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2017-06-06 17:08:55 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-06-09 05:52:09 -0400 |
commit | 1247cf7ab876b6f1da7028bff64b3d89130dd8e3 (patch) | |
tree | 5a3a2b78b273ba270180a7ec77b80bd3e1d7647a | |
parent | ac0385d9f609e836e82213c75a24ae87f8fe1c9f (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.c | 9 | ||||
-rw-r--r-- | include/trace/events/fsi_master_gpio.h | 68 |
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 | ||
66 | struct fsi_gpio_msg { | 69 | struct 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 | ||
131 | static void serial_out(struct fsi_master_gpio *master, | 136 | static 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 | |||
10 | TRACE_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 | |||
31 | TRACE_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 | |||
52 | TRACE_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> | ||