* [PATCH 1/6 RESEND] media: mediatek: vcodec: Add debugfs interface to get debug information
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
2023-03-20 10:28 ` [PATCH 2/6 RESEND] media: mediatek: vcodec: Add debug params to control different log level Yunfei Dong
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
This will be useful when debugging specific issues related to kernel
in running status.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../media/platform/mediatek/vcodec/Makefile | 6 ++++
.../mediatek/vcodec/mtk_vcodec_dbgfs.c | 32 +++++++++++++++++++
.../mediatek/vcodec/mtk_vcodec_dbgfs.h | 28 ++++++++++++++++
.../mediatek/vcodec/mtk_vcodec_dec_drv.c | 2 ++
.../platform/mediatek/vcodec/mtk_vcodec_drv.h | 4 +++
5 files changed, 72 insertions(+)
create mode 100644 drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
create mode 100644 drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
diff --git a/drivers/media/platform/mediatek/vcodec/Makefile b/drivers/media/platform/mediatek/vcodec/Makefile
index 93e7a343b5b0..f6b750cf7077 100644
--- a/drivers/media/platform/mediatek/vcodec/Makefile
+++ b/drivers/media/platform/mediatek/vcodec/Makefile
@@ -44,3 +44,9 @@ endif
ifneq ($(CONFIG_VIDEO_MEDIATEK_VCODEC_SCP),)
mtk-vcodec-common-y += mtk_vcodec_fw_scp.o
endif
+
+ifneq ($(CONFIG_DEBUG_FS),)
+obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dbgfs.o
+
+mtk-vcodec-dbgfs-y := mtk_vcodec_dbgfs.o
+endif
\ No newline at end of file
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
new file mode 100644
index 000000000000..adf3f9133b0c
--- /dev/null
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2023 MediaTek Inc.
+ * Author: Yunfei Dong <yunfei.dong@mediatek.com>
+ */
+
+#include <linux/debugfs.h>
+
+#include "mtk_vcodec_dbgfs.h"
+#include "mtk_vcodec_drv.h"
+#include "mtk_vcodec_util.h"
+
+void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
+{
+ struct dentry *vcodec_root;
+
+ vcodec_dev->dbgfs.vcodec_root = debugfs_create_dir("vcodec-dec", NULL);
+ if (IS_ERR(vcodec_dev->dbgfs.vcodec_root))
+ pr_info("create dir err:%d\n", IS_ERR(vcodec_dev->dbgfs.vcodec_root));
+
+ vcodec_root = vcodec_dev->dbgfs.vcodec_root;
+}
+EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_init);
+
+void mtk_vcodec_dbgfs_deinit(struct mtk_vcodec_dev *vcodec_dev)
+{
+ debugfs_remove_recursive(vcodec_dev->dbgfs.vcodec_root);
+}
+EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_deinit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Mediatek video codec driver");
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
new file mode 100644
index 000000000000..74f130f868c8
--- /dev/null
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2023 MediaTek Inc.
+ * Author: Yunfei Dong <yunfei.dong@mediatek.com>
+ */
+
+#ifndef __MTK_VCODEC_DBGFS_H__
+#define __MTK_VCODEC_DBGFS_H__
+
+struct mtk_vcodec_dev;
+
+struct mtk_vcodec_dbgfs {
+ struct dentry *vcodec_root;
+};
+
+#if defined(CONFIG_DEBUG_FS)
+void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev);
+void mtk_vcodec_dbgfs_deinit(struct mtk_vcodec_dev *vcodec_dev);
+#else
+static inline void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
+{
+}
+
+static inline void mtk_vcodec_dbgfs_deinit(struct mtk_vcodec_dev *vcodec_dev)
+{
+}
+#endif
+#endif
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
index 174a6eec2f54..de29b1fb0436 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
@@ -431,6 +431,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
mtk_v4l2_debug(0, "media registered as /dev/media%d", vfd_dec->minor);
}
+ mtk_vcodec_dbgfs_init(dev);
mtk_v4l2_debug(0, "decoder registered as /dev/video%d", vfd_dec->minor);
return 0;
@@ -505,6 +506,7 @@ static int mtk_vcodec_dec_remove(struct platform_device *pdev)
if (dev->vfd_dec)
video_unregister_device(dev->vfd_dec);
+ mtk_vcodec_dbgfs_deinit(dev);
v4l2_device_unregister(&dev->v4l2_dev);
if (!dev->vdec_pdata->is_subdev_supported)
pm_runtime_disable(dev->pm.dev);
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h
index 9acab54fd650..a7e8bb3608ac 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h
@@ -16,6 +16,7 @@
#include <media/v4l2-mem2mem.h>
#include <media/videobuf2-core.h>
+#include "mtk_vcodec_dbgfs.h"
#include "mtk_vcodec_util.h"
#include "vdec_msg_queue.h"
@@ -470,6 +471,7 @@ struct mtk_vcodec_enc_pdata {
* @dec_active_cnt: used to mark whether need to record register value
* @vdec_racing_info: record register value
* @dec_racing_info_mutex: mutex lock used for inner racing mode
+ * @dbgfs: debug log related information
*/
struct mtk_vcodec_dev {
struct v4l2_device v4l2_dev;
@@ -520,6 +522,8 @@ struct mtk_vcodec_dev {
u32 vdec_racing_info[132];
/* Protects access to vdec_racing_info data */
struct mutex dec_racing_info_mutex;
+
+ struct mtk_vcodec_dbgfs dbgfs;
};
static inline struct mtk_vcodec_ctx *fh_to_ctx(struct v4l2_fh *fh)
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/6 RESEND] media: mediatek: vcodec: Add debug params to control different log level
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
2023-03-20 10:28 ` [PATCH 1/6 RESEND] media: mediatek: vcodec: Add debugfs interface to get debug information Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
2023-03-20 10:28 ` [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information Yunfei Dong
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
Add parameter mtk_vcodec_dbg to open each codec log.
Add parameter mtk_v4l2_dbg_level to open each instance log according to
the parameter value.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../mediatek/vcodec/mtk_vcodec_dbgfs.c | 3 +++
.../mediatek/vcodec/mtk_vcodec_util.c | 8 ++++++
.../mediatek/vcodec/mtk_vcodec_util.h | 25 ++++++++++++++++---
3 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
index adf3f9133b0c..bef78c028a75 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
@@ -19,6 +19,9 @@ void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
pr_info("create dir err:%d\n", IS_ERR(vcodec_dev->dbgfs.vcodec_root));
vcodec_root = vcodec_dev->dbgfs.vcodec_root;
+
+ debugfs_create_x32("mtk_v4l2_dbg_level", 0644, vcodec_root, &mtk_v4l2_dbg_level);
+ debugfs_create_x32("mtk_vcodec_dbg", 0644, vcodec_root, &mtk_vcodec_dbg);
}
EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_init);
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.c
index ace78c4b5b9e..f214e6f67005 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.c
@@ -13,6 +13,14 @@
#include "mtk_vcodec_drv.h"
#include "mtk_vcodec_util.h"
+#if defined(CONFIG_DEBUG_FS)
+int mtk_vcodec_dbg;
+EXPORT_SYMBOL(mtk_vcodec_dbg);
+
+int mtk_v4l2_dbg_level;
+EXPORT_SYMBOL(mtk_v4l2_dbg_level);
+#endif
+
void __iomem *mtk_vcodec_get_reg_addr(struct mtk_vcodec_ctx *data,
unsigned int reg_idx)
{
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.h
index 71956627a0e2..938f03cab3c9 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.h
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_util.h
@@ -35,15 +35,34 @@ struct mtk_vcodec_dev;
pr_err("[MTK_VCODEC][ERROR][%d]: " fmt "\n", \
((struct mtk_vcodec_ctx *)(h)->ctx)->id, ##args)
+#if defined(CONFIG_DEBUG_FS)
+extern int mtk_v4l2_dbg_level;
+extern int mtk_vcodec_dbg;
-#define mtk_v4l2_debug(level, fmt, args...) pr_debug(fmt, ##args)
+#define mtk_v4l2_debug(level, fmt, args...) \
+ do { \
+ if (mtk_v4l2_dbg_level >= level) \
+ pr_info("[MTK_V4L2] level=%d %s(),%d: " fmt "\n", \
+ level, __func__, __LINE__, ##args); \
+ } while (0)
-#define mtk_v4l2_debug_enter() mtk_v4l2_debug(3, "+")
-#define mtk_v4l2_debug_leave() mtk_v4l2_debug(3, "-")
+#define mtk_vcodec_debug(h, fmt, args...) \
+ do { \
+ if (mtk_vcodec_dbg) \
+ pr_info("[MTK_VCODEC][%d]: %s() " fmt "\n", \
+ ((struct mtk_vcodec_ctx *)h->ctx)->id, \
+ __func__, ##args); \
+ } while (0)
+#else
+#define mtk_v4l2_debug(level, fmt, args...) pr_debug(fmt, ##args)
#define mtk_vcodec_debug(h, fmt, args...) \
pr_debug("[MTK_VCODEC][%d]: " fmt "\n", \
((struct mtk_vcodec_ctx *)(h)->ctx)->id, ##args)
+#endif
+
+#define mtk_v4l2_debug_enter() mtk_v4l2_debug(3, "+")
+#define mtk_v4l2_debug_leave() mtk_v4l2_debug(3, "-")
#define mtk_vcodec_debug_enter(h) mtk_vcodec_debug(h, "+")
#define mtk_vcodec_debug_leave(h) mtk_vcodec_debug(h, "-")
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
2023-03-20 10:28 ` [PATCH 1/6 RESEND] media: mediatek: vcodec: Add debugfs interface to get debug information Yunfei Dong
2023-03-20 10:28 ` [PATCH 2/6 RESEND] media: mediatek: vcodec: Add debug params to control different log level Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
2023-03-20 14:49 ` AngeloGioacchino Del Regno
2023-03-20 10:28 ` [PATCH 4/6 RESEND] media: mediatek: vcodec: Get get each instance format type Yunfei Dong
` (2 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
In oder to get each instance information according to test command, adding
one file node "vdec".
Can use echo command to set different string value as 'echo -picinfo > vdec'
to get real and aligned resolution.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../mediatek/vcodec/mtk_vcodec_dbgfs.c | 85 +++++++++++++++++++
.../mediatek/vcodec/mtk_vcodec_dbgfs.h | 20 +++++
.../mediatek/vcodec/mtk_vcodec_dec_drv.c | 2 +
3 files changed, 107 insertions(+)
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
index bef78c028a75..9e7d57d21cea 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
@@ -10,6 +10,86 @@
#include "mtk_vcodec_drv.h"
#include "mtk_vcodec_util.h"
+static ssize_t mtk_vdec_dbgfs_write(struct file *filp, const char __user *ubuf,
+ size_t count, loff_t *ppos)
+{
+ struct mtk_vcodec_dev *vcodec_dev = filp->private_data;
+ char buf[32] = { 0 };
+ int len, str_count = 0;
+ struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
+ struct mtk_vcodec_ctx *ctx;
+
+ len = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, ubuf, count);
+ if (len <= 0)
+ return len;
+
+ list_for_each_entry(dbgfs_inst, &vcodec_dev->dbgfs.dbgfs_head, node) {
+ pr_info("dbgfs_inst id: %d\n", dbgfs_inst->inst_id);
+ ctx = dbgfs_inst->vcodec_ctx;
+
+ if (strstr(buf, "-picinfo")) {
+ str_count++;
+ pr_info("resolution: real(%dx%d)=>align(%dx%d)\n",
+ ctx->picinfo.pic_w, ctx->picinfo.pic_h,
+ ctx->picinfo.buf_w, ctx->picinfo.buf_h);
+ }
+ }
+
+ if (!str_count) {
+ pr_info("\t can not found useful cmd: %s\n", buf);
+ pr_info("\t -picinfo ex. echo -picinfo\n");
+ }
+
+ return count;
+}
+
+static const struct file_operations vdec_fops = {
+ .open = simple_open,
+ .write = mtk_vdec_dbgfs_write,
+};
+
+void mtk_vcodec_dbgfs_create(struct mtk_vcodec_ctx *ctx)
+{
+ struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
+ struct mtk_vcodec_dev *vcodec_dev = ctx->dev;
+
+ dbgfs_inst = kzalloc(sizeof(*dbgfs_inst), GFP_KERNEL);
+ if (!dbgfs_inst)
+ return;
+
+ list_add_tail(&dbgfs_inst->node, &vcodec_dev->dbgfs.dbgfs_head);
+
+ vcodec_dev->dbgfs.inst_count++;
+
+ dbgfs_inst->inst_id = ctx->id;
+ dbgfs_inst->vcodec_ctx = ctx;
+
+ pr_info("dbgfs create: id(%d) total count: %d\n", dbgfs_inst->inst_id,
+ vcodec_dev->dbgfs.inst_count);
+}
+EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_create);
+
+void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, int ctx_id)
+{
+ struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
+
+ list_for_each_entry(dbgfs_inst, &vcodec_dev->dbgfs.dbgfs_head, node) {
+ if (dbgfs_inst && dbgfs_inst->inst_id == ctx_id) {
+ vcodec_dev->dbgfs.inst_count--;
+ pr_info("dbgfs_inst remove id: %d total count: %d\n",
+ dbgfs_inst->inst_id,
+ vcodec_dev->dbgfs.inst_count);
+ break;
+ }
+ }
+
+ if (dbgfs_inst) {
+ list_del(&dbgfs_inst->node);
+ kfree(dbgfs_inst);
+ }
+}
+EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_remove);
+
void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
{
struct dentry *vcodec_root;
@@ -22,6 +102,11 @@ void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
debugfs_create_x32("mtk_v4l2_dbg_level", 0644, vcodec_root, &mtk_v4l2_dbg_level);
debugfs_create_x32("mtk_vcodec_dbg", 0644, vcodec_root, &mtk_vcodec_dbg);
+
+ INIT_LIST_HEAD(&vcodec_dev->dbgfs.dbgfs_head);
+ debugfs_create_file("vdec", 0200, vcodec_root, vcodec_dev, &vdec_fops);
+
+ vcodec_dev->dbgfs.inst_count = 0;
}
EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_init);
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
index 74f130f868c8..2d0b617e762e 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
@@ -8,15 +8,35 @@
#define __MTK_VCODEC_DBGFS_H__
struct mtk_vcodec_dev;
+struct mtk_vcodec_ctx;
+
+struct mtk_vcodec_dbgfs_inst {
+ struct list_head node;
+ int inst_id;
+ struct mtk_vcodec_ctx *vcodec_ctx;
+};
struct mtk_vcodec_dbgfs {
+ struct list_head dbgfs_head;
struct dentry *vcodec_root;
+ int inst_count;
};
#if defined(CONFIG_DEBUG_FS)
+void mtk_vcodec_dbgfs_create(struct mtk_vcodec_ctx *ctx);
+void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, int ctx_id);
+
void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev);
void mtk_vcodec_dbgfs_deinit(struct mtk_vcodec_dev *vcodec_dev);
#else
+static inline void mtk_vcodec_dbgfs_create(struct mtk_vcodec_ctx *ctx)
+{
+}
+
+static inline void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, int ctx_id)
+{
+}
+
static inline void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
{
}
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
index de29b1fb0436..8c2443a18f5e 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
@@ -215,6 +215,7 @@ static int fops_vcodec_open(struct file *file)
ctx->dev->vdec_pdata->init_vdec_params(ctx);
list_add(&ctx->list, &dev->ctx_list);
+ mtk_vcodec_dbgfs_create(ctx);
mutex_unlock(&dev->dev_mutex);
mtk_v4l2_debug(0, "%s decoder [%d]", dev_name(&dev->plat_dev->dev),
@@ -256,6 +257,7 @@ static int fops_vcodec_release(struct file *file)
v4l2_fh_exit(&ctx->fh);
v4l2_ctrl_handler_free(&ctx->ctrl_hdl);
+ mtk_vcodec_dbgfs_remove(dev, ctx->id);
list_del_init(&ctx->list);
kfree(ctx);
mutex_unlock(&dev->dev_mutex);
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information
2023-03-20 10:28 ` [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information Yunfei Dong
@ 2023-03-20 14:49 ` AngeloGioacchino Del Regno
2023-03-22 9:51 ` Yunfei Dong (董云飞)
0 siblings, 1 reply; 9+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-03-20 14:49 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
Benjamin Gaignard, Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
Il 20/03/23 11:28, Yunfei Dong ha scritto:
> In oder to get each instance information according to test command, adding
> one file node "vdec".
>
> Can use echo command to set different string value as 'echo -picinfo > vdec'
> to get real and aligned resolution.
>
> Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
> ---
> .../mediatek/vcodec/mtk_vcodec_dbgfs.c | 85 +++++++++++++++++++
> .../mediatek/vcodec/mtk_vcodec_dbgfs.h | 20 +++++
> .../mediatek/vcodec/mtk_vcodec_dec_drv.c | 2 +
> 3 files changed, 107 insertions(+)
>
> diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> index bef78c028a75..9e7d57d21cea 100644
> --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> @@ -10,6 +10,86 @@
> #include "mtk_vcodec_drv.h"
> #include "mtk_vcodec_util.h"
>
> +static ssize_t mtk_vdec_dbgfs_write(struct file *filp, const char __user *ubuf,
> + size_t count, loff_t *ppos)
> +{
> + struct mtk_vcodec_dev *vcodec_dev = filp->private_data;
> + char buf[32] = { 0 };
> + int len, str_count = 0;
> + struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
> + struct mtk_vcodec_ctx *ctx;
> +
> + len = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, ubuf, count);
> + if (len <= 0)
> + return len;
> +
> + list_for_each_entry(dbgfs_inst, &vcodec_dev->dbgfs.dbgfs_head, node) {
> + pr_info("dbgfs_inst id: %d\n", dbgfs_inst->inst_id);
> + ctx = dbgfs_inst->vcodec_ctx;
> +
> + if (strstr(buf, "-picinfo")) {
> + str_count++;
> + pr_info("resolution: real(%dx%d)=>align(%dx%d)\n",
> + ctx->picinfo.pic_w, ctx->picinfo.pic_h,
> + ctx->picinfo.buf_w, ctx->picinfo.buf_h);
If you want to use debugfs (which is a good choice!), you should use debugfs!
This means that you shouldn't print this kind of information to the kernel,
but rather to a debugfs entry.
Example:
$ echo "-picinfo" > vdec
$ cat vdec
resolution: real(1024x768)=>align(something)
This is the same for all of the commits of this series, so, please properly
use debugfs.
Regards,
Angelo
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information
2023-03-20 14:49 ` AngeloGioacchino Del Regno
@ 2023-03-22 9:51 ` Yunfei Dong (董云飞)
0 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong (董云飞) @ 2023-03-22 9:51 UTC (permalink / raw)
To: wenst, nfraprado, nicolas, angelogioacchino.delregno,
benjamin.gaignard, hverkuil-cisco
Cc: linux-kernel, linux-mediatek, frkoenig, stevecho, linux-media,
devicetree, daniel, Project_Global_Chrome_Upstream_Group, hsinyi,
linux-arm-kernel, matthias.bgg
Hi AngeloGioacchino,
Thanks for your suggestion.
On Mon, 2023-03-20 at 15:49 +0100, AngeloGioacchino Del Regno wrote:
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>
>
> Il 20/03/23 11:28, Yunfei Dong ha scritto:
> > In oder to get each instance information according to test command,
> > adding
> > one file node "vdec".
> >
> > Can use echo command to set different string value as 'echo
> > -picinfo > vdec'
> > to get real and aligned resolution.
> >
> > Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
> > ---
> > .../mediatek/vcodec/mtk_vcodec_dbgfs.c | 85
> > +++++++++++++++++++
> > .../mediatek/vcodec/mtk_vcodec_dbgfs.h | 20 +++++
> > .../mediatek/vcodec/mtk_vcodec_dec_drv.c | 2 +
> > 3 files changed, 107 insertions(+)
> >
> > diff --git
> > a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> > b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> > index bef78c028a75..9e7d57d21cea 100644
> > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
> > @@ -10,6 +10,86 @@
> > #include "mtk_vcodec_drv.h"
> > #include "mtk_vcodec_util.h"
> >
> > +static ssize_t mtk_vdec_dbgfs_write(struct file *filp, const char
> > __user *ubuf,
> > + size_t count, loff_t *ppos)
> > +{
> > + struct mtk_vcodec_dev *vcodec_dev = filp->private_data;
> > + char buf[32] = { 0 };
> > + int len, str_count = 0;
> > + struct mtk_vcodec_dbgfs_inst *dbgfs_inst;
> > + struct mtk_vcodec_ctx *ctx;
> > +
> > + len = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
> > ubuf, count);
> > + if (len <= 0)
> > + return len;
> > +
> > + list_for_each_entry(dbgfs_inst, &vcodec_dev-
> > >dbgfs.dbgfs_head, node) {
> > + pr_info("dbgfs_inst id: %d\n", dbgfs_inst->inst_id);
> > + ctx = dbgfs_inst->vcodec_ctx;
> > +
> > + if (strstr(buf, "-picinfo")) {
> > + str_count++;
> > + pr_info("resolution:
> > real(%dx%d)=>align(%dx%d)\n",
> > + ctx->picinfo.pic_w, ctx-
> > >picinfo.pic_h,
> > + ctx->picinfo.buf_w, ctx-
> > >picinfo.buf_h);
>
> If you want to use debugfs (which is a good choice!), you should use
> debugfs!
> This means that you shouldn't print this kind of information to the
> kernel,
> but rather to a debugfs entry.
>
> Example:
>
> $ echo "-picinfo" > vdec
> $ cat vdec
>
> resolution: real(1024x768)=>align(something)
>
> This is the same for all of the commits of this series, so, please
> properly
> use debugfs.
>
Add new file ops 'read' to get the debug information with cmd "cat
vdec" instead of pr_info.
>
> Regards,
> Angelo
>
Best Regards,
Yunfei Dong
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/6 RESEND] media: mediatek: vcodec: Get get each instance format type
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
` (2 preceding siblings ...)
2023-03-20 10:28 ` [PATCH 3/6 RESEND] media: mediatek: vcodec: Add a debugfs file to get different useful information Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
2023-03-20 10:28 ` [PATCH 5/6 RESEND] media: mediatek: vcodec: Change dbgfs interface to support encode Yunfei Dong
2023-03-20 10:28 ` [PATCH 6/6 RESEND] media: mediatek: vcodec: Add encode to support dbgfs Yunfei Dong
5 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
Adding echo command to get capture and output queue format type:
'echo -format > vdec'
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../mediatek/vcodec/mtk_vcodec_dbgfs.c | 34 +++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
index 9e7d57d21cea..8a03f986a857 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
@@ -10,6 +10,34 @@
#include "mtk_vcodec_drv.h"
#include "mtk_vcodec_util.h"
+static void mtk_vdec_dbgfs_get_format_type(int output, int capture)
+{
+ switch (output) {
+ case V4L2_PIX_FMT_H264_SLICE:
+ pr_info("output format: h264 slice\n");
+ break;
+ case V4L2_PIX_FMT_VP8_FRAME:
+ pr_info("output format: vp8 slice\n");
+ break;
+ case V4L2_PIX_FMT_VP9_FRAME:
+ pr_info("output format: vp9 slice\n");
+ break;
+ default:
+ pr_info("unsupported output format: 0x%x\n", output);
+ }
+
+ switch (capture) {
+ case V4L2_PIX_FMT_MM21:
+ pr_info("capture format MM21\n");
+ break;
+ case V4L2_PIX_FMT_MT21C:
+ pr_info("capture format MT21C\n");
+ break;
+ default:
+ pr_info("unsupported capture format: 0x%x\n", capture);
+ }
+}
+
static ssize_t mtk_vdec_dbgfs_write(struct file *filp, const char __user *ubuf,
size_t count, loff_t *ppos)
{
@@ -33,11 +61,17 @@ static ssize_t mtk_vdec_dbgfs_write(struct file *filp, const char __user *ubuf,
ctx->picinfo.pic_w, ctx->picinfo.pic_h,
ctx->picinfo.buf_w, ctx->picinfo.buf_h);
}
+
+ if (strstr(buf, "-format")) {
+ str_count++;
+ mtk_vdec_dbgfs_get_format_type(ctx->current_codec, ctx->capture_fourcc);
+ }
}
if (!str_count) {
pr_info("\t can not found useful cmd: %s\n", buf);
pr_info("\t -picinfo ex. echo -picinfo\n");
+ pr_info("\t -format ex. echo -format\n");
}
return count;
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/6 RESEND] media: mediatek: vcodec: Change dbgfs interface to support encode
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
` (3 preceding siblings ...)
2023-03-20 10:28 ` [PATCH 4/6 RESEND] media: mediatek: vcodec: Get get each instance format type Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
2023-03-20 10:28 ` [PATCH 6/6 RESEND] media: mediatek: vcodec: Add encode to support dbgfs Yunfei Dong
5 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
Extern dbgfs init interface to support encode and create encode
dbgfs file.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c | 7 +++++--
drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h | 4 ++--
.../media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
index 8a03f986a857..7d0021f34b3c 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.c
@@ -124,11 +124,14 @@ void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, int ctx_id)
}
EXPORT_SYMBOL_GPL(mtk_vcodec_dbgfs_remove);
-void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
+void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev, bool is_decode)
{
struct dentry *vcodec_root;
- vcodec_dev->dbgfs.vcodec_root = debugfs_create_dir("vcodec-dec", NULL);
+ if (is_decode)
+ vcodec_dev->dbgfs.vcodec_root = debugfs_create_dir("vcodec-dec", NULL);
+ else
+ vcodec_dev->dbgfs.vcodec_root = debugfs_create_dir("vcodec-enc", NULL);
if (IS_ERR(vcodec_dev->dbgfs.vcodec_root))
pr_info("create dir err:%d\n", IS_ERR(vcodec_dev->dbgfs.vcodec_root));
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
index 2d0b617e762e..6adfc4f417ef 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dbgfs.h
@@ -26,7 +26,7 @@ struct mtk_vcodec_dbgfs {
void mtk_vcodec_dbgfs_create(struct mtk_vcodec_ctx *ctx);
void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, int ctx_id);
-void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev);
+void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev, bool is_decode);
void mtk_vcodec_dbgfs_deinit(struct mtk_vcodec_dev *vcodec_dev);
#else
static inline void mtk_vcodec_dbgfs_create(struct mtk_vcodec_ctx *ctx)
@@ -37,7 +37,7 @@ static inline void mtk_vcodec_dbgfs_remove(struct mtk_vcodec_dev *vcodec_dev, in
{
}
-static inline void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev)
+static inline void mtk_vcodec_dbgfs_init(struct mtk_vcodec_dev *vcodec_dev, bool is_decode)
{
}
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
index 8c2443a18f5e..9260273f26cf 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_drv.c
@@ -433,7 +433,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
mtk_v4l2_debug(0, "media registered as /dev/media%d", vfd_dec->minor);
}
- mtk_vcodec_dbgfs_init(dev);
+ mtk_vcodec_dbgfs_init(dev, true);
mtk_v4l2_debug(0, "decoder registered as /dev/video%d", vfd_dec->minor);
return 0;
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 6/6 RESEND] media: mediatek: vcodec: Add encode to support dbgfs
2023-03-20 10:28 [PATCH 0/6 RESEND] media: mediatek: vcodec: Add debugfs file for decode and encode Yunfei Dong
` (4 preceding siblings ...)
2023-03-20 10:28 ` [PATCH 5/6 RESEND] media: mediatek: vcodec: Change dbgfs interface to support encode Yunfei Dong
@ 2023-03-20 10:28 ` Yunfei Dong
5 siblings, 0 replies; 9+ messages in thread
From: Yunfei Dong @ 2023-03-20 10:28 UTC (permalink / raw)
To: Yunfei Dong, Chen-Yu Tsai, Nicolas Dufresne, Hans Verkuil,
AngeloGioacchino Del Regno, Benjamin Gaignard,
Nícolas F . R . A . Prado
Cc: Matthias Brugger, Hsin-Yi Wang, Fritz Koenig, Daniel Vetter,
Steve Cho, linux-media, devicetree, linux-kernel,
linux-arm-kernel, linux-mediatek,
Project_Global_Chrome_Upstream_Group
Add encode to support dbgfs.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c
index 9095186d5495..94703c66da74 100644
--- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c
+++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c
@@ -353,6 +353,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
goto err_enc_reg;
}
+ mtk_vcodec_dbgfs_init(dev, false);
mtk_v4l2_debug(0, "encoder %d registered as /dev/video%d",
dev->venc_pdata->core_id, vfd_enc->num);
@@ -463,6 +464,7 @@ static int mtk_vcodec_enc_remove(struct platform_device *pdev)
if (dev->vfd_enc)
video_unregister_device(dev->vfd_enc);
+ mtk_vcodec_dbgfs_deinit(dev);
v4l2_device_unregister(&dev->v4l2_dev);
pm_runtime_disable(dev->pm.dev);
mtk_vcodec_fw_release(dev->fw_handler);
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 9+ messages in thread