[PATCH 3/6] trace: qpace: Add tracepoints for QPaCE operations
flat view
HOTtoday
From: Georgi Djakov <hidden>
Date: 2026-09-30 14:52:30
Also in:
linux-arm-msm, linux-block, linux-devicetree, lkml
Subsystem:
arm/qualcomm mailing list, arm/qualcomm support, the rest, tracing · Maintainers:
Bjorn Andersson, Konrad Dybcio, Linus Torvalds, Steven Rostedt, Masami Hiramatsu
Add ftrace tracepoints for the Qualcomm Page Compression Engine to allow performance analysis and debugging of QPaCE hardware operations. Signed-off-by: Georgi Djakov <redacted> --- drivers/soc/qcom/qpace.c | 12 +++++ include/trace/events/qpace.h | 99 ++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 include/trace/events/qpace.h
diff --git a/drivers/soc/qcom/qpace.c b/drivers/soc/qcom/qpace.c
index 69aa14b7c477..f5b21ffbcbff 100644
--- a/drivers/soc/qcom/qpace.c
+++ b/drivers/soc/qcom/qpace.c@@ -23,6 +23,9 @@ #include "qpace_internal.h" +#define CREATE_TRACE_POINTS +#include <trace/events/qpace.h> + #define QPACE_REG_PAGE_SIZE 4096 #define QPACE_CORE_CACHEINDEX_SIZE 4
@@ -310,6 +313,8 @@ int qpace_urgent_compress(dma_addr_t input_addr, if (ret) return ret; + trace_start_qpace_urgent_compress((u64)input_addr, (u64)output_addr); + urg_reg_num = get_cpu() % NUM_TRS_ERS_URG_CMD_REGS; stat_reg = qpace_urgent_command_trigger(input_addr, output_addr, urg_reg_num, algo->urg_comp_cntxt);
@@ -338,6 +343,7 @@ int qpace_urgent_compress(dma_addr_t input_addr, ret = FIELD_GET(URG_CMD_0_ED_STAT_SIZE, stat_reg); out: + trace_end_qpace_urgent_compress((u64)input_addr, (u64)output_addr, ret); return ret; } EXPORT_SYMBOL_GPL(qpace_urgent_compress);
@@ -356,6 +362,9 @@ int qpace_urgent_decompress(dma_addr_t input_addr, if (ret) goto out; + trace_start_qpace_urgent_decompress((u64)input_addr, + (u64)output_addr, input_size); + urg_reg_num = get_cpu() % NUM_TRS_ERS_URG_CMD_REGS; qpace_write_urg_cmd_ctx(qpace_priv, QPACE_URG_CMD_0_CFG_CNTXT_SIZE_n_OFFSET, urg_reg_num, algo->urg_decomp_cntxt,
@@ -381,6 +390,9 @@ int qpace_urgent_decompress(dma_addr_t input_addr, ret = FIELD_GET(URG_CMD_0_ED_STAT_SIZE, stat_reg); out: + trace_end_qpace_urgent_decompress((u64)input_addr, + (u64)output_addr, + input_size, ret); return ret; } EXPORT_SYMBOL_GPL(qpace_urgent_decompress);
diff --git a/include/trace/events/qpace.h b/include/trace/events/qpace.h
new file mode 100644
index 000000000000..3f0ccdb8f206
--- /dev/null
+++ b/include/trace/events/qpace.h@@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM qpace + +#if !defined(_TRACE_QPACE_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_QPACE_H +#include <linux/tracepoint.h> + +TRACE_EVENT(start_qpace_urgent_decompress, + + TP_PROTO(u64 src, u64 dst, unsigned int size), + TP_ARGS(src, dst, size), + + TP_STRUCT__entry( + __field(u64, src) + __field(u64, dst) + __field(unsigned int, size) + ), + + TP_fast_assign( + __entry->src = src; + __entry->dst = dst; + __entry->size = size; + ), + + TP_printk("src=0x%llx dst=0x%llx size=%u", + __entry->src, __entry->dst, __entry->size) +); + +TRACE_EVENT(end_qpace_urgent_decompress, + + TP_PROTO(u64 src, u64 dst, unsigned int size, int ret), + TP_ARGS(src, dst, size, ret), + + TP_STRUCT__entry( + __field(u64, src) + __field(u64, dst) + __field(unsigned int, size) + __field(int, ret) + ), + + TP_fast_assign( + __entry->src = src; + __entry->dst = dst; + __entry->size = size; + __entry->ret = ret; + ), + + TP_printk("src=0x%llx dst=0x%llx size=%u ret=%d", + __entry->src, __entry->dst, __entry->size, __entry->ret) +); + +TRACE_EVENT(start_qpace_urgent_compress, + + TP_PROTO(u64 src, u64 dst), + TP_ARGS(src, dst), + + TP_STRUCT__entry( + __field(u64, src) + __field(u64, dst) + ), + + TP_fast_assign( + __entry->src = src; + __entry->dst = dst; + ), + + TP_printk("src=0x%llx dst=0x%llx", + __entry->src, __entry->dst) +); + +TRACE_EVENT(end_qpace_urgent_compress, + + TP_PROTO(u64 src, u64 dst, int ret), + TP_ARGS(src, dst, ret), + + TP_STRUCT__entry( + __field(u64, src) + __field(u64, dst) + __field(int, ret) + ), + + TP_fast_assign( + __entry->src = src; + __entry->dst = dst; + __entry->ret = ret; + ), + + TP_printk("src=0x%llx dst=0x%llx ret=%d", + __entry->src, __entry->dst, __entry->ret) +); + +#endif /* _TRACE_QPACE_H */ + +#include <trace/define_trace.h>