From 5366dcae7d9e47e494d971448dded5a964086aa0 Mon Sep 17 00:00:00 2001 From: Andy Yan Date: Thu, 12 Sep 2024 16:53:21 +0800 Subject: [PATCH] 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 Change-Id: Ib3936d6093cb6dcb3a19ee5f74867be1f4befa94 --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 21 +++++-- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + drivers/gpu/drm/rockchip/rockchip_drm_trace.h | 60 +++++++++++++++++++ 3 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_trace.h diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 19661accdc50..4296c2f58e53 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -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); } diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 14255b58058c..32abec20fb99 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -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), }; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_trace.h b/drivers/gpu/drm/rockchip/rockchip_drm_trace.h new file mode 100644 index 000000000000..5e625d48639b --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_trace.h @@ -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 + +#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