[Freedreno] [DPU PATCH 13/19] drm/msm: dpu: Remove dpu evtlog

Sean Paul seanpaul at chromium.org
Wed Jun 20 20:48:35 UTC 2018


Now that everything has been converted to tracepoints, remove the dpu
evtlog.

Signed-off-by: Sean Paul <seanpaul at chromium.org>
---
 drivers/gpu/drm/msm/Makefile              |   1 -
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c   |   5 -
 drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h |  33 ---
 drivers/gpu/drm/msm/dpu_dbg.c             | 147 +----------
 drivers/gpu/drm/msm/dpu_dbg.h             | 224 +---------------
 drivers/gpu/drm/msm/dpu_dbg_evtlog.c      | 306 ----------------------
 6 files changed, 11 insertions(+), 705 deletions(-)
 delete mode 100644 drivers/gpu/drm/msm/dpu_dbg_evtlog.c

diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
index dc56904367d8..9c182a9dab2b 100644
--- a/drivers/gpu/drm/msm/Makefile
+++ b/drivers/gpu/drm/msm/Makefile
@@ -75,7 +75,6 @@ msm-y := \
 	disp/dpu1/dpu_mdss.o \
 	disp/dpu1/dpu_power_handle.o \
 	dpu_dbg.o \
-	dpu_dbg_evtlog.o \
 	msm_prop.o \
 	msm_atomic.o \
 	msm_debugfs.o \
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 6ae5bba21074..4fd5e1d7261e 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -43,11 +43,6 @@ static const char * const iommu_ports[] = {
 		"mdp_0",
 };
 
