From f53a9aa7576af54ea3271c623fb29fa79952c867 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 26 Aug 2022 14:59:10 +0800 Subject: [PATCH] media: rockchip: isp: record isp read time for fast mode Change-Id: I048a9020e36e08f2968b36cf08345196dd07fb8c Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/dmarx.c | 2 ++ drivers/media/platform/rockchip/isp/rkisp.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/dmarx.c b/drivers/media/platform/rockchip/isp/dmarx.c index db4313d74edc..2d8a7eb9b855 100644 --- a/drivers/media/platform/rockchip/isp/dmarx.c +++ b/drivers/media/platform/rockchip/isp/dmarx.c @@ -471,6 +471,8 @@ static int dmarx_frame_end(struct rkisp_stream *stream) rkisp_unite_set_bits(dev, CSI2RX_MASK_STAT, 0, ISP21_MIPI_DROP_FRM, true, dev->hw_dev->is_unite); + rkisp_unite_clear_bits(dev, CIF_ISP_IMSC, CIF_ISP_FRAME_IN, + true, dev->hw_dev->is_unite); } rx_buf->runtime_us = dev->isp_sdev.dbg.interval / 1000; v4l2_subdev_call(sd, video, s_rx_buffer, rx_buf, NULL); diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 6f0c556a0efd..2ac9f3b9e26b 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -1616,10 +1616,9 @@ static int rkisp_config_isp(struct rkisp_device *dev) if (dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21 || dev->isp_ver == ISP_V30 || dev->isp_ver == ISP_V32) irq_mask |= ISP2X_LSC_LUT_ERR; - if (is_unite) - rkisp_next_write(dev, CIF_ISP_IMSC, irq_mask, true); - else - rkisp_write(dev, CIF_ISP_IMSC, irq_mask, true); + if (dev->is_pre_on) + irq_mask |= CIF_ISP_FRAME_IN; + rkisp_unite_write(dev, CIF_ISP_IMSC, irq_mask, true, is_unite); if ((dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21) && @@ -3938,6 +3937,8 @@ vs_skip: /* sampled input frame is complete */ if (isp_mis & CIF_ISP_FRAME_IN) { + dev->isp_sdev.dbg.interval = + ktime_get_ns() - dev->isp_sdev.dbg.timestamp; rkisp_set_state(&dev->isp_state, ISP_FRAME_IN); writel(CIF_ISP_FRAME_IN, base + CIF_ISP_ICR); isp_mis_tmp = readl(base + CIF_ISP_MIS); @@ -3948,8 +3949,9 @@ vs_skip: /* frame was completely put out */ if (isp_mis & CIF_ISP_FRAME) { - dev->isp_sdev.dbg.interval = - ktime_get_ns() - dev->isp_sdev.dbg.timestamp; + if (!dev->is_pre_on || !IS_HDR_RDBK(dev->rd_mode)) + dev->isp_sdev.dbg.interval = + ktime_get_ns() - dev->isp_sdev.dbg.timestamp; /* Clear Frame In (ISP) */ rkisp_set_state(&dev->isp_state, ISP_FRAME_END); writel(CIF_ISP_FRAME, base + CIF_ISP_ICR);