Skip to content

Commit

Permalink
soc: qcom: icc-bwmon: Add tracepoints in bwmon_intr_thread
Browse files Browse the repository at this point in the history
Add tracepoint for tracing the measured traffic in kbps,
up_kbps and down_kbps in bwmon. This information is valuable
for understanding what bwmon hw measures at the system cache
level and at the DDR level which is helpful in debugging
bwmon behavior.

Signed-off-by: Shivnandan Kumar <quic_kshivnan@quicinc.com>
Reviewed-by: Sibi Sankar <quic_sibis@quicinc.com>
Link: https://lore.kernel.org/r/20240708101734.1999795-1-quic_kshivnan@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
  • Loading branch information
Shivnandan Kumar authored and Bjorn Andersson committed Aug 1, 2024
1 parent 99a7b37 commit dc8c4a8
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -18855,6 +18855,7 @@ L: linux-arm-msm@vger.kernel.org
S: Maintained
F: Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml
F: drivers/soc/qcom/icc-bwmon.c
F: drivers/soc/qcom/trace_icc-bwmon.h

QUALCOMM IOMMU
M: Rob Clark <robdclark@gmail.com>
Expand Down
6 changes: 5 additions & 1 deletion drivers/soc/qcom/icc-bwmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include <linux/pm_opp.h>
#include <linux/regmap.h>
#include <linux/sizes.h>
#define CREATE_TRACE_POINTS
#include "trace_icc-bwmon.h"

/*
* The BWMON samples data throughput within 'sample_ms' time. With three
Expand Down Expand Up @@ -645,9 +647,10 @@ static irqreturn_t bwmon_intr_thread(int irq, void *dev_id)
struct icc_bwmon *bwmon = dev_id;
unsigned int irq_enable = 0;
struct dev_pm_opp *opp, *target_opp;
unsigned int bw_kbps, up_kbps, down_kbps;
unsigned int bw_kbps, up_kbps, down_kbps, meas_kbps;

bw_kbps = bwmon->target_kbps;
meas_kbps = bwmon->target_kbps;

target_opp = dev_pm_opp_find_bw_ceil(bwmon->dev, &bw_kbps, 0);
if (IS_ERR(target_opp) && PTR_ERR(target_opp) == -ERANGE)
Expand Down Expand Up @@ -679,6 +682,7 @@ static irqreturn_t bwmon_intr_thread(int irq, void *dev_id)
bwmon_clear_irq(bwmon);
bwmon_enable(bwmon, irq_enable);

trace_qcom_bwmon_update(dev_name(bwmon->dev), meas_kbps, up_kbps, down_kbps);
if (bwmon->target_kbps == bwmon->current_kbps)
goto out;

Expand Down
48 changes: 48 additions & 0 deletions drivers/soc/qcom/trace_icc-bwmon.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/

#undef TRACE_SYSTEM
#define TRACE_SYSTEM icc_bwmon

#if !defined(_TRACE_ICC_BWMON_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_ICC_BWMON_H
#include <linux/tracepoint.h>

TRACE_EVENT(qcom_bwmon_update,
TP_PROTO(const char *name,
unsigned int meas_kbps, unsigned int up_kbps, unsigned int down_kbps),

TP_ARGS(name, meas_kbps, up_kbps, down_kbps),

TP_STRUCT__entry(
__string(name, name)
__field(unsigned int, meas_kbps)
__field(unsigned int, up_kbps)
__field(unsigned int, down_kbps)
),

TP_fast_assign(
__assign_str(name);
__entry->meas_kbps = meas_kbps;
__entry->up_kbps = up_kbps;
__entry->down_kbps = down_kbps;
),

TP_printk("name=%s meas_kbps=%u up_kbps=%u down_kbps=%u",
__get_str(name),
__entry->meas_kbps,
__entry->up_kbps,
__entry->down_kbps)
);

#endif /* _TRACE_ICC_BWMON_H */

#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH ../../drivers/soc/qcom/

#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE trace_icc-bwmon

#include <trace/define_trace.h>

0 comments on commit dc8c4a8

Please sign in to comment.