media: rockchip: ispp: frame start to check stream output buffer

Change-Id: I8ca95767705ffd705c90e22ab5d067fe7d79ad9e
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2021-09-10 11:05:53 +08:00
committed by Tao Huang
parent 74b2c51e29
commit c5650d4372

View File

@@ -402,6 +402,20 @@ static void update_mi(struct rkispp_stream *stream)
rkispp_read(dev, stream->config->reg.cur_uv_base));
}
static void get_stream_buf(struct rkispp_stream *stream)
{
unsigned long lock_flags = 0;
spin_lock_irqsave(&stream->vbq_lock, lock_flags);
if (!list_empty(&stream->buf_queue) && !stream->curr_buf) {
stream->curr_buf =
list_first_entry(&stream->buf_queue,
struct rkispp_buffer, queue);
list_del(&stream->curr_buf->queue);
}
spin_unlock_irqrestore(&stream->vbq_lock, lock_flags);
}
static int rkispp_frame_end(struct rkispp_stream *stream, u32 state)
{
struct rkispp_device *dev = stream->isppdev;
@@ -489,15 +503,7 @@ static int rkispp_frame_end(struct rkispp_stream *stream, u32 state)
}
}
spin_lock_irqsave(&stream->vbq_lock, lock_flags);
if (!list_empty(&stream->buf_queue) && !stream->curr_buf) {
stream->curr_buf =
list_first_entry(&stream->buf_queue,
struct rkispp_buffer, queue);
list_del(&stream->curr_buf->queue);
}
spin_unlock_irqrestore(&stream->vbq_lock, lock_flags);
get_stream_buf(stream);
update_mi(stream);
return 0;
}
@@ -2596,9 +2602,19 @@ static void fec_work_event(struct rkispp_device *dev,
dev->ispp_sdev.frm_sync_seq = seq;
}
/* check MB config and output buf beforce start, when MB connect to FEC
* MB update by FEC_FORCE_UPD
*/
stream = &vdev->stream[STREAM_MB];
if (stream->streaming && !stream->is_cfg)
secure_config_mb(stream);
if (stream->streaming) {
if (!stream->is_cfg) {
secure_config_mb(stream);
} else if (!stream->curr_buf) {
get_stream_buf(stream);
if (stream->curr_buf)
update_mi(stream);
}
}
if (!dev->hw_dev->is_single)
rkispp_update_regs(dev, RKISPP_FEC, RKISPP_FEC_CROP);
@@ -2877,9 +2893,31 @@ static void nr_work_event(struct rkispp_device *dev,
}
}
/* check MB config and output buf beforce start, when MB connect to SHARP
* MB update by OTHER_FORCE_UPD
*/
stream = &vdev->stream[STREAM_MB];
if (!is_fec_en && stream->streaming && !stream->is_cfg)
secure_config_mb(stream);
if (!is_fec_en && stream->streaming) {
if (!stream->is_cfg) {
secure_config_mb(stream);
} else if (!stream->curr_buf) {
get_stream_buf(stream);
if (stream->curr_buf)
update_mi(stream);
}
}
/* check SCL output buf beforce start
* SCL update by OTHER_FORCE_UPD
*/
for (val = STREAM_S0; val <= STREAM_S2; val++) {
stream = &vdev->stream[val];
if (!stream->streaming || !stream->is_cfg || stream->curr_buf)
continue;
get_stream_buf(stream);
if (stream->curr_buf)
update_mi(stream);
}
if (!dev->hw_dev->is_single) {
if (vdev->nr.cur_rd &&