media: rockchip: ispp: reduce buf count

Change-Id: Ie719d3cee9c638335af0edf45aa4b59e6c601f7b
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2020-12-15 12:54:46 +08:00
committed by Tao Huang
parent 4ff60a36b2
commit d82eda7389
4 changed files with 18 additions and 29 deletions

View File

@@ -9,8 +9,9 @@
#include <linux/rkisp1-config.h>
#include <linux/rkispp-config.h>
#define RKISPP_BUF_MAX 5
#define RKISP_ISPP_BUF_MAX (RKISPP_BUF_MAX + (2 * (DEV_MAX - 1)))
#define RKISP_BUF_MAX 3
#define RKISPP_BUF_MAX 2
#define RKISP_ISPP_BUF_MAX (RKISP_BUF_MAX + RKISPP_BUF_MAX + (2 * (DEV_MAX - 1)))
#define RKISP_ISPP_REGBUF_NUM RKISPP_BUF_POOL_MAX
#define RKISP_ISP_SW_REG_SIZE 0x6000

View File

@@ -26,7 +26,7 @@ static void update_addr(struct rkispp_stats_vdev *stats_vdev)
}
if (!stats_vdev->next_buf) {
dummy_buf = &stats_vdev->dummy_buf;
dummy_buf = &stats_vdev->dev->hw_dev->dummy_buf;
if (!dummy_buf->mem_priv)
return;
@@ -255,7 +255,6 @@ static void rkispp_stats_vb2_stop_streaming(struct vb2_queue *vq)
stats_vdev->streamon = false;
destroy_buf_queue(stats_vdev, VB2_BUF_STATE_ERROR);
spin_unlock_irqrestore(&stats_vdev->irq_lock, flags);
rkispp_free_buffer(stats_vdev->dev, &stats_vdev->dummy_buf);
}
static int
@@ -264,16 +263,10 @@ rkispp_stats_vb2_start_streaming(struct vb2_queue *queue,
{
struct rkispp_stats_vdev *stats_vdev = queue->drv_priv;
unsigned long flags;
int ret;
if (stats_vdev->streamon)
return -EBUSY;
stats_vdev->dummy_buf.size = sizeof(struct rkispp_stats_buffer);
ret = rkispp_allow_buffer(stats_vdev->dev, &stats_vdev->dummy_buf);
if (ret < 0)
goto free_dummy_buf;
/* config first buf */
rkispp_stats_frame_end(stats_vdev);
@@ -282,10 +275,6 @@ rkispp_stats_vb2_start_streaming(struct vb2_queue *queue,
spin_unlock_irqrestore(&stats_vdev->irq_lock, flags);
return 0;
free_dummy_buf:
rkispp_free_buffer(stats_vdev->dev, &stats_vdev->dummy_buf);
return ret;
}
static struct vb2_ops rkispp_stats_vb2_ops = {

View File

@@ -40,7 +40,6 @@ struct rkispp_stats_vdev {
struct list_head stat;
struct rkispp_buffer *curr_buf;
struct rkispp_buffer *next_buf;
struct rkispp_dummy_buffer dummy_buf;
struct v4l2_format vdev_fmt;
bool streamon;
};

View File

@@ -713,7 +713,8 @@ static int nr_init_buf(struct rkispp_device *dev, u32 size)
}
buf = &vdev->nr.buf.tmp_yuv;
buf->size = size >> 2;
cnt = DIV_ROUND_UP(dev->ispp_sdev.out_fmt.width, 32);
buf->size = PAGE_ALIGN(cnt * 42 * 32);
ret = rkispp_allow_buffer(dev, buf);
if (ret)
goto err;
@@ -1541,11 +1542,9 @@ static int start_isp(struct rkispp_device *dev)
mutex_lock(&dev->hw_dev->dev_lock);
mode.work_mode = dev->isp_mode;
mode.buf_num = RKISPP_BUF_MAX;
if (dev->isp_mode & ISP_ISPP_QUICK)
mode.buf_num = ((vdev->module_ens & ISPP_MODULE_TNR_3TO1) ==
ISPP_MODULE_TNR_3TO1) ? 2 : 1;
mode.buf_num += 2 * (dev->hw_dev->dev_num - 1);
mode.buf_num = ((vdev->module_ens & ISPP_MODULE_TNR_3TO1) ==
ISPP_MODULE_TNR_3TO1) ? 2 : 1;
mode.buf_num += RKISP_BUF_MAX + 2 * (dev->hw_dev->dev_num - 1);
ret = v4l2_subdev_call(ispp_sdev->remote_sd, core, ioctl,
RKISP_ISPP_CMD_SET_MODE, &mode);
if (ret)
@@ -2706,6 +2705,15 @@ void rkispp_module_work_event(struct rkispp_device *dev,
{
bool is_fec_en = (dev->stream_vdev.module_ens & ISPP_MODULE_FEC);
if (dev->ispp_sdev.state != ISPP_STOP) {
if (module & ISPP_MODULE_TNR)
tnr_work_event(dev, buf_rd, buf_wr, is_isr);
else if (module & ISPP_MODULE_NR)
nr_work_event(dev, buf_rd, buf_wr, is_isr);
else
fec_work_event(dev, buf_rd, is_isr);
}
if (is_isr && !buf_rd && !buf_wr &&
((is_fec_en && module == ISPP_MODULE_FEC) ||
(!is_fec_en && module == ISPP_MODULE_NR))) {
@@ -2723,15 +2731,7 @@ void rkispp_module_work_event(struct rkispp_device *dev,
}
if (!dev->hw_dev->is_idle)
dev->hw_dev->is_idle = true;
return;
}
if (module & ISPP_MODULE_TNR)
tnr_work_event(dev, buf_rd, buf_wr, is_isr);
else if (module & ISPP_MODULE_NR)
nr_work_event(dev, buf_rd, buf_wr, is_isr);
else
fec_work_event(dev, buf_rd, is_isr);
}
void rkispp_isr(u32 mis_val, struct rkispp_device *dev)