-/**
- * Controls size of event log buffer. Specified as a power of 2.
- */
-#define DPU_EVTLOG_SIZE	1024
-
 /*
  * To enable overall DRM driver logging
  * # echo 0x2 > /sys/module/drm/parameters/debug
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
index d6f117bdad24..41fd6a227d8b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
@@ -165,39 +165,6 @@ TRACE_EVENT(dpu_trace_counter,
 			__get_str(counter_name), __entry->value)
 )
 
-#define DPU_TRACE_EVTLOG_SIZE	15
-TRACE_EVENT(dpu_evtlog,
-	TP_PROTO(const char *tag, u32 tag_id, u32 cnt, u32 data[]),
-	TP_ARGS(tag, tag_id, cnt, data),
-	TP_STRUCT__entry(
-			__field(int, pid)
-			__string(evtlog_tag, tag)
-			__field(u32, tag_id)
-			__array(u32, data, DPU_TRACE_EVTLOG_SIZE)
-	),
-	TP_fast_assign(
-			__entry->pid = current->tgid;
-			__assign_str(evtlog_tag, tag);
-			__entry->tag_id = tag_id;
-			if (cnt > DPU_TRACE_EVTLOG_SIZE)
-				cnt = DPU_TRACE_EVTLOG_SIZE;
-			memcpy(__entry->data, data, cnt * sizeof(u32));
-			memset(&__entry->data[cnt], 0,
-				(DPU_TRACE_EVTLOG_SIZE - cnt) * sizeof(u32));
-	),
-	TP_printk("%d|%s:%d|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x",
-			__entry->pid, __get_str(evtlog_tag),
-			__entry->tag_id,
-			__entry->data[0], __entry->data[1],
-			__entry->data[2], __entry->data[3],
-			__entry->data[4], __entry->data[5],
-			__entry->data[6], __entry->data[7],
-			__entry->data[8], __entry->data[9],
-			__entry->data[10], __entry->data[11],
-			__entry->data[12], __entry->data[13],
-			__entry->data[14])
-)
-
 TRACE_EVENT(dpu_perf_crtc_update,
 	TP_PROTO(u32 crtc, u64 bw_ctl_mnoc, u64 bw_ctl_llcc,
 			u64 bw_ctl_ebi, u32 core_clk_rate,
diff --git a/drivers/gpu/drm/msm/dpu_dbg.c b/drivers/gpu/drm/msm/dpu_dbg.c
index 27538bc6c290..9495a0f17f1b 100644
--- a/drivers/gpu/drm/msm/dpu_dbg.c
+++ b/drivers/gpu/drm/msm/dpu_dbg.c
@@ -165,7 +165,6 @@ struct dpu_dbg_vbif_debug_bus {
 
 /**
  * struct dpu_dbg_base - global dpu debug base structure
- * @evtlog: event log instance
  * @reg_base_list: list of register dumping regions
  * @dev: device pointer
  * @req_dump_blks: list of blocks requested for dumping
@@ -179,7 +178,6 @@ struct dpu_dbg_vbif_debug_bus {
  * @dsi_dbg_bus: dump dsi debug bus register
  */
 static struct dpu_dbg_base {
-	struct dpu_dbg_evtlog *evtlog;
 	struct list_head reg_base_list;
 	struct device *dev;
 
@@ -196,9 +194,6 @@ static struct dpu_dbg_base {
 	bool dsi_dbg_bus;
 } dpu_dbg_base;
 
-/* dpu_dbg_base_evtlog - global pointer to main dpu event log for macro use */
-struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
-
 static void _dpu_debug_bus_xbar_dump(void __iomem *mem_base,
 		struct dpu_debug_bus_entry *entry, u32 val)
 {
@@ -2526,8 +2521,6 @@ static void _dpu_dump_array(struct dpu_dbg_reg_base *blk_arr[],
 {
 	int i;
 
-	dpu_evtlog_dump_all(dpu_dbg_base.evtlog);
-
 	if (dump_all || !blk_arr || !len) {
 		_dpu_dump_reg_all();
 	} else {
@@ -2556,7 +2549,7 @@ static void _dpu_dump_work(struct work_struct *work)
 {
 	_dpu_dump_array(dpu_dbg_base.req_dump_blks,
 		ARRAY_SIZE(dpu_dbg_base.req_dump_blks),
-		dpu_dbg_base.work_panic, "evtlog_workitem",
+		dpu_dbg_base.work_panic, "dpudump_workitem",
 		dpu_dbg_base.dbgbus_dpu.cmn.include_in_deferred_work,
 		dpu_dbg_base.dbgbus_vbif_rt.cmn.include_in_deferred_work,
 		dpu_dbg_base.dump_all);
@@ -2564,7 +2557,7 @@ static void _dpu_dump_work(struct work_struct *work)
 
 void dpu_dbg_dump(bool queue_work, const char *name, ...)
 {
-	int i, index = 0;
+	int index = 0;
 	bool do_panic = false;
 	bool dump_dbgbus_dpu = false;
 	bool dump_dbgbus_vbif_rt = false;
@@ -2575,9 +2568,6 @@ void dpu_dbg_dump(bool queue_work, const char *name, ...)
 	struct dpu_dbg_reg_base **blk_arr;
 	u32 blk_len;
 
-	if (!dpu_evtlog_is_enabled(dpu_dbg_base.evtlog, DPU_EVTLOG_ALWAYS))
-		return;
-
 	if (queue_work && work_pending(&dpu_dbg_base.dump_work))
 		return;
 
@@ -2589,12 +2579,7 @@ void dpu_dbg_dump(bool queue_work, const char *name, ...)
 	dpu_dbg_base.dump_all = false;
 
 	va_start(args, name);
-	i = 0;
 	while ((blk_name = va_arg(args, char*))) {
-		if (i++ >= DPU_EVTLOG_MAX_DATA) {
-			pr_err("could not parse all dump arguments\n");
-			break;
-		}
 		if (IS_ERR_OR_NULL(blk_name))
 			break;
 
@@ -2641,7 +2626,7 @@ void dpu_dbg_dump(bool queue_work, const char *name, ...)
 }
 
 /*
- * dpu_dbg_debugfs_open - debugfs open handler for evtlog dump
+ * dpu_dbg_debugfs_open - debugfs open handler for debug dump
  * @inode: debugfs inode
  * @file: file handle
  */
@@ -2654,35 +2639,13 @@ static int dpu_dbg_debugfs_open(struct inode *inode, struct file *file)
 }
 
 /**
- * dpu_evtlog_dump_read - debugfs read handler for evtlog dump
- * @file: file handler
- * @buff: user buffer content for debugfs
- * @count: size of user buffer
- * @ppos: position offset of user buffer
- */
-static ssize_t dpu_evtlog_dump_read(struct file *file, char __user *buff,
-		size_t count, loff_t *ppos)
-{
-	ssize_t len = 0;
-	char evtlog_buf[DPU_EVTLOG_BUF_MAX];
-
-	len = dpu_evtlog_dump_to_buffer(dpu_dbg_base.evtlog, evtlog_buf,
-			DPU_EVTLOG_BUF_MAX);
-	if (copy_to_user(buff, evtlog_buf, len))
-		return -EFAULT;
-	*ppos += len;
-
-	return len;
-}
-
-/**
- * dpu_evtlog_dump_write - debugfs write handler for evtlog dump
+ * dpu_dbg_dump_write - debugfs write handler for debug dump
  * @file: file handler
  * @user_buf: user buffer content from debugfs
  * @count: size of user buffer
  * @ppos: position offset of user buffer
  */
-static ssize_t dpu_evtlog_dump_write(struct file *file,
+static ssize_t dpu_dbg_dump_write(struct file *file,
 	const char __user *user_buf, size_t count, loff_t *ppos)
 {
 	_dpu_dump_array(NULL, 0, dpu_dbg_base.panic_on_err, "dump_debugfs",
@@ -2691,86 +2654,9 @@ static ssize_t dpu_evtlog_dump_write(struct file *file,
 	return count;
 }
 
-static const struct file_operations dpu_evtlog_fops = {
+static const struct file_operations dpu_dbg_dump_fops = {
 	.open = dpu_dbg_debugfs_open,
-	.read = dpu_evtlog_dump_read,
-	.write = dpu_evtlog_dump_write,
-};
-
-/*
- * dpu_evtlog_filter_show - read callback for evtlog filter
- * @s: pointer to seq_file object
- * @data: pointer to private data
- */
-static int dpu_evtlog_filter_show(struct seq_file *s, void *data)
-{
-	struct dpu_dbg_evtlog *evtlog;
-	char buffer[64];
-	int i;
-
-	if (!s || !s->private)
-		return -EINVAL;
-
-	evtlog = s->private;
-
-	for (i = 0; !dpu_evtlog_get_filter(
-				evtlog, i, buffer, ARRAY_SIZE(buffer)); ++i)
-		seq_printf(s, "*%s*\n", buffer);
-	return 0;
-}
-
-/*
- * dpu_evtlog_filter_open - debugfs open handler for evtlog filter
- * @inode: debugfs inode
- * @file: file handle
- * Returns: zero on success
- */
-static int dpu_evtlog_filter_open(struct inode *inode, struct file *file)
-{
-	if (!file)
-		return -EINVAL;
-
-	return single_open(file, dpu_evtlog_filter_show, inode->i_private);
-}
-
-/*
- * dpu_evtlog_filter_write - write callback for evtlog filter
- * @file: pointer to file structure
- * @user_buf: pointer to incoming user data
- * @count: size of incoming user buffer
- * @ppos: pointer to file offset
- */
-static ssize_t dpu_evtlog_filter_write(struct file *file,
-	const char __user *user_buf, size_t count, loff_t *ppos)
-{
-	char *tmp_filter = NULL;
-	ssize_t rc = 0;
-
-	if (count > 0) {
-		/* copy user provided string and null terminate it */
-		tmp_filter = kzalloc(count + 1, GFP_KERNEL);
-		if (!tmp_filter)
-			rc = -ENOMEM;
-		else if (copy_from_user(tmp_filter, user_buf, count))
-			rc = -EFAULT;
-	}
-
-	/* update actual filter configuration on success */
-	if (!rc) {
-		dpu_evtlog_set_filter(dpu_dbg_base.evtlog, tmp_filter);
-		rc = count;
-	}
-	kfree(tmp_filter);
-
-	return rc;
-}
-
-static const struct file_operations dpu_evtlog_filter_fops = {
-	.open =		dpu_evtlog_filter_open,
-	.write =	dpu_evtlog_filter_write,
-	.read =		seq_read,
-	.llseek =	seq_lseek,
-	.release =	seq_release
+	.write = dpu_dbg_dump_write,
 };
 
 /**
@@ -3018,12 +2904,7 @@ int dpu_dbg_debugfs_register(struct dentry *debugfs_root)
 		return -EINVAL;
 
 	debugfs_create_file("dump", 0600, debugfs_root, NULL,
-			&dpu_evtlog_fops);
-	debugfs_create_u32("enable", 0600, debugfs_root,
-			&(dpu_dbg_base.evtlog->enable));
-	debugfs_create_file("filter", 0600, debugfs_root,
-			dpu_dbg_base.evtlog,
-			&dpu_evtlog_filter_fops);
+			&dpu_dbg_dump_fops);
 	debugfs_create_u32("panic", 0600, debugfs_root,
 			&dpu_dbg_base.panic_on_err);
 	debugfs_create_u32("reg_dump", 0600, debugfs_root,
@@ -3106,19 +2987,12 @@ int dpu_dbg_init(struct device *dev)
 	INIT_LIST_HEAD(&dpu_dbg_base.reg_base_list);
 	dpu_dbg_base.dev = dev;
 
-	dpu_dbg_base.evtlog = dpu_evtlog_init();
-	if (IS_ERR_OR_NULL(dpu_dbg_base.evtlog))
-		return PTR_ERR(dpu_dbg_base.evtlog);
-
-	dpu_dbg_base_evtlog = dpu_dbg_base.evtlog;
-
 	INIT_WORK(&dpu_dbg_base.dump_work, _dpu_dump_work);
 	dpu_dbg_base.work_panic = false;
 	dpu_dbg_base.panic_on_err = DEFAULT_PANIC;
 	dpu_dbg_base.enable_reg_dump = DEFAULT_REGDUMP;
 
-	pr_info("evtlog_status: enable:%d, panic:%d, dump:%d\n",
-		dpu_dbg_base.evtlog->enable, dpu_dbg_base.panic_on_err,
+	pr_info("debug_status: panic:%d, dump:%d\n", dpu_dbg_base.panic_on_err,
 		dpu_dbg_base.enable_reg_dump);
 
 	return 0;
@@ -3150,9 +3024,6 @@ static void dpu_dbg_reg_base_destroy(void)
 void dpu_dbg_destroy(void)
 {
 	_dpu_dbg_debugfs_destroy();
-	dpu_dbg_base_evtlog = NULL;
-	dpu_evtlog_destroy(dpu_dbg_base.evtlog);
-	dpu_dbg_base.evtlog = NULL;
 	dpu_dbg_reg_base_destroy();
 }
 
diff --git a/drivers/gpu/drm/msm/dpu_dbg.h b/drivers/gpu/drm/msm/dpu_dbg.h
index 283dbbc00690..052c78d5b4f5 100644
--- a/drivers/gpu/drm/msm/dpu_dbg.h
+++ b/drivers/gpu/drm/msm/dpu_dbg.h
@@ -17,109 +17,11 @@
 #include <linux/debugfs.h>
 #include <linux/list.h>
 
-#define DPU_EVTLOG_DATA_LIMITER	(-1)
-#define DPU_EVTLOG_FUNC_ENTRY	0x1111
-#define DPU_EVTLOG_FUNC_EXIT	0x2222
-#define DPU_EVTLOG_FUNC_CASE1	0x3333
-#define DPU_EVTLOG_FUNC_CASE2	0x4444
-#define DPU_EVTLOG_FUNC_CASE3	0x5555
-#define DPU_EVTLOG_FUNC_CASE4	0x6666
-#define DPU_EVTLOG_FUNC_CASE5	0x7777
-#define DPU_EVTLOG_FUNC_CASE6	0x8888
-#define DPU_EVTLOG_FUNC_CASE7	0x9999
-#define DPU_EVTLOG_FUNC_CASE8	0xaaaa
-#define DPU_EVTLOG_FUNC_CASE9	0xbbbb
-#define DPU_EVTLOG_FUNC_CASE10	0xcccc
-#define DPU_EVTLOG_PANIC	0xdead
-#define DPU_EVTLOG_FATAL	0xbad
-#define DPU_EVTLOG_ERROR	0xebad
-
-#define DPU_DBG_DUMP_DATA_LIMITER (NULL)
-
-enum dpu_dbg_evtlog_flag {
-	DPU_EVTLOG_CRITICAL = BIT(0),
-	DPU_EVTLOG_IRQ = BIT(1),
-	DPU_EVTLOG_VERBOSE = BIT(2),
-	DPU_EVTLOG_ALWAYS = -1
-};
-
 enum dpu_dbg_dump_flag {
 	DPU_DBG_DUMP_IN_LOG = BIT(0),
 	DPU_DBG_DUMP_IN_MEM = BIT(1),
 };
 
-#ifdef CONFIG_DRM_DPU_EVTLOG_DEBUG
-#define DPU_EVTLOG_DEFAULT_ENABLE (DPU_EVTLOG_CRITICAL | DPU_EVTLOG_IRQ)
-#else
-#define DPU_EVTLOG_DEFAULT_ENABLE 0
-#endif
-
-/*
- * evtlog will print this number of entries when it is called through
- * sysfs node or panic. This prevents kernel log from evtlog message
- * flood.
- */
-#define DPU_EVTLOG_PRINT_ENTRY	256
-
-/*
- * evtlog keeps this number of entries in memory for debug purpose. This
- * number must be greater than print entry to prevent out of bound evtlog
- * entry array access.
- */
-#define DPU_EVTLOG_ENTRY	(DPU_EVTLOG_PRINT_ENTRY * 4)
-#define DPU_EVTLOG_MAX_DATA 15
-#define DPU_EVTLOG_BUF_MAX 512
-#define DPU_EVTLOG_BUF_ALIGN 32
-
-struct dpu_dbg_evtlog_log {
-	s64 time;
-	const char *name;
-	int line;
-	u32 data[DPU_EVTLOG_MAX_DATA];
-	u32 data_cnt;
-	int pid;
-};
-
-/**
- * @filter_list: Linked list of currently active filter strings
- */
-struct dpu_dbg_evtlog {
-	struct dpu_dbg_evtlog_log logs[DPU_EVTLOG_ENTRY];
-	u32 first;
-	u32 last;
-	u32 curr;
-	u32 next;
-	u32 enable;
-	spinlock_t spin_lock;
-	struct list_head filter_list;
-};
-
-extern struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
-
-/**
- * DPU_EVT32 - Write a list of 32bit values to the event log, default area
- * ... - variable arguments
- */
-#define DPU_EVT32(...) dpu_evtlog_log(dpu_dbg_base_evtlog, __func__, \
-		__LINE__, DPU_EVTLOG_ALWAYS, ##__VA_ARGS__, \
-		DPU_EVTLOG_DATA_LIMITER)
-
-/**
- * DPU_EVT32_VERBOSE - Write a list of 32bit values for verbose event logging
- * ... - variable arguments
- */
-#define DPU_EVT32_VERBOSE(...) dpu_evtlog_log(dpu_dbg_base_evtlog, __func__, \
-		__LINE__, DPU_EVTLOG_VERBOSE, ##__VA_ARGS__, \
-		DPU_EVTLOG_DATA_LIMITER)
-
-/**
- * DPU_EVT32_IRQ - Write a list of 32bit values to the event log, IRQ area
- * ... - variable arguments
- */
-#define DPU_EVT32_IRQ(...) dpu_evtlog_log(dpu_dbg_base_evtlog, __func__, \
-		__LINE__, DPU_EVTLOG_IRQ, ##__VA_ARGS__, \
-		DPU_EVTLOG_DATA_LIMITER)
-
 /**
  * DPU_DBG_DUMP - trigger dumping of all dpu_dbg facilities
  * @va_args:	list of named register dump ranges and regions to dump, as
@@ -128,74 +30,10 @@ extern struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
  *		Including the special name "panic" will trigger a panic after
  *		the dumping work has completed.
  */
-#define DPU_DBG_DUMP(...) dpu_dbg_dump(false, __func__, ##__VA_ARGS__, \
-		DPU_DBG_DUMP_DATA_LIMITER)
-
-/**
- * DPU_DBG_DUMP_WQ - trigger dumping of all dpu_dbg facilities, queuing the work
- * @va_args:	list of named register dump ranges and regions to dump, as
- *		registered previously through dpu_dbg_reg_register_base and
- *		dpu_dbg_reg_register_dump_range.
- *		Including the special name "panic" will trigger a panic after
- *		the dumping work has completed.
- */
-#define DPU_DBG_DUMP_WQ(...) dpu_dbg_dump(true, __func__, ##__VA_ARGS__, \
-		DPU_DBG_DUMP_DATA_LIMITER)
+#define DPU_DBG_DUMP(...) dpu_dbg_dump(false, __func__, ##__VA_ARGS__, NULL)
 
 #if defined(CONFIG_DEBUG_FS)
 
-/**
- * dpu_evtlog_init - allocate a new event log object
- * Returns:	evtlog or -ERROR
- */
-struct dpu_dbg_evtlog *dpu_evtlog_init(void);
-
-/**
- * dpu_evtlog_destroy - destroy previously allocated event log
- * @evtlog:	pointer to evtlog
- * Returns:	none
- */
-void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog);
-
-/**
- * dpu_evtlog_log - log an entry into the event log.
- *	log collection may be enabled/disabled entirely via debugfs
- *	log area collection may be filtered by user provided flags via debugfs.
- * @evtlog:	pointer to evtlog
- * @name:	function name of call site
- * @line:	line number of call site
- * @flag:	log area filter flag checked against user's debugfs request
- * Returns:	none
- */
-void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog, const char *name, int line,
-		int flag, ...);
-
-/**
- * dpu_evtlog_dump_all - print all entries in event log to kernel log
- * @evtlog:	pointer to evtlog
- * Returns:	none
- */
-void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog);
-
-/**
- * dpu_evtlog_is_enabled - check whether log collection is enabled for given
- *	event log and log area flag
- * @evtlog:	pointer to evtlog
- * @flag:	log area filter flag
- * Returns:	none
- */
-bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog *evtlog, u32 flag);
-
-/**
- * dpu_evtlog_dump_to_buffer - print content of event log to the given buffer
- * @evtlog:		pointer to evtlog
- * @evtlog_buf:		target buffer to print into
- * @evtlog_buf_size:	size of target buffer
- * Returns:		number of bytes written to buffer
- */
-ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
-		char *evtlog_buf, ssize_t evtlog_buf_size);
-
 /**
  * dpu_dbg_init_dbg_buses - initialize debug bus dumping support for the chipset
  * @hwversion:		Chipset revision
@@ -203,7 +41,7 @@ ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
 void dpu_dbg_init_dbg_buses(u32 hwversion);
 
 /**
- * dpu_dbg_init - initialize global dpu debug facilities: evtlog, regdump
+ * dpu_dbg_init - initialize global dpu debug facilities: regdump
  * @dev:		device handle
  * Returns:		0 or -ERROR
  */
