xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/rga3/include/rga_debugger.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) Rockchip Electronics Co., Ltd.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author:
6*4882a593Smuzhiyun  *	Cerf Yu <cerf.yu@rock-chips.com>
7*4882a593Smuzhiyun  *	Huang Lee <Putin.li@rock-chips.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef _RGA_DEBUGGER_H_
11*4882a593Smuzhiyun #define _RGA_DEBUGGER_H_
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include "rga_drv.h"
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_DEBUGGER
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun extern int RGA_DEBUG_REG;
18*4882a593Smuzhiyun extern int RGA_DEBUG_MSG;
19*4882a593Smuzhiyun extern int RGA_DEBUG_TIME;
20*4882a593Smuzhiyun extern int RGA_DEBUG_INT_FLAG;
21*4882a593Smuzhiyun extern int RGA_DEBUG_MM;
22*4882a593Smuzhiyun extern int RGA_DEBUG_CHECK_MODE;
23*4882a593Smuzhiyun extern int RGA_DEBUG_NONUSE;
24*4882a593Smuzhiyun extern int RGA_DEBUG_DUMP_IMAGE;
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define DEBUGGER_EN(name) (unlikely(RGA_DEBUG_##name ? true : false))
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /*
29*4882a593Smuzhiyun  * struct rga_debugger - RGA debugger information
30*4882a593Smuzhiyun  *
31*4882a593Smuzhiyun  * This structure represents a debugger to be created by the rga driver
32*4882a593Smuzhiyun  * or core.
33*4882a593Smuzhiyun  */
34*4882a593Smuzhiyun struct rga_debugger {
35*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_DEBUG_FS
36*4882a593Smuzhiyun 	/* Directory of debugfs file */
37*4882a593Smuzhiyun 	struct dentry *debugfs_dir;
38*4882a593Smuzhiyun 	struct list_head debugfs_entry_list;
39*4882a593Smuzhiyun 	struct mutex debugfs_lock;
40*4882a593Smuzhiyun #endif
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_PROC_FS
43*4882a593Smuzhiyun 	/* Directory of procfs file */
44*4882a593Smuzhiyun 	struct proc_dir_entry *procfs_dir;
45*4882a593Smuzhiyun 	struct list_head procfs_entry_list;
46*4882a593Smuzhiyun 	struct mutex procfs_lock;
47*4882a593Smuzhiyun #endif
48*4882a593Smuzhiyun };
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /*
51*4882a593Smuzhiyun  * struct rga_debugger_list - debugfs/procfs info list entry
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  * This structure represents a debugfs/procfs file to be created by the rga
54*4882a593Smuzhiyun  * driver or core.
55*4882a593Smuzhiyun  */
56*4882a593Smuzhiyun struct rga_debugger_list {
57*4882a593Smuzhiyun 	/* File name */
58*4882a593Smuzhiyun 	const char *name;
59*4882a593Smuzhiyun 	/*
60*4882a593Smuzhiyun 	 * Show callback. &seq_file->private will be set to the &struct
61*4882a593Smuzhiyun 	 * rga_debugger_node corresponding to the instance of this info
62*4882a593Smuzhiyun 	 * on a given &struct rga_debugger.
63*4882a593Smuzhiyun 	 */
64*4882a593Smuzhiyun 	int (*show)(struct seq_file *seq, void *data);
65*4882a593Smuzhiyun 	/*
66*4882a593Smuzhiyun 	 * Write callback. &seq_file->private will be set to the &struct
67*4882a593Smuzhiyun 	 * rga_debugger_node corresponding to the instance of this info
68*4882a593Smuzhiyun 	 * on a given &struct rga_debugger.
69*4882a593Smuzhiyun 	 */
70*4882a593Smuzhiyun 	ssize_t (*write)(struct file *file, const char __user *ubuf,
71*4882a593Smuzhiyun 		size_t len, loff_t *offp);
72*4882a593Smuzhiyun 	/* Procfs/Debugfs private data. */
73*4882a593Smuzhiyun 	void *data;
74*4882a593Smuzhiyun };
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /*
77*4882a593Smuzhiyun  * struct rga_debugger_node - Nodes for debugfs/procfs
78*4882a593Smuzhiyun  *
79*4882a593Smuzhiyun  * This structure represents each instance of procfs/debugfs created from the
80*4882a593Smuzhiyun  * template.
81*4882a593Smuzhiyun  */
82*4882a593Smuzhiyun struct rga_debugger_node {
83*4882a593Smuzhiyun 	struct rga_debugger *debugger;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	/* template for this node. */
86*4882a593Smuzhiyun 	const struct rga_debugger_list *info_ent;
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun 	/* Each Procfs/Debugfs file. */
89*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_DEBUG_FS
90*4882a593Smuzhiyun 	struct dentry *dent;
91*4882a593Smuzhiyun #endif
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_PROC_FS
94*4882a593Smuzhiyun 	struct proc_dir_entry *pent;
95*4882a593Smuzhiyun #endif
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun 	struct list_head list;
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_DEBUG_FS
101*4882a593Smuzhiyun int rga_debugfs_init(void);
102*4882a593Smuzhiyun int rga_debugfs_remove(void);
103*4882a593Smuzhiyun #else
rga_debugfs_remove(void)104*4882a593Smuzhiyun static inline int rga_debugfs_remove(void)
105*4882a593Smuzhiyun {
106*4882a593Smuzhiyun 	return 0;
107*4882a593Smuzhiyun }
rga_debugfs_init(void)108*4882a593Smuzhiyun static inline int rga_debugfs_init(void)
109*4882a593Smuzhiyun {
110*4882a593Smuzhiyun 	return 0;
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun #endif /* #ifdef CONFIG_ROCKCHIP_RGA_DEBUG_FS */
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun #ifdef CONFIG_ROCKCHIP_RGA_PROC_FS
115*4882a593Smuzhiyun int rga_procfs_remove(void);
116*4882a593Smuzhiyun int rga_procfs_init(void);
117*4882a593Smuzhiyun #else
rga_procfs_remove(void)118*4882a593Smuzhiyun static inline int rga_procfs_remove(void)
119*4882a593Smuzhiyun {
120*4882a593Smuzhiyun 	return 0;
121*4882a593Smuzhiyun }
rga_procfs_init(void)122*4882a593Smuzhiyun static inline int rga_procfs_init(void)
123*4882a593Smuzhiyun {
124*4882a593Smuzhiyun 	return 0;
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun #endif /* #ifdef CONFIG_ROCKCHIP_RGA_PROC_FS */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #else
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define DEBUGGER_EN(name) (unlikely(false))
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #endif /* #ifdef CONFIG_ROCKCHIP_RGA_DEBUGGER */
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun void rga_cmd_print_debug_info(struct rga_req *req);
135*4882a593Smuzhiyun void rga_request_task_debug_info(struct seq_file *m, struct rga_req *req);
136*4882a593Smuzhiyun #ifdef CONFIG_NO_GKI
137*4882a593Smuzhiyun void rga_dump_job_image(struct rga_job *dump_job);
138*4882a593Smuzhiyun #else
rga_dump_job_image(struct rga_job * dump_job)139*4882a593Smuzhiyun static inline void rga_dump_job_image(struct rga_job *dump_job)
140*4882a593Smuzhiyun {
141*4882a593Smuzhiyun }
142*4882a593Smuzhiyun #endif /* #ifdef CONFIG_NO_GKI */
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #endif /* #ifndef _RGA_DEBUGGER_H_ */
145*4882a593Smuzhiyun 
146