From 89d6545bd11d1b8db1832d260f1b794f55f5b627 Mon Sep 17 00:00:00 2001 From: Allon Huang Date: Thu, 25 Feb 2021 15:55:16 +0800 Subject: [PATCH] media: rockchip: cif: update frm0 buf when frm0/frm1 appear simultaneously to avoid panic Signed-off-by: Allon Huang Change-Id: I9062f45c9fc2ac6799c768182fbb2214906117df --- drivers/media/platform/rockchip/cif/capture.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 1736fdeb30e7..d355c30f2638 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -1182,7 +1182,7 @@ static void rkcif_assign_new_buffer_pingpong(struct rkcif_stream *stream, } else { if (stream->frame_phase == CIF_CSI_FRAME0_READY) stream->curr_buf = NULL; - if (stream->frame_phase == CIF_CSI_FRAME1_READY) + else if (stream->frame_phase == CIF_CSI_FRAME1_READY) stream->next_buf = NULL; buffer = NULL; } @@ -4082,15 +4082,19 @@ static void rkcif_update_stream(struct rkcif_device *cif_dev, struct vb2_v4l2_buffer *vb_done = NULL; unsigned long lock_flags = 0; + if (stream->frame_phase == (CIF_CSI_FRAME0_READY | CIF_CSI_FRAME1_READY)) + v4l2_err(&cif_dev->v4l2_dev, "stream[%d], frm0/frm1 end simultaneously,frm id:%d\n", + stream->id, stream->frame_idx); + spin_lock(&stream->fps_lock); - 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(); - } else if (stream->frame_phase & CIF_CSI_FRAME0_READY) { + 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(); + } 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(); } spin_unlock(&stream->fps_lock);