@@ -289,24 +127,6 @@ void dpu_dbg_reg_register_dump_range(const char *base_name,
  */
 void dpu_dbg_set_dpu_top_offset(u32 blk_off);
 
-/**
- * dpu_evtlog_set_filter - update evtlog filtering
- * @evtlog:	pointer to evtlog
- * @filter:     pointer to optional function name filter, set to NULL to disable
- */
-void dpu_evtlog_set_filter(struct dpu_dbg_evtlog *evtlog, char *filter);
-
-/**
- * dpu_evtlog_get_filter - query configured evtlog filters
- * @evtlog:	pointer to evtlog
- * @index:	filter index to retrieve
- * @buf:	pointer to output filter buffer
- * @bufsz:	size of output filter buffer
- * Returns:	zero if a filter string was returned
- */
-int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog, int index,
-		char *buf, size_t bufsz);
-
 /**
  * dsi_ctrl_debug_dump - dump dsi debug dump status
  */
@@ -317,35 +137,6 @@ static inline void dsi_ctrl_debug_dump(void) {}
 #endif
 
 #else
-static inline struct dpu_dbg_evtlog *dpu_evtlog_init(void)
-{
-	return NULL;
-}
-
-static inline void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog)
-{
-}
-
-static inline void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog,
-		const char *name, int line, int flag, ...)
-{
-}
-
-static inline void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog)
-{
-}
-
-static inline bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog *evtlog,
-		u32 flag)
-{
-	return false;
-}
-
-static inline ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
-		char *evtlog_buf, ssize_t evtlog_buf_size)
-{
-	return 0;
-}
 
 static inline void dpu_dbg_init_dbg_buses(u32 hwversion)
 {
@@ -385,17 +176,6 @@ void dpu_dbg_set_dpu_top_offset(u32 blk_off)
 {
 }
 
-static inline void dpu_evtlog_set_filter(
-		struct dpu_dbg_evtlog *evtlog, char *filter)
-{
-}
-
-static inline int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog,
-		int index, char *buf, size_t bufsz)
-{
-	return -EINVAL;
-}
-
 static inline void dsi_ctrl_debug_dump(void)
 {
 }
