media: rockchip: isp: aiisp two buf

bay3d iir_buf->read->NN->write->aiisp_buf->isp

Change-Id: I5bfd944f84a9a01639bb9488926e41468b0173ec
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei 2024-03-15 09:40:54 +08:00
commit 1aef9b5255
4 changed files with 35 additions and 6 deletions

View file

@ -3346,7 +3346,10 @@ isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
value = priv_val->buf_3dnr_iir.dma_addr + value * id;
isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE, id);
isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE, id);
isp3_param_write(params_vdev, value, ISP39_AIISP_RD_BASE, id);
if (priv_val->buf_aiisp.mem_priv) {
value = priv_val->buf_aiisp.dma_addr + value * id;
isp3_param_write(params_vdev, value, ISP39_AIISP_RD_BASE, id);
}
if (priv_val->buf_gain.mem_priv) {
value = priv_val->gain_size;
isp3_param_write(params_vdev, value, ISP3X_MI_GAIN_WR_SIZE, id);
@ -4177,6 +4180,22 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
}
}
is_alloc = dev->is_aiisp_en ? true : false;
if (priv_val->buf_aiisp.mem_priv) {
if (val > priv_val->buf_aiisp.size)
rkisp_free_buffer(dev, &priv_val->buf_aiisp);
else
is_alloc = false;
}
if (is_alloc) {
priv_val->buf_aiisp.size = val;
ret = rkisp_alloc_buffer(dev, &priv_val->buf_aiisp);
if (ret) {
dev_err(dev->dev, "alloc aiisp buf fail:%d\n", ret);
goto free_3dnr_iir;
}
}
val = ALIGN(w * h / 4, 16);
priv_val->gain_size = val;
if (dev->unite_div > ISP_UNITE_DIV1)
@ -4193,7 +4212,7 @@ rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev,
ret = rkisp_alloc_buffer(dev, &priv_val->buf_gain);
if (ret) {
dev_err(dev->dev, "alloc gain buf fail:%d\n", ret);
goto free_3dnr_iir;
goto free_aiisp;
}
}
}
@ -4260,6 +4279,8 @@ free_3dnr_cur:
rkisp_free_buffer(dev, &priv_val->buf_3dnr_cur);
free_gain:
rkisp_free_buffer(dev, &priv_val->buf_gain);
free_aiisp:
rkisp_free_buffer(dev, &priv_val->buf_aiisp);
free_3dnr_iir:
rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
err_3dnr_iir:
@ -4821,6 +4842,12 @@ rkisp_params_get_bay3d_buffd_v39(struct rkisp_isp_params_vdev *params_vdev,
return;
bay3dbuf->u.v39.gain_fd = buf->dma_fd;
bay3dbuf->u.v39.gain_size = buf->size;
buf = &priv_val->buf_aiisp;
if (rkisp_buf_get_fd(params_vdev->dev, buf, true) < 0)
return;
bay3dbuf->u.v39.aiisp_fd = buf->dma_fd;
bay3dbuf->u.v39.aiisp_size = buf->size;
}
static void
@ -4833,6 +4860,7 @@ rkisp_params_stream_stop_v39(struct rkisp_isp_params_vdev *params_vdev)
priv_val = (struct rkisp_isp_params_val_v39 *)params_vdev->priv_val;
rkisp_free_buffer(ispdev, &priv_val->buf_frm);
rkisp_free_buffer(ispdev, &priv_val->buf_gain);
rkisp_free_buffer(ispdev, &priv_val->buf_aiisp);
rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir);
rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur);
for (i = 0; i < ISP39_LSC_LUT_BUF_NUM; i++)

View file

@ -178,6 +178,7 @@ struct rkisp_isp_params_val_v39 {
u32 bay3d_iir_size;
u32 bay3d_cur_size;
struct rkisp_dummy_buffer buf_gain;
struct rkisp_dummy_buffer buf_aiisp;
struct rkisp_dummy_buffer buf_3dnr_iir;
struct rkisp_dummy_buffer buf_3dnr_cur;

View file

@ -3651,10 +3651,8 @@ static int rkisp_set_aiisp_linecnt(struct rkisp_device *dev,
spin_lock_irqsave(&dev->aiisp_lock, lock_flags);
if (cfg->wr_linecnt)
en = true;
if (en != dev->is_aiisp_en) {
dev->is_aiisp_en = en;
dev->is_aiisp_upd = true;
}
dev->is_aiisp_en = en;
dev->is_aiisp_upd = true;
memcpy(&dev->aiisp_cfg, cfg, sizeof(*cfg));
spin_unlock_irqrestore(&dev->aiisp_lock, lock_flags);
return 0;

View file

@ -375,6 +375,8 @@ struct rkisp_bay3dbuf_info {
struct {
int gain_fd;
int gain_size;
int aiisp_fd;
int aiisp_size;
} v39;
} u;
} __attribute__ ((packed));