From 3623186b8e86cb13c3262178a5fcca8f501fa31c Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Fri, 22 Dec 2023 14:43:11 +0800 Subject: [PATCH] media: rockchip: vicap: rv1106 use ktime_get_boottime_ns to get timestamp Signed-off-by: Zefa Chen Change-Id: I2ab64cbbff6d69769099e16751f6aed4d760a86d --- drivers/media/platform/rockchip/cif/capture.c | 60 +++++++++---------- .../media/platform/rockchip/cif/cif-luma.c | 2 +- .../media/platform/rockchip/cif/cif-scale.c | 2 +- drivers/media/platform/rockchip/cif/dev.h | 8 +++ 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index f8191b03f5db..0d787014edb4 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -1665,7 +1665,7 @@ static void rkcif_s_rx_buffer(struct rkcif_stream *stream, struct rkisp_rx_buf * v4l2_info(&dev->v4l2_dev, "s_buf seq %d type %d, dma addr %x, %lld\n", dbufs->sequence, dbufs->type, (u32)rx_buf->dummy.dma_addr, - ktime_get_ns()); + rkcif_time_get_ns(dev)); } v4l2_subdev_call(sd, video, s_rx_buffer, dbufs, NULL); } @@ -2016,7 +2016,7 @@ static int rkcif_assign_new_buffer_update_toisp(struct rkcif_stream *stream, active_buf->dbufs.is_first = true; active_buf->dbufs.sequence = stream->frame_idx - 1; active_buf->dbufs.timestamp = stream->readout.fs_timestamp; - active_buf->fe_timestamp = ktime_get_ns(); + active_buf->fe_timestamp = rkcif_time_get_ns(dev); stream->last_frame_idx = stream->frame_idx; if (dev->hdr.hdr_mode == NO_HDR) { rkcif_s_rx_buffer(stream, &active_buf->dbufs); @@ -2047,7 +2047,7 @@ static int rkcif_assign_new_buffer_update_toisp(struct rkcif_stream *stream, active_buf->dbufs.is_first = true; active_buf->dbufs.sequence = stream->frame_idx - 1; active_buf->dbufs.timestamp = stream->readout.fs_timestamp; - active_buf->fe_timestamp = ktime_get_ns(); + active_buf->fe_timestamp = rkcif_time_get_ns(dev); stream->last_frame_idx = stream->frame_idx; if (dev->hdr.hdr_mode == NO_HDR) { rkcif_s_rx_buffer(stream, &active_buf->dbufs); @@ -2103,7 +2103,7 @@ static int rkcif_assign_new_buffer_update_toisp(struct rkcif_stream *stream, active_buf->dbufs.is_first = true; active_buf->dbufs.sequence = stream->frame_idx - 1; active_buf->dbufs.timestamp = stream->readout.fs_timestamp; - active_buf->fe_timestamp = ktime_get_ns(); + active_buf->fe_timestamp = rkcif_time_get_ns(dev); stream->last_frame_idx = stream->frame_idx; if (dev->hdr.hdr_mode == NO_HDR) { rkcif_s_rx_buffer(stream, &active_buf->dbufs); @@ -2196,7 +2196,7 @@ void rkcif_assign_check_buffer_update_toisp(struct rkcif_stream *stream) dev->sensor_linetime = rkcif_get_linetime(stream); vblank = rkcif_get_sensor_vblank(dev); vblank_ns = vblank * dev->sensor_linetime; - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(dev); if (stream->toisp_buf_state.state == RKCIF_TOISP_BUF_THESAME) { frame_phase = stream->frame_phase; @@ -5020,7 +5020,7 @@ void rkcif_do_stop_stream(struct rkcif_stream *stream, spin_lock_irqsave(&stream->fps_lock, flags); fs_time = stream->readout.fs_timestamp; spin_unlock_irqrestore(&stream->fps_lock, flags); - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(dev); if (cur_time > fs_time && cur_time - fs_time < (frame_time_ns - 10000000)) { spin_lock_irqsave(&stream->vbq_lock, flags); @@ -8253,7 +8253,7 @@ static bool rkcif_is_csi2_err_trigger_reset(struct rkcif_timer *timer) timer->csi2_err_triggered_cnt++; if (timer->csi2_err_triggered_cnt == 1) { is_first_err = true; - timer->csi2_first_err_timestamp = ktime_get_ns(); + timer->csi2_first_err_timestamp = rkcif_time_get_ns(dev); } is_assign_triggered = true; @@ -8265,7 +8265,7 @@ static bool rkcif_is_csi2_err_trigger_reset(struct rkcif_timer *timer) if (!is_first_err) { if (timer->csi2_err_triggered_cnt >= 1) { - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(dev); diff_time = cur_time - timer->csi2_first_err_timestamp; diff_time = div_u64(diff_time, 1000000); if (diff_time >= timer->err_time_interval) { @@ -8755,7 +8755,7 @@ static void rkcif_buf_done_prepare(struct rkcif_stream *stream, else vb_done->vb2_buf.timestamp = stream->readout.fs_timestamp; vb_done->sequence = stream->frame_idx - 1; - active_buf->fe_timestamp = ktime_get_ns(); + active_buf->fe_timestamp = rkcif_time_get_ns(cif_dev); if (stream->is_line_wake_up) { spin_lock_irqsave(&stream->fps_lock, flags); if (mode) @@ -8779,7 +8779,7 @@ static void rkcif_buf_done_prepare(struct rkcif_stream *stream, else vb_done->vb2_buf.timestamp = stream->readout.fs_timestamp; vb_done->sequence = stream->frame_idx - 1; - cif_dev->rdbk_buf[stream->id]->fe_timestamp = ktime_get_ns(); + cif_dev->rdbk_buf[stream->id]->fe_timestamp = rkcif_time_get_ns(cif_dev); } if (cif_dev->hdr.hdr_mode == NO_HDR || cif_dev->hdr.hdr_mode == HDR_COMPR) { @@ -8998,7 +8998,7 @@ static void rkcif_line_wake_up_rdbk(struct rkcif_stream *stream, int mipi_id) spin_unlock_irqrestore(&stream->vbq_lock, flags); active_buf->dbufs.sequence = stream->frame_idx - 1; active_buf->dbufs.timestamp = stream->readout.fs_timestamp; - active_buf->fe_timestamp = ktime_get_ns(); + active_buf->fe_timestamp = rkcif_time_get_ns(stream->cifdev); stream->last_frame_idx = stream->frame_idx; if (stream->cifdev->hdr.hdr_mode == NO_HDR) { rkcif_s_rx_buffer(stream, &active_buf->dbufs); @@ -9018,7 +9018,7 @@ static void rkcif_deal_readout_time(struct rkcif_stream *stream) unsigned long flags; spin_lock_irqsave(&stream->fps_lock, flags); - stream->readout.fe_timestamp = ktime_get_ns(); + stream->readout.fe_timestamp = rkcif_time_get_ns(cif_dev); if (cif_dev->inf_id == RKCIF_DVP) { spin_unlock_irqrestore(&stream->fps_lock, flags); @@ -9065,11 +9065,11 @@ static void rkcif_update_stream(struct rkcif_device *cif_dev, if (stream->frame_phase & CIF_CSI_FRAME0_READY) { if (stream->curr_buf) active_buf = stream->curr_buf; - stream->fps_stats.frm0_timestamp = ktime_get_ns(); + stream->fps_stats.frm0_timestamp = rkcif_time_get_ns(cif_dev); } else if (stream->frame_phase & CIF_CSI_FRAME1_READY) { if (stream->next_buf) active_buf = stream->next_buf; - stream->fps_stats.frm1_timestamp = ktime_get_ns(); + stream->fps_stats.frm1_timestamp = rkcif_time_get_ns(cif_dev); } spin_unlock_irqrestore(&stream->fps_lock, flags); } @@ -9113,9 +9113,9 @@ static void rkcif_update_stream_toisp(struct rkcif_device *cif_dev, spin_lock(&stream->fps_lock); if (stream->frame_phase & CIF_CSI_FRAME0_READY) - stream->fps_stats.frm0_timestamp = ktime_get_ns(); + stream->fps_stats.frm0_timestamp = rkcif_time_get_ns(cif_dev); else if (stream->frame_phase & CIF_CSI_FRAME1_READY) - stream->fps_stats.frm1_timestamp = ktime_get_ns(); + stream->fps_stats.frm1_timestamp = rkcif_time_get_ns(cif_dev); spin_unlock(&stream->fps_lock); if (cif_dev->inf_id == RKCIF_MIPI_LVDS) @@ -9147,11 +9147,11 @@ static void rkcif_update_stream_rockit(struct rkcif_device *cif_dev, if (stream->frame_phase & CIF_CSI_FRAME0_READY) { if (stream->curr_buf_rockit) active_buf = stream->curr_buf_rockit; - stream->fps_stats.frm0_timestamp = ktime_get_ns(); + stream->fps_stats.frm0_timestamp = rkcif_time_get_ns(cif_dev); } else if (stream->frame_phase & CIF_CSI_FRAME1_READY) { if (stream->next_buf_rockit) active_buf = stream->next_buf_rockit; - stream->fps_stats.frm1_timestamp = ktime_get_ns(); + stream->fps_stats.frm1_timestamp = rkcif_time_get_ns(cif_dev); } spin_unlock_irqrestore(&stream->fps_lock, flags); } @@ -9464,7 +9464,7 @@ static bool rkcif_is_reduced_frame_rate(struct rkcif_device *dev) v4l2_dbg(3, rkcif_debug, &dev->v4l2_dev, "diff_time:%lld,devi_t:%ld,devi_h:%d\n", diff_time, timer->line_end_cycle * deviation, deviation); - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(dev); time_distance = timestamp0 > timestamp1 ? cur_time - timestamp0 : cur_time - timestamp1; time_distance = div_u64(time_distance, 1000); @@ -10225,14 +10225,14 @@ static void rkcif_toisp_check_stop_status(struct sditf_priv *priv, if (stream->id == 0) rkcif_send_sof(stream->cifdev); stream->frame_idx++; - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(stream->cifdev); stream->readout.readout_time = cur_time - stream->readout.fs_timestamp; stream->readout.fs_timestamp = cur_time; stream->buf_wake_up_cnt++; if (stream->frame_idx % 2) - stream->fps_stats.frm0_timestamp = ktime_get_ns(); + stream->fps_stats.frm0_timestamp = rkcif_time_get_ns(stream->cifdev); else - stream->fps_stats.frm1_timestamp = ktime_get_ns(); + stream->fps_stats.frm1_timestamp = rkcif_time_get_ns(stream->cifdev); if (stream->cifdev->rdbk_debug && stream->frame_idx < 15) v4l2_info(&priv->cif_dev->v4l2_dev, @@ -10357,7 +10357,7 @@ static void rkcif_deal_sof(struct rkcif_device *cif_dev) if (cif_dev->chip_id < CHIP_RK3588_CIF) detect_stream->fs_cnt_in_single_frame++; spin_lock_irqsave(&detect_stream->fps_lock, flags); - detect_stream->readout.fs_timestamp = ktime_get_ns(); + detect_stream->readout.fs_timestamp = rkcif_time_get_ns(cif_dev); spin_unlock_irqrestore(&detect_stream->fps_lock, flags); if (cif_dev->sync_cfg.type != RKCIF_NOSYNC_MODE) { @@ -10408,7 +10408,7 @@ static void rkcif_deal_sof(struct rkcif_device *cif_dev) "stream[%d] sof %d %lld\n", detect_stream->id, detect_stream->frame_idx - 1, - ktime_get_ns()); + rkcif_time_get_ns(cif_dev)); } } @@ -10901,7 +10901,7 @@ void rkcif_err_print_work(struct work_struct *work) u64 cur_time = 0; bool is_print = false; - cur_time = ktime_get_ns(); + cur_time = rkcif_time_get_ns(dev); if (err_state_work->last_timestamp == 0) { is_print = true; } else { @@ -11102,7 +11102,7 @@ void rkcif_irq_pingpong_v1(struct rkcif_device *cif_dev) stream->id, stream->frame_idx - 1, stream->frame_phase, - ktime_get_ns()); + rkcif_time_get_ns(cif_dev)); if (stream->is_finish_stop_dma && stream->is_wait_dma_stop) { stream->is_wait_dma_stop = false; wake_up(&stream->wq_stopped); @@ -11206,7 +11206,7 @@ void rkcif_irq_pingpong_v1(struct rkcif_device *cif_dev) rkcif_deal_sof(cif_dev); } else { spin_lock_irqsave(&stream->fps_lock, flags); - stream->readout.fs_timestamp = ktime_get_ns(); + stream->readout.fs_timestamp = rkcif_time_get_ns(cif_dev); stream->frame_idx++; spin_unlock_irqrestore(&stream->fps_lock, flags); } @@ -11464,7 +11464,7 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) rkcif_deal_sof(cif_dev); } else { spin_lock_irqsave(&stream->fps_lock, flags); - stream->readout.fs_timestamp = ktime_get_ns(); + stream->readout.fs_timestamp = rkcif_time_get_ns(cif_dev); stream->frame_idx++; spin_unlock_irqrestore(&stream->fps_lock, flags); } @@ -11591,9 +11591,9 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) spin_lock_irqsave(&stream->fps_lock, flags); if (stream->frame_phase & CIF_CSI_FRAME0_READY) - stream->fps_stats.frm0_timestamp = ktime_get_ns(); + stream->fps_stats.frm0_timestamp = rkcif_time_get_ns(cif_dev); else if (stream->frame_phase & CIF_CSI_FRAME1_READY) - stream->fps_stats.frm1_timestamp = ktime_get_ns(); + stream->fps_stats.frm1_timestamp = rkcif_time_get_ns(cif_dev); spin_unlock_irqrestore(&stream->fps_lock, flags); ret = rkcif_assign_new_buffer_oneframe(stream, diff --git a/drivers/media/platform/rockchip/cif/cif-luma.c b/drivers/media/platform/rockchip/cif/cif-luma.c index 9d751df3c4e5..5a3c228cf76c 100644 --- a/drivers/media/platform/rockchip/cif/cif-luma.c +++ b/drivers/media/platform/rockchip/cif/cif-luma.c @@ -361,7 +361,7 @@ void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int mipi_id, u32 frame_id if (send_task) { luma_vdev->work.readout = RKCIF_READOUT_LUMA; - luma_vdev->work.timestamp = ktime_get_ns(); + luma_vdev->work.timestamp = rkcif_time_get_ns(luma_vdev->cifdev); luma_vdev->work.frame_id = frame_id; if (frm_mode == RKCIF_LUMA_THREEFRM) diff --git a/drivers/media/platform/rockchip/cif/cif-scale.c b/drivers/media/platform/rockchip/cif/cif-scale.c index 3beede6ee93f..a9b97a6e21ad 100644 --- a/drivers/media/platform/rockchip/cif/cif-scale.c +++ b/drivers/media/platform/rockchip/cif/cif-scale.c @@ -968,7 +968,7 @@ static void rkcif_scale_vb_done_oneframe(struct rkcif_scale_vdev *scale_vdev, scale_vdev->pixm.plane_fmt[i].sizeimage); } - vb_done->vb2_buf.timestamp = ktime_get_ns(); + vb_done->vb2_buf.timestamp = rkcif_time_get_ns(scale_vdev->cifdev); vb2_buffer_done(&vb_done->vb2_buf, VB2_BUF_STATE_DONE); } diff --git a/drivers/media/platform/rockchip/cif/dev.h b/drivers/media/platform/rockchip/cif/dev.h index cf5cb661e94b..31316c003a16 100644 --- a/drivers/media/platform/rockchip/cif/dev.h +++ b/drivers/media/platform/rockchip/cif/dev.h @@ -1024,4 +1024,12 @@ void rkcif_err_print_work(struct work_struct *work); int rkcif_stream_suspend(struct rkcif_device *cif_dev, int mode); int rkcif_stream_resume(struct rkcif_device *cif_dev, int mode); +static inline u64 rkcif_time_get_ns(struct rkcif_device *dev) +{ + if (dev->chip_id == CHIP_RV1106_CIF) + return ktime_get_boottime_ns(); + else + return ktime_get_ns(); +} + #endif