Skip to content

Commit

Permalink
drivers/fsi/gpio: Add tracepoints for GPIO master
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeremy Kerr authored and Greg Kroah-Hartman committed Jun 9, 2017
1 parent ac0385d commit 1247cf7
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/fsi/fsi-master-gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ struct fsi_master_gpio {
struct gpio_desc *gpio_mux; /* Mux control */
};

#define CREATE_TRACE_POINTS
#include <trace/events/fsi_master_gpio.h>

#define to_fsi_master_gpio(m) container_of(m, struct fsi_master_gpio, master)

struct fsi_gpio_msg {
Expand Down Expand Up @@ -126,6 +129,8 @@ static void serial_in(struct fsi_master_gpio *master, struct fsi_gpio_msg *msg,
msg->msg |= ~in_bit & 0x1; /* Data is active low */
}
msg->bits += num_bits;

trace_fsi_master_gpio_in(master, num_bits, msg->msg);
}

static void serial_out(struct fsi_master_gpio *master,
Expand All @@ -137,6 +142,8 @@ static void serial_out(struct fsi_master_gpio *master,
uint64_t last_bit = ~0;
int next_bit;

trace_fsi_master_gpio_out(master, cmd->bits, cmd->msg);

if (!cmd->bits) {
dev_warn(master->dev, "trying to output 0 bits\n");
return;
Expand Down Expand Up @@ -458,6 +465,8 @@ static int fsi_master_gpio_break(struct fsi_master *_master, int link)
if (link != 0)
return -ENODEV;

trace_fsi_master_gpio_break(master);

set_sda_output(master, 1);
sda_out(master, 1);
clock_toggle(master, FSI_PRE_BREAK_CLOCKS);
Expand Down
68 changes: 68 additions & 0 deletions include/trace/events/fsi_master_gpio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@

#undef TRACE_SYSTEM
#define TRACE_SYSTEM fsi_master_gpio

#if !defined(_TRACE_FSI_MASTER_GPIO_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_FSI_MASTER_GPIO_H

#include <linux/tracepoint.h>

TRACE_EVENT(fsi_master_gpio_in,
TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
TP_ARGS(master, bits, msg),
TP_STRUCT__entry(
__field(int, master_idx)
__field(int, bits)
__field(uint64_t, msg)
),
TP_fast_assign(
__entry->master_idx = master->master.idx;
__entry->bits = bits;
__entry->msg = msg & ((1ull<<bits) - 1);
),
TP_printk("fsi-gpio%d => %0*llx[%d]",
__entry->master_idx,
(__entry->bits + 3) / 4,
__entry->msg,
__entry->bits
)
);

TRACE_EVENT(fsi_master_gpio_out,
TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
TP_ARGS(master, bits, msg),
TP_STRUCT__entry(
__field(int, master_idx)
__field(int, bits)
__field(uint64_t, msg)
),
TP_fast_assign(
__entry->master_idx = master->master.idx;
__entry->bits = bits;
__entry->msg = msg & ((1ull<<bits) - 1);
),
TP_printk("fsi-gpio%d <= %0*llx[%d]",
__entry->master_idx,
(__entry->bits + 3) / 4,
__entry->msg,
__entry->bits
)
);

TRACE_EVENT(fsi_master_gpio_break,
TP_PROTO(const struct fsi_master_gpio *master),
TP_ARGS(master),
TP_STRUCT__entry(
__field(int, master_idx)
),
TP_fast_assign(
__entry->master_idx = master->master.idx;
),
TP_printk("fsi-gpio%d ----break---",
__entry->master_idx
)
);

#endif /* _TRACE_FSI_MASTER_GPIO_H */

#include <trace/define_trace.h>

0 comments on commit 1247cf7

Please sign in to comment.