summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-05-19 14:12:58 +0100
committerMark Brown <broonie@kernel.org>2026-05-19 14:12:58 +0100
commit638f5500111c27379e16a7cf5599f23094bfb7ae (patch)
treea2de76c64806e66e30d590fa5657998e75830378 /drivers/spi
parent58c7f6a2c3459d5af5770c0c70db8c59dfedfb16 (diff)
parentb5687af4af890cfd0a59f879ded40be92a19076e (diff)
downloadlinux-next-638f5500111c27379e16a7cf5599f23094bfb7ae.tar.gz
linux-next-638f5500111c27379e16a7cf5599f23094bfb7ae.zip
spi: Add trace events for Qualcomm GENI SPI drivers
Praveen Talari <praveen.talari@oss.qualcomm.com> says: Add tracepoints to the Qualcomm GENI (Generic Interface) SPI driver. These trace events enable runtime debugging and performance analysis of SPI operations. The trace events capture SPI clock configuration, setup parameters, transfer details, interrupt status. Usage examples: Enable all SPI traces: echo 1 > /sys/kernel/tracing/events/spi/enable echo 1 > /sys/kernel/debug/tracing/events/qcom_geni_spi/enable cat /sys/kernel/debug/tracing/trace_pipe Example trace output: 1003.956560: spi_message_submit: spi16.0 000000001b20b93c 1003.956642: spi_controller_busy: spi16 1003.956643: spi_message_start: spi16.0 000000001b20b93c 1003.956646: geni_spi_setup_params: 888000.spi: cs=0 mode=0x00000020 mode_changed=0x00000007 cs_changed=0 1003.956647: spi_set_cs: spi16.0 activate 1003.956648: spi_transfer_start: spi16.0 00000000ea1cf8b6 len=16 tx=[4c-80-e4-ca-68-4d-95-aa-ee-99-ae-d7-69-e9-5f-39] rx=[00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00] 1003.956653: geni_spi_clk_cfg: 888000.spi: req_hz=20000000 sclk_hz=100000000 clk_idx=5 clk_div=5 bpw=8 1003.956691: geni_spi_transfer: 888000.spi: len=16 m_cmd=0x00000003 1003.956708: geni_spi_irq: 888000.spi: m_irq=0x08000081 dma_tx=0x00000000 dma_rx=0x00000000 1003.956717: spi_transfer_stop: spi16.0 00000000ea1cf8b6 len=16 tx=[4c-80-e4-ca-68-4d-95-aa-ee-99-ae-d7-69-e9-5f-39] rx=[4c-80-e4-ca-68-4d-95-aa-ee-99-ae-d7-69-e9-5f-39] 1003.956717: spi_set_cs: spi16.0 deactivate 1003.956718: spi_message_done: spi16.0 000000001b20b93c len=16/16 Link: https://patch.msgid.link/20260518-add-tracepoints-for-qcom-geni-spi-v3-0-7928f6810a79@oss.qualcomm.com
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi-geni-qcom.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index d5fb0edc8e0c..a04cdc1e5ad4 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -1,6 +1,9 @@
// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2017-2018, The Linux foundation. All rights reserved.
+#define CREATE_TRACE_POINTS
+#include <trace/events/qcom_geni_spi.h>
+
#include <linux/clk.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
@@ -332,6 +335,9 @@ static int geni_spi_set_clock_and_bw(struct spi_geni_master *mas,
writel(clk_sel, se->base + SE_GENI_CLK_SEL);
writel(m_clk_cfg, se->base + GENI_SER_M_CLK_CFG);
+ trace_geni_spi_clk_cfg(mas->dev, clk_hz, mas->cur_sclk_hz, idx, div,
+ mas->cur_bits_per_word);
+
/* Set BW quota for CPU as driver supports FIFO mode only. */
se->icc_paths[CPU_TO_GENI].avg_bw = Bps_to_icc(mas->cur_speed_hz);
ret = geni_icc_set_bw(se);
@@ -366,6 +372,9 @@ static int setup_fifo_params(struct spi_device *spi_slv,
if ((mode_changed & SPI_CS_HIGH) || (cs_changed && (spi_slv->mode & SPI_CS_HIGH)))
writel((spi_slv->mode & SPI_CS_HIGH) ? BIT(chipselect) : 0, se->base + SE_SPI_DEMUX_OUTPUT_INV);
+ trace_geni_spi_setup_params(mas->dev, chipselect, spi_slv->mode,
+ mode_changed, cs_changed);
+
return 0;
}
@@ -861,6 +870,8 @@ static int setup_se_xfer(struct spi_transfer *xfer,
spin_lock_irq(&mas->lock);
geni_se_setup_m_cmd(se, m_cmd, m_params);
+ trace_geni_spi_transfer(mas->dev, len, m_cmd);
+
if (mas->cur_xfer_mode == GENI_SE_DMA) {
if (m_cmd & SPI_RX_ONLY)
geni_se_rx_init_dma(se, sg_dma_address(xfer->rx_sg.sgl),
@@ -915,6 +926,8 @@ static irqreturn_t geni_spi_isr(int irq, void *data)
if (!m_irq && !dma_tx_status && !dma_rx_status)
return IRQ_NONE;
+ trace_geni_spi_irq(mas->dev, m_irq, dma_tx_status, dma_rx_status);
+
if (m_irq & (M_CMD_OVERRUN_EN | M_ILLEGAL_CMD_EN | M_CMD_FAILURE_EN |
M_RX_FIFO_RD_ERR_EN | M_RX_FIFO_WR_ERR_EN |
M_TX_FIFO_RD_ERR_EN | M_TX_FIFO_WR_ERR_EN))