0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM spi
0004
0005 #if !defined(_TRACE_SPI_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_SPI_H
0007
0008 #include <linux/ktime.h>
0009 #include <linux/tracepoint.h>
0010
0011 DECLARE_EVENT_CLASS(spi_controller,
0012
0013 TP_PROTO(struct spi_controller *controller),
0014
0015 TP_ARGS(controller),
0016
0017 TP_STRUCT__entry(
0018 __field( int, bus_num )
0019 ),
0020
0021 TP_fast_assign(
0022 __entry->bus_num = controller->bus_num;
0023 ),
0024
0025 TP_printk("spi%d", (int)__entry->bus_num)
0026
0027 );
0028
0029 DEFINE_EVENT(spi_controller, spi_controller_idle,
0030
0031 TP_PROTO(struct spi_controller *controller),
0032
0033 TP_ARGS(controller)
0034
0035 );
0036
0037 DEFINE_EVENT(spi_controller, spi_controller_busy,
0038
0039 TP_PROTO(struct spi_controller *controller),
0040
0041 TP_ARGS(controller)
0042
0043 );
0044
0045 TRACE_EVENT(spi_setup,
0046 TP_PROTO(struct spi_device *spi, int status),
0047 TP_ARGS(spi, status),
0048
0049 TP_STRUCT__entry(
0050 __field(int, bus_num)
0051 __field(int, chip_select)
0052 __field(unsigned long, mode)
0053 __field(unsigned int, bits_per_word)
0054 __field(unsigned int, max_speed_hz)
0055 __field(int, status)
0056 ),
0057
0058 TP_fast_assign(
0059 __entry->bus_num = spi->controller->bus_num;
0060 __entry->chip_select = spi->chip_select;
0061 __entry->mode = spi->mode;
0062 __entry->bits_per_word = spi->bits_per_word;
0063 __entry->max_speed_hz = spi->max_speed_hz;
0064 __entry->status = status;
0065 ),
0066
0067 TP_printk("spi%d.%d setup mode %lu, %s%s%s%s%u bits/w, %u Hz max --> %d",
0068 __entry->bus_num, __entry->chip_select,
0069 (__entry->mode & SPI_MODE_X_MASK),
0070 (__entry->mode & SPI_CS_HIGH) ? "cs_high, " : "",
0071 (__entry->mode & SPI_LSB_FIRST) ? "lsb, " : "",
0072 (__entry->mode & SPI_3WIRE) ? "3wire, " : "",
0073 (__entry->mode & SPI_LOOP) ? "loopback, " : "",
0074 __entry->bits_per_word, __entry->max_speed_hz,
0075 __entry->status)
0076 );
0077
0078 TRACE_EVENT(spi_set_cs,
0079 TP_PROTO(struct spi_device *spi, bool enable),
0080 TP_ARGS(spi, enable),
0081
0082 TP_STRUCT__entry(
0083 __field(int, bus_num)
0084 __field(int, chip_select)
0085 __field(unsigned long, mode)
0086 __field(bool, enable)
0087 ),
0088
0089 TP_fast_assign(
0090 __entry->bus_num = spi->controller->bus_num;
0091 __entry->chip_select = spi->chip_select;
0092 __entry->mode = spi->mode;
0093 __entry->enable = enable;
0094 ),
0095
0096 TP_printk("spi%d.%d %s%s",
0097 __entry->bus_num, __entry->chip_select,
0098 __entry->enable ? "activate" : "deactivate",
0099 (__entry->mode & SPI_CS_HIGH) ? ", cs_high" : "")
0100 );
0101
0102 DECLARE_EVENT_CLASS(spi_message,
0103
0104 TP_PROTO(struct spi_message *msg),
0105
0106 TP_ARGS(msg),
0107
0108 TP_STRUCT__entry(
0109 __field( int, bus_num )
0110 __field( int, chip_select )
0111 __field( struct spi_message *, msg )
0112 ),
0113
0114 TP_fast_assign(
0115 __entry->bus_num = msg->spi->controller->bus_num;
0116 __entry->chip_select = msg->spi->chip_select;
0117 __entry->msg = msg;
0118 ),
0119
0120 TP_printk("spi%d.%d %p", (int)__entry->bus_num,
0121 (int)__entry->chip_select,
0122 (struct spi_message *)__entry->msg)
0123 );
0124
0125 DEFINE_EVENT(spi_message, spi_message_submit,
0126
0127 TP_PROTO(struct spi_message *msg),
0128
0129 TP_ARGS(msg)
0130
0131 );
0132
0133 DEFINE_EVENT(spi_message, spi_message_start,
0134
0135 TP_PROTO(struct spi_message *msg),
0136
0137 TP_ARGS(msg)
0138
0139 );
0140
0141 TRACE_EVENT(spi_message_done,
0142
0143 TP_PROTO(struct spi_message *msg),
0144
0145 TP_ARGS(msg),
0146
0147 TP_STRUCT__entry(
0148 __field( int, bus_num )
0149 __field( int, chip_select )
0150 __field( struct spi_message *, msg )
0151 __field( unsigned, frame )
0152 __field( unsigned, actual )
0153 ),
0154
0155 TP_fast_assign(
0156 __entry->bus_num = msg->spi->controller->bus_num;
0157 __entry->chip_select = msg->spi->chip_select;
0158 __entry->msg = msg;
0159 __entry->frame = msg->frame_length;
0160 __entry->actual = msg->actual_length;
0161 ),
0162
0163 TP_printk("spi%d.%d %p len=%u/%u", (int)__entry->bus_num,
0164 (int)__entry->chip_select,
0165 (struct spi_message *)__entry->msg,
0166 (unsigned)__entry->actual, (unsigned)__entry->frame)
0167 );
0168
0169
0170
0171
0172
0173
0174 #define spi_valid_txbuf(msg, xfer) \
0175 (xfer->tx_buf && xfer->tx_buf != msg->spi->controller->dummy_tx)
0176 #define spi_valid_rxbuf(msg, xfer) \
0177 (xfer->rx_buf && xfer->rx_buf != msg->spi->controller->dummy_rx)
0178
0179 DECLARE_EVENT_CLASS(spi_transfer,
0180
0181 TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
0182
0183 TP_ARGS(msg, xfer),
0184
0185 TP_STRUCT__entry(
0186 __field( int, bus_num )
0187 __field( int, chip_select )
0188 __field( struct spi_transfer *, xfer )
0189 __field( int, len )
0190 __dynamic_array(u8, rx_buf,
0191 spi_valid_rxbuf(msg, xfer) ?
0192 (xfer->len < 64 ? xfer->len : 64) : 0)
0193 __dynamic_array(u8, tx_buf,
0194 spi_valid_txbuf(msg, xfer) ?
0195 (xfer->len < 64 ? xfer->len : 64) : 0)
0196 ),
0197
0198 TP_fast_assign(
0199 __entry->bus_num = msg->spi->controller->bus_num;
0200 __entry->chip_select = msg->spi->chip_select;
0201 __entry->xfer = xfer;
0202 __entry->len = xfer->len;
0203
0204 if (spi_valid_txbuf(msg, xfer))
0205 memcpy(__get_dynamic_array(tx_buf),
0206 xfer->tx_buf, __get_dynamic_array_len(tx_buf));
0207
0208 if (spi_valid_rxbuf(msg, xfer))
0209 memcpy(__get_dynamic_array(rx_buf),
0210 xfer->rx_buf, __get_dynamic_array_len(rx_buf));
0211 ),
0212
0213 TP_printk("spi%d.%d %p len=%d tx=[%*phD] rx=[%*phD]",
0214 __entry->bus_num, __entry->chip_select,
0215 __entry->xfer, __entry->len,
0216 __get_dynamic_array_len(tx_buf), __get_dynamic_array(tx_buf),
0217 __get_dynamic_array_len(rx_buf), __get_dynamic_array(rx_buf))
0218 );
0219
0220 DEFINE_EVENT(spi_transfer, spi_transfer_start,
0221
0222 TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
0223
0224 TP_ARGS(msg, xfer)
0225
0226 );
0227
0228 DEFINE_EVENT(spi_transfer, spi_transfer_stop,
0229
0230 TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
0231
0232 TP_ARGS(msg, xfer)
0233
0234 );
0235
0236 #endif
0237
0238
0239 #include <trace/define_trace.h>