diff --git a/drivers/gpu/drm/msm/dpu_dbg_evtlog.c b/drivers/gpu/drm/msm/dpu_dbg_evtlog.c
deleted file mode 100644
index ef132c015a7e..000000000000
--- a/drivers/gpu/drm/msm/dpu_dbg_evtlog.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#define pr_fmt(fmt)	"dpu_dbg:[%s] " fmt, __func__
-
-#include <linux/delay.h>
-#include <linux/spinlock.h>
-#include <linux/ktime.h>
-#include <linux/debugfs.h>
-#include <linux/uaccess.h>
-#include <linux/dma-buf.h>
-#include <linux/slab.h>
-
-#include "dpu_dbg.h"
-#include "dpu_trace.h"
-
-#define DPU_EVTLOG_FILTER_STRSIZE	64
-
-struct dpu_evtlog_filter {
-	struct list_head list;
-	char filter[DPU_EVTLOG_FILTER_STRSIZE];
-};
-
-static bool _dpu_evtlog_is_filtered_no_lock(
-		struct dpu_dbg_evtlog *evtlog, const char *str)
-{
-	struct dpu_evtlog_filter *filter_node;
-	bool rc;
-
-	if (!str)
-		return true;
-
-	/*
-	 * Filter the incoming string IFF the list is not empty AND
-	 * a matching entry is not in the list.
-	 */
-	rc = !list_empty(&evtlog->filter_list);
-	list_for_each_entry(filter_node, &evtlog->filter_list, list)
-		if (strnstr(str, filter_node->filter,
-					DPU_EVTLOG_FILTER_STRSIZE - 1)) {
-			rc = false;
-			break;
-		}
-
-	return rc;
-}
-
-bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog *evtlog, u32 flag)
-{
-	return evtlog && (evtlog->enable & flag);
-}
-
-void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog, const char *name, int line,
-		int flag, ...)
-{
-	unsigned long flags;
-	int i, val = 0;
-	va_list args;
-	struct dpu_dbg_evtlog_log *log;
-
-	if (!evtlog)
-		return;
-
-	if (!dpu_evtlog_is_enabled(evtlog, flag))
-		return;
-
-	spin_lock_irqsave(&evtlog->spin_lock, flags);
-
-	if (_dpu_evtlog_is_filtered_no_lock(evtlog, name))
-		goto exit;
-
-	log = &evtlog->logs[evtlog->curr];
-	log->time = ktime_to_us(ktime_get());
-	log->name = name;
-	log->line = line;
-	log->data_cnt = 0;
-	log->pid = current->pid;
-
-	va_start(args, flag);
-	for (i = 0; i < DPU_EVTLOG_MAX_DATA; i++) {
-
-		val = va_arg(args, int);
-		if (val == DPU_EVTLOG_DATA_LIMITER)
-			break;
-
-		log->data[i] = val;
-	}
-	va_end(args);
-	log->data_cnt = i;
-	evtlog->curr = (evtlog->curr + 1) % DPU_EVTLOG_ENTRY;
-	evtlog->last++;
-
-	trace_dpu_evtlog(name, line, log->data_cnt, log->data);
-exit:
-	spin_unlock_irqrestore(&evtlog->spin_lock, flags);
-}
-
-/* always dump the last entries which are not dumped yet */
-static bool _dpu_evtlog_dump_calc_range(struct dpu_dbg_evtlog *evtlog)
-{
-	if (!evtlog)
-		return false;
-
-	evtlog->first = evtlog->next;
-
-	if (evtlog->last == evtlog->first)
-		return false;
-
-	if (evtlog->last < evtlog->first) {
-		evtlog->first %= DPU_EVTLOG_ENTRY;
-		if (evtlog->last < evtlog->first)
-			evtlog->last += DPU_EVTLOG_ENTRY;
-	}
-
-	if ((evtlog->last - evtlog->first) > DPU_EVTLOG_PRINT_ENTRY) {
-		pr_info("evtlog skipping %d entries, last=%d\n",
-			evtlog->last - evtlog->first - DPU_EVTLOG_PRINT_ENTRY,
-			evtlog->last - 1);
-		evtlog->first = evtlog->last - DPU_EVTLOG_PRINT_ENTRY;
-	}
-	evtlog->next = evtlog->first + 1;
-
-	return true;
-}
-
-ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
-		char *evtlog_buf, ssize_t evtlog_buf_size)
-{
-	int i;
-	ssize_t off = 0;
-	struct dpu_dbg_evtlog_log *log, *prev_log;
-	unsigned long flags;
-
-	if (!evtlog || !evtlog_buf)
-		return 0;
-
-	spin_lock_irqsave(&evtlog->spin_lock, flags);
-
-	/* update markers, exit if nothing to print */
-	if (!_dpu_evtlog_dump_calc_range(evtlog))
-		goto exit;
-
-	log = &evtlog->logs[evtlog->first % DPU_EVTLOG_ENTRY];
-
-	prev_log = &evtlog->logs[(evtlog->first - 1) % DPU_EVTLOG_ENTRY];
-
-	off = snprintf((evtlog_buf + off), (evtlog_buf_size - off), "%s:%-4d",
-		log->name, log->line);
-
-	if (off < DPU_EVTLOG_BUF_ALIGN) {
-		memset((evtlog_buf + off), 0x20, (DPU_EVTLOG_BUF_ALIGN - off));
-		off = DPU_EVTLOG_BUF_ALIGN;
-	}
-
-	off += snprintf((evtlog_buf + off), (evtlog_buf_size - off),
-		"=>[%-8d:%-11llu:%9llu][%-4d]:", evtlog->first,
-		log->time, (log->time - prev_log->time), log->pid);
-
-	for (i = 0; i < log->data_cnt; i++)
-		off += snprintf((evtlog_buf + off), (evtlog_buf_size - off),
-			"%x ", log->data[i]);
-
-	off += snprintf((evtlog_buf + off), (evtlog_buf_size - off), "\n");
-exit:
-	spin_unlock_irqrestore(&evtlog->spin_lock, flags);
-
-	return off;
-}
-
-void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog)
-{
-	char buf[DPU_EVTLOG_BUF_MAX];
-
-	if (!evtlog)
-		return;
-
-	while (dpu_evtlog_dump_to_buffer(evtlog, buf, sizeof(buf)))
-		pr_info("%s", buf);
-}
-
-struct dpu_dbg_evtlog *dpu_evtlog_init(void)
-{
-	struct dpu_dbg_evtlog *evtlog;
-
-	evtlog = kzalloc(sizeof(*evtlog), GFP_KERNEL);
-	if (!evtlog)
-		return ERR_PTR(-ENOMEM);
-
-	spin_lock_init(&evtlog->spin_lock);
-	evtlog->enable = DPU_EVTLOG_DEFAULT_ENABLE;
-
-	INIT_LIST_HEAD(&evtlog->filter_list);
-
-	return evtlog;
-}
-
-int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog, int index,
-		char *buf, size_t bufsz)
-{
-	struct dpu_evtlog_filter *filter_node;
-	unsigned long flags;
-	int rc = -EFAULT;
-
-	if (!evtlog || !buf || !bufsz || index < 0)
-		return -EINVAL;
-
-	spin_lock_irqsave(&evtlog->spin_lock, flags);
-	list_for_each_entry(filter_node, &evtlog->filter_list, list) {
-		if (index--)
-			continue;
-
-		/* don't care about return value */
-		(void)strlcpy(buf, filter_node->filter, bufsz);
-		rc = 0;
-		break;
-	}
-	spin_unlock_irqrestore(&evtlog->spin_lock, flags);
-
-	return rc;
-}
-
-void dpu_evtlog_set_filter(struct dpu_dbg_evtlog *evtlog, char *filter)
-{
-	struct dpu_evtlog_filter *filter_node, *tmp;
-	struct list_head free_list;
-	unsigned long flags;
-	char *flt;
-
-	if (!evtlog)
-		return;
-
-	INIT_LIST_HEAD(&free_list);
-
-	/*
-	 * Clear active filter list and cache filter_nodes locally
-	 * to reduce memory fragmentation.
-	 */
-	spin_lock_irqsave(&evtlog->spin_lock, flags);
-	list_for_each_entry_safe(filter_node, tmp, &evtlog->filter_list, list) {
-		list_del_init(&filter_node->list);
-		list_add_tail(&filter_node->list, &free_list);
-	}
-	spin_unlock_irqrestore(&evtlog->spin_lock, flags);
-
-	/*
-	 * Parse incoming filter request string and build up a new
-	 * filter list. New filter nodes are taken from the local
-	 * free list, if available, and allocated from the system
-	 * heap once the free list is empty.
-	 */
-	while (filter && (flt = strsep(&filter, "|\r\n\t ")) != NULL) {
-		if (!*flt)
-			continue;
-
-		if (list_empty(&free_list)) {
-			filter_node = kzalloc(sizeof(*filter_node), GFP_KERNEL);
-			if (!filter_node)
-				break;
-
-			INIT_LIST_HEAD(&filter_node->list);
-		} else {
-			filter_node = list_first_entry(&free_list,
-					struct dpu_evtlog_filter, list);
-			list_del_init(&filter_node->list);
-		}
-
-		/* don't care if copy truncated */
-		(void)strlcpy(filter_node->filter, flt,
-				DPU_EVTLOG_FILTER_STRSIZE);
-
-		spin_lock_irqsave(&evtlog->spin_lock, flags);
-		list_add_tail(&filter_node->list, &evtlog->filter_list);
-		spin_unlock_irqrestore(&evtlog->spin_lock, flags);
-	}
-
-	/*
-	 * Free any unused filter_nodes back to the system.
-	 */
-	list_for_each_entry_safe(filter_node, tmp, &free_list, list) {
-		list_del(&filter_node->list);
-		kfree(filter_node);
-	}
-}
-
-void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog)
-{
-	struct dpu_evtlog_filter *filter_node, *tmp;
-
-	if (!evtlog)
-		return;
-
-	list_for_each_entry_safe(filter_node, tmp, &evtlog->filter_list, list) {
-		list_del(&filter_node->list);
-		kfree(filter_node);
-	}
-	kfree(evtlog);
-}
-- 
Sean Paul, Software Engineer, Google / Chromium OS



More information about the Freedreno mailing list