From 4f8051bc47592f6d17f86a8892556ae7d741c2ab Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Wed, 24 Jan 2024 09:59:06 +0800 Subject: [PATCH] media: rockchip: isp: add rkisp_buf_dbg buf queue to set u64 data and buf done to check it. Change-Id: If8e2e1d2b2f782a84dbbfb08b70c497ad23fec4b Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/capture.c | 10 ++++++++-- drivers/media/platform/rockchip/isp/capture_v20.c | 7 ++++++- drivers/media/platform/rockchip/isp/capture_v21.c | 7 ++++++- drivers/media/platform/rockchip/isp/capture_v30.c | 7 ++++++- drivers/media/platform/rockchip/isp/capture_v32.c | 4 ++++ drivers/media/platform/rockchip/isp/common.h | 3 ++- drivers/media/platform/rockchip/isp/dev.c | 4 ++++ 7 files changed, 36 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture.c b/drivers/media/platform/rockchip/isp/capture.c index 6ad7050b4922..99c26528fdfb 100644 --- a/drivers/media/platform/rockchip/isp/capture.c +++ b/drivers/media/platform/rockchip/isp/capture.c @@ -1597,13 +1597,19 @@ static void rkisp_buf_done_task(unsigned long arg) spin_unlock_irqrestore(&stream->vbq_lock, lock_flags); while (!list_empty(&local_list)) { + u64 *data; + buf = list_first_entry(&local_list, struct rkisp_buffer, queue); list_del(&buf->queue); - + data = buf->vaddr[0]; v4l2_dbg(2, rkisp_debug, &stream->ispdev->v4l2_dev, - "stream:%d seq:%d buf:0x%x done\n", + "stream:%d seq:%d buf done:0x%x\n", stream->id, buf->vb.sequence, buf->buff_addr[0]); + if (rkisp_buf_dbg && data && *data == RKISP_DATA_CHECK) + v4l2_dbg(0, rkisp_debug, &stream->ispdev->v4l2_dev, + "seq:%d data no update:%llx %llx\n", + buf->vb.sequence, *data, *(data + 1)); vb2_buffer_done(&buf->vb.vb2_buf, stream->streaming ? VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR); } diff --git a/drivers/media/platform/rockchip/isp/capture_v20.c b/drivers/media/platform/rockchip/isp/capture_v20.c index 9cf3ee746d64..1ed1c82c98a6 100644 --- a/drivers/media/platform/rockchip/isp/capture_v20.c +++ b/drivers/media/platform/rockchip/isp/capture_v20.c @@ -1638,7 +1638,12 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); for (i = 0; i < isp_fmt->mplanes; i++) { - vb2_plane_vaddr(vb, i); + ispbuf->vaddr[i] = vb2_plane_vaddr(vb, i); + if (rkisp_buf_dbg && ispbuf->vaddr[i]) { + u64 *data = ispbuf->vaddr[i]; + + *data = RKISP_DATA_CHECK; + } if (stream->ispdev->hw_dev->is_dma_sg_ops) { sgt = vb2_dma_sg_plane_desc(vb, i); ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl); diff --git a/drivers/media/platform/rockchip/isp/capture_v21.c b/drivers/media/platform/rockchip/isp/capture_v21.c index 9ca0e2956e3c..c514e4024716 100644 --- a/drivers/media/platform/rockchip/isp/capture_v21.c +++ b/drivers/media/platform/rockchip/isp/capture_v21.c @@ -1574,7 +1574,12 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); for (i = 0; i < isp_fmt->mplanes; i++) { - vb2_plane_vaddr(vb, i); + ispbuf->vaddr[i] = vb2_plane_vaddr(vb, i); + if (rkisp_buf_dbg && ispbuf->vaddr[i]) { + u64 *data = ispbuf->vaddr[i]; + + *data = RKISP_DATA_CHECK; + } if (stream->ispdev->hw_dev->is_dma_sg_ops) { sgt = vb2_dma_sg_plane_desc(vb, i); ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl); diff --git a/drivers/media/platform/rockchip/isp/capture_v30.c b/drivers/media/platform/rockchip/isp/capture_v30.c index 4f24f65a56d0..becf779ad925 100644 --- a/drivers/media/platform/rockchip/isp/capture_v30.c +++ b/drivers/media/platform/rockchip/isp/capture_v30.c @@ -1165,7 +1165,12 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); for (i = 0; i < isp_fmt->mplanes; i++) { - vb2_plane_vaddr(vb, i); + ispbuf->vaddr[i] = vb2_plane_vaddr(vb, i); + if (rkisp_buf_dbg && ispbuf->vaddr[i]) { + u64 *data = ispbuf->vaddr[i]; + + *data = RKISP_DATA_CHECK; + } if (stream->ispdev->hw_dev->is_dma_sg_ops) { sgt = vb2_dma_sg_plane_desc(vb, i); ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl); diff --git a/drivers/media/platform/rockchip/isp/capture_v32.c b/drivers/media/platform/rockchip/isp/capture_v32.c index 10db850b4f93..9eb275169e18 100644 --- a/drivers/media/platform/rockchip/isp/capture_v32.c +++ b/drivers/media/platform/rockchip/isp/capture_v32.c @@ -1667,7 +1667,11 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); for (i = 0; i < isp_fmt->mplanes; i++) { ispbuf->vaddr[i] = vb2_plane_vaddr(vb, i); + if (rkisp_buf_dbg && ispbuf->vaddr[i]) { + u64 *data = ispbuf->vaddr[i]; + *data = RKISP_DATA_CHECK; + } if (stream->ispdev->hw_dev->is_dma_sg_ops) { sgt = vb2_dma_sg_plane_desc(vb, i); ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl); diff --git a/drivers/media/platform/rockchip/isp/common.h b/drivers/media/platform/rockchip/isp/common.h index c6568715a733..9bdaafac5fc1 100644 --- a/drivers/media/platform/rockchip/isp/common.h +++ b/drivers/media/platform/rockchip/isp/common.h @@ -57,7 +57,7 @@ #define RKISP_PLANE_CR 2 #define RKISP_EMDDATA_FIFO_MAX 4 -#define RKISP_DMATX_CHECK 0xA5A5A5A5 +#define RKISP_DATA_CHECK 0xA5A5A5A5 #define RKISP_MOTION_DECT_TS_SIZE 16 @@ -139,6 +139,7 @@ struct rkisp_dummy_buffer { extern int rkisp_debug; extern bool rkisp_monitor; extern bool rkisp_irq_dbg; +extern bool rkisp_buf_dbg; extern u64 rkisp_debug_reg; extern struct platform_driver rkisp_plat_drv; diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index b40fd7f68827..2bb51ca8e6ff 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -67,6 +67,10 @@ bool rkisp_irq_dbg; module_param_named(irq_dbg, rkisp_irq_dbg, bool, 0644); MODULE_PARM_DESC(irq_dbg, "rkisp interrupt runtime"); +bool rkisp_buf_dbg; +module_param_named(buf_dbg, rkisp_buf_dbg, bool, 0644); +MODULE_PARM_DESC(buf_dbg, "rkisp check output buf"); + static bool rkisp_rdbk_auto; module_param_named(rdbk_auto, rkisp_rdbk_auto, bool, 0644); MODULE_PARM_DESC(irq_dbg, "rkisp and vicap auto readback mode");