spi: qcom-geni: trace: Add trace events for Qualcomm GENI SPI

Add tracepoint support to the Qualcomm GENI SPI driver to provide
runtime visibility into driver behavior without requiring invasive debug
patches.

The trace events cover clock and setup parameter configuration,
transfer metadata, interrupt status to be making it easier to diagnose
communication issues in the field..

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Praveen Talari <praveen.talari@oss.qualcomm.com>
Link: https://patch.msgid.link/20260518-add-tracepoints-for-qcom-geni-spi-v3-1-7928f6810a79@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Praveen Talari 2026-05-18 22:30:51 +05:30 committed by Mark Brown
parent 5200f5f493
commit bf62d130b1
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -0,0 +1,103 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM qcom_geni_spi
#if !defined(_TRACE_QCOM_GENI_SPI_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_QCOM_GENI_SPI_H
#include <linux/tracepoint.h>
TRACE_EVENT(geni_spi_setup_params,
TP_PROTO(struct device *dev, u8 cs, u32 mode,
u32 mode_changed, bool cs_changed),
TP_ARGS(dev, cs, mode, mode_changed, cs_changed),
TP_STRUCT__entry(__string(name, dev_name(dev))
__field(u8, cs)
__field(u32, mode)
__field(u32, mode_changed)
__field(bool, cs_changed)
),
TP_fast_assign(__assign_str(name);
__entry->cs = cs;
__entry->mode = mode;
__entry->mode_changed = mode_changed;
__entry->cs_changed = cs_changed;
),
TP_printk("%s: cs=%u mode=0x%08x mode_changed=0x%08x cs_changed=%d",
__get_str(name), __entry->cs, __entry->mode,
__entry->mode_changed, __entry->cs_changed)
);
TRACE_EVENT(geni_spi_clk_cfg,
TP_PROTO(struct device *dev, unsigned long req_hz,
unsigned long sclk_hz, unsigned int clk_idx,
unsigned int clk_div, unsigned int bpw),
TP_ARGS(dev, req_hz, sclk_hz, clk_idx, clk_div, bpw),
TP_STRUCT__entry(__string(name, dev_name(dev))
__field(unsigned long, req_hz)
__field(unsigned long, sclk_hz)
__field(unsigned int, clk_idx)
__field(unsigned int, clk_div)
__field(unsigned int, bpw)
),
TP_fast_assign(__assign_str(name);
__entry->req_hz = req_hz;
__entry->sclk_hz = sclk_hz;
__entry->clk_idx = clk_idx;
__entry->clk_div = clk_div;
__entry->bpw = bpw;
),
TP_printk("%s: req_hz=%lu sclk_hz=%lu clk_idx=%u clk_div=%u bpw=%u",
__get_str(name), __entry->req_hz, __entry->sclk_hz,
__entry->clk_idx, __entry->clk_div, __entry->bpw)
);
TRACE_EVENT(geni_spi_transfer,
TP_PROTO(struct device *dev, unsigned int len, u32 m_cmd),
TP_ARGS(dev, len, m_cmd),
TP_STRUCT__entry(__string(name, dev_name(dev))
__field(unsigned int, len)
__field(u32, m_cmd)
),
TP_fast_assign(__assign_str(name);
__entry->len = len;
__entry->m_cmd = m_cmd;
),
TP_printk("%s: len=%u m_cmd=0x%08x",
__get_str(name), __entry->len, __entry->m_cmd)
);
TRACE_EVENT(geni_spi_irq,
TP_PROTO(struct device *dev, u32 m_irq, u32 dma_tx, u32 dma_rx),
TP_ARGS(dev, m_irq, dma_tx, dma_rx),
TP_STRUCT__entry(__string(name, dev_name(dev))
__field(u32, m_irq)
__field(u32, dma_tx)
__field(u32, dma_rx)
),
TP_fast_assign(__assign_str(name);
__entry->m_irq = m_irq;
__entry->dma_tx = dma_tx;
__entry->dma_rx = dma_rx;
),
TP_printk("%s: m_irq=0x%08x dma_tx=0x%08x dma_rx=0x%08x",
__get_str(name), __entry->m_irq, __entry->dma_tx,
__entry->dma_rx)
);
#endif /* _TRACE_QCOM_GENI_SPI_H */
/* This part must be outside protection */
#include <trace/define_trace.h>