]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: axi-spi-engine: Emit trace events for spi transfers
authorUwe Kleine-König <u.kleine-koenig@baylibre.com>
Thu, 31 Oct 2024 11:16:45 +0000 (12:16 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 31 Oct 2024 18:51:26 +0000 (18:51 +0000)
As this spi host controller driver implements the
.transfer_one_message() callback, it has to care about these traces
it-self. With the transfers being compiled it's difficult to determine
where handling of one transfer ends and the next begins, so just
generate the start events in batch before the hardware fifo is fed and
the end events when their completion triggered.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20241031111646.747692-2-u.kleine-koenig@baylibre.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-axi-spi-engine.c

index 2dff95d2b3f5d642f6846da4f4aa9bdc7ae4a2e6..7c252126b33ea83fe6a6e80c6cb87499243069f5 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/overflow.h>
 #include <linux/platform_device.h>
 #include <linux/spi/spi.h>
+#include <trace/events/spi.h>
 
 #define SPI_ENGINE_REG_RESET                   0x40
 
@@ -590,6 +591,13 @@ static int spi_engine_transfer_one_message(struct spi_controller *host,
 
        reinit_completion(&spi_engine->msg_complete);
 
+       if (trace_spi_transfer_start_enabled()) {
+               struct spi_transfer *xfer;
+
+               list_for_each_entry(xfer, &msg->transfers, transfer_list)
+                       trace_spi_transfer_start(msg, xfer);
+       }
+
        spin_lock_irqsave(&spi_engine->lock, flags);
 
        if (spi_engine_write_cmd_fifo(spi_engine, msg))
@@ -617,6 +625,13 @@ static int spi_engine_transfer_one_message(struct spi_controller *host,
                msg->status = -ETIMEDOUT;
        }
 
+       if (trace_spi_transfer_stop_enabled()) {
+               struct spi_transfer *xfer;
+
+               list_for_each_entry(xfer, &msg->transfers, transfer_list)
+                       trace_spi_transfer_stop(msg, xfer);
+       }
+
        spi_finalize_current_message(host);
 
        return msg->status;