drm/rockchip: Add tracepoints

Enable:
  echo 1 > sys/kernel/tracing/tracing_on
  echo 1 > sys/kernel/tracing/events/rockchipdrm/enable
  echo 8192  > sys/kernel/tracing/buffer_size_kb
  cat /sys/kernel/tracing/trace

Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
Change-Id: Ib3936d6093cb6dcb3a19ee5f74867be1f4befa94
This commit is contained in:
Andy Yan
2024-09-12 16:53:21 +08:00
committed by Tao Huang
parent 50fa63ad68
commit 5366dcae7d
3 changed files with 76 additions and 6 deletions

View File

@@ -47,6 +47,9 @@
#include "../drm_crtc_internal.h"
#define CREATE_TRACE_POINTS
#include "rockchip_drm_trace.h"
#define DRIVER_NAME "rockchip"
#define DRIVER_DESC "RockChip Soc DRM"
#define DRIVER_DATE "20140818"
@@ -85,17 +88,23 @@ void rockchip_drm_dbg(const struct device *dev, enum rockchip_drm_debug_category
struct va_format vaf;
va_list args;
if (!rockchip_drm_debug_enabled(category))
return;
va_start(args, format);
vaf.fmt = format;
vaf.va = &args;
if (dev)
dev_printk(KERN_DEBUG, dev, "%pV", &vaf);
if (rockchip_drm_debug_enabled(category)) {
if (dev)
dev_printk(KERN_DEBUG, dev, "%pV", &vaf);
else
printk(KERN_DEBUG "%pV", &vaf);
}
if (category == VOP_DEBUG_VSYNC)
trace_rockchip_drm_dbg_vsync(&vaf);
else if (category == VOP_DEBUG_IOMMU_MAP)
trace_rockchip_drm_dbg_iommu(&vaf);
else
printk(KERN_DEBUG "%pV", &vaf);
trace_rockchip_drm_dbg_common(&vaf);
va_end(args);
}

View File

@@ -75,6 +75,7 @@ enum rockchip_drm_debug_category {
VOP_DEBUG_WB = BIT(2),
VOP_DEBUG_CFG_DONE = BIT(3),
VOP_DEBUG_CLK = BIT(4),
VOP_DEBUG_IOMMU_MAP = BIT(5),
VOP_DEBUG_VSYNC = BIT(7),
VOP_DEBUG_PIXEL_SHIFT = BIT(8),
};

View File

@@ -0,0 +1,60 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
*
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM rockchipdrm
#if !defined(_ROCKCHIP_DRM_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _ROCKCHIP_DRM_TRACE_H_
#include <linux/tracepoint.h>
#define ROCKCHIP_DRM_MAX_MSG_LEN 256
DECLARE_EVENT_CLASS(rockchipdrm_dbg,
TP_PROTO(struct va_format *vaf),
TP_ARGS(vaf),
TP_STRUCT__entry(
__dynamic_array(char, msg, ROCKCHIP_DRM_MAX_MSG_LEN)
),
TP_fast_assign(
WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
ROCKCHIP_DRM_MAX_MSG_LEN,
vaf->fmt,
*vaf->va) >= ROCKCHIP_DRM_MAX_MSG_LEN);
),
TP_printk("%s", __get_str(msg))
);
DEFINE_EVENT(rockchipdrm_dbg, rockchip_drm_dbg_common,
TP_PROTO(struct va_format *vaf),
TP_ARGS(vaf)
);
DEFINE_EVENT(rockchipdrm_dbg, rockchip_drm_dbg_iommu,
TP_PROTO(struct va_format *vaf),
TP_ARGS(vaf)
);
DEFINE_EVENT(rockchipdrm_dbg, rockchip_drm_dbg_vsync,
TP_PROTO(struct va_format *vaf),
TP_ARGS(vaf)
);
#endif /* _ROCKCHIP_DRM_TRACE_H_ || TRACE_HEADER_MULTI_READ */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/rockchip
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE rockchip_drm_trace
/* This part must be outside protection */
#include <trace/define_trace.h>