diff --git a/linux-5.10/rk3568_patch/kernel.patch b/linux-5.10/rk3568_patch/kernel.patch index ec91b4cf8ebe9bf925ddda33db2ab645f31a3235..b0c67f8511b85388b0fce44c0f219f587a830348 100755 --- a/linux-5.10/rk3568_patch/kernel.patch +++ b/linux-5.10/rk3568_patch/kernel.patch @@ -838747,7 +838747,7 @@ new file mode 100755 index 000000000..f2b8b9cd8 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.c -@@ -0,0 +1,4192 @@ +@@ -0,0 +1,4195 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2020 Rockchip Electronics Co., Ltd. */ + @@ -842475,68 +842475,33 @@ index 000000000..f2b8b9cd8 + isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist3, 0, true); +} + -+static int -+rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev, -+ const struct isp21_isp_params_cfg *new_params) ++static void ++rkisp_alloc_bay3d_buf(struct rkisp_isp_params_vdev *params_vdev, ++ const struct isp21_isp_params_cfg *new_params) +{ + struct rkisp_device *ispdev = params_vdev->dev; + struct rkisp_isp_subdev *isp_sdev = &ispdev->isp_sdev; + struct rkisp_isp_params_val_v21 *priv_val; + u64 module_en_update, module_ens; + u32 w, h, size; -+ int ret, i; ++ int ret; + -+ priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; + module_en_update = new_params->module_en_update; + module_ens = new_params->module_ens; + -+ priv_val->buf_3dlut_idx = 0; -+ for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) { -+ priv_val->buf_3dlut[i].is_need_vaddr = true; -+ priv_val->buf_3dlut[i].size = RKISP_PARAM_3DLUT_BUF_SIZE; -+ ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_3dlut[i]); -+ if (ret) { -+ dev_err(ispdev->dev, "can not alloc buffer\n"); -+ goto err_3dlut; -+ } -+ } -+ -+ priv_val->buf_lsclut_idx = 0; -+ for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) { -+ priv_val->buf_lsclut[i].is_need_vaddr = true; -+ priv_val->buf_lsclut[i].size = RKISP_PARAM_LSC_LUT_BUF_SIZE; -+ ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_lsclut[i]); -+ if (ret) { -+ dev_err(ispdev->dev, "can not alloc buffer\n"); -+ goto err_lsclut; -+ } -+ } -+ + if ((module_en_update & ISP2X_MODULE_BAY3D) && + (module_ens & ISP2X_MODULE_BAY3D)) { + w = isp_sdev->in_crop.width; + h = isp_sdev->in_crop.height; + size = 2 * ALIGN((ALIGN(w, 16) + (w + 15) / 8) * h, 16); ++ priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; ++ rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); ++ + priv_val->buf_3dnr.size = size; + ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr); -+ if (ret) { ++ if (ret) + dev_err(ispdev->dev, "can not alloc bay3d buffer\n"); -+ goto err_bay3d; -+ } + } -+ -+ return 0; -+err_bay3d: -+ rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); -+ i = RKISP_PARAM_LSC_LUT_BUF_NUM; -+err_lsclut: -+ for (i -= 1; i >= 0; i--) -+ rkisp_free_buffer(ispdev, &priv_val->buf_lsclut[i]); -+ i = RKISP_PARAM_3DLUT_BUF_NUM; -+err_3dlut: -+ for (i -= 1; i >= 0; i--) -+ rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]); -+ return ret; +} + +/* Not called when the camera active, thus not isr protection. */ @@ -842551,7 +842516,7 @@ index 000000000..f2b8b9cd8 + u32 width = hw->max_in.w ? hw->max_in.w : out_crop->width; + u32 size = hw->max_in.w ? hw->max_in.w * hw->max_in.h : isp_param_get_insize(params_vdev); + -+ rkisp_alloc_internal_buf(params_vdev, params_vdev->isp21_params); ++ rkisp_alloc_bay3d_buf(params_vdev, params_vdev->isp21_params); + spin_lock(¶ms_vdev->config_lock); + /* override the default things */ + if (!params_vdev->isp21_params->module_cfg_update && @@ -842699,16 +842664,9 @@ index 000000000..f2b8b9cd8 +{ + struct rkisp_device *ispdev = params_vdev->dev; + struct rkisp_isp_params_val_v21 *priv_val; -+ int i; + + priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); -+ for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) -+ rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]); -+ for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) -+ rkisp_free_buffer(ispdev, &priv_val->buf_lsclut[i]); -+ for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) -+ rkisp_free_buffer(ispdev, &ispdev->stats_vdev.stats_buf[i]); +} + +static void @@ -842913,7 +842871,9 @@ index 000000000..f2b8b9cd8 + +int rkisp_init_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) +{ ++ struct device *dev = params_vdev->dev->dev; + struct rkisp_isp_params_val_v21 *priv_val; ++ int i, ret; + + priv_val = kzalloc(sizeof(*priv_val), GFP_KERNEL); + if (!priv_val) @@ -842924,22 +842884,65 @@ index 000000000..f2b8b9cd8 + kfree(priv_val); + return -ENOMEM; + } ++ priv_val->buf_3dlut_idx = 0; ++ for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) { ++ priv_val->buf_3dlut[i].is_need_vaddr = true; ++ priv_val->buf_3dlut[i].size = RKISP_PARAM_3DLUT_BUF_SIZE; ++ ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); ++ if (ret) { ++ dev_err(dev, "can not alloc buffer\n"); ++ goto err; ++ } ++ } ++ ++ priv_val->buf_lsclut_idx = 0; ++ for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) { ++ priv_val->buf_lsclut[i].is_need_vaddr = true; ++ priv_val->buf_lsclut[i].size = RKISP_PARAM_LSC_LUT_BUF_SIZE; ++ ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); ++ if (ret) { ++ dev_err(dev, "can not alloc buffer\n"); ++ goto err; ++ } ++ } + + params_vdev->priv_val = (void *)priv_val; + params_vdev->ops = &rkisp_isp_params_ops_tbl; + params_vdev->priv_ops = &rkisp_v21_isp_params_ops; + rkisp_clear_first_param_v2x(params_vdev); + return 0; ++ ++ err: ++ for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) ++ rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); ++ ++ for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) ++ rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); ++ vfree(params_vdev->isp21_params); ++ ++ return ret; +} + +void rkisp_uninit_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) +{ -+ if (params_vdev->isp21_params) -+ vfree(params_vdev->isp21_params); -+ kfree(params_vdev->priv_val); ++ struct rkisp_isp_params_val_v21 *priv_val; ++ int i; ++ ++ priv_val = params_vdev->priv_val; ++ if (!priv_val) ++ return; ++ ++ rkisp_deinit_ldch_buf(params_vdev); ++ for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) ++ rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); ++ ++ for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) ++ rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); ++ vfree(params_vdev->isp21_params); ++ kfree(priv_val); ++ + params_vdev->priv_val = NULL; +} -+ diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.h b/drivers/media/platform/rockchip/isp/isp_params_v21.h new file mode 100755 index 000000000..860b9156f @@ -853821,7 +853824,7 @@ new file mode 100755 index 000000000..d6946c9fe --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v21.c -@@ -0,0 +1,1169 @@ +@@ -0,0 +1,1166 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2020 Rockchip Electronics Co., Ltd. */ + @@ -854942,19 +854945,11 @@ index 000000000..d6946c9fe + +void rkisp_stats_first_ddr_config_v21(struct rkisp_isp_stats_vdev *stats_vdev) +{ -+ int i; -+ + stats_vdev->rd_stats_from_ddr = false; + stats_vdev->priv_ops = &rkisp_stats_reg_ops_v21; + -+ if (!IS_HDR_RDBK(stats_vdev->dev->hdr.op_mode)) { -+ for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) { -+ stats_vdev->stats_buf[i].is_need_vaddr = true; -+ stats_vdev->stats_buf[i].size = RKISP_RD_STATS_BUF_SIZE; -+ if (rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i])) -+ goto err; -+ } -+ ++ if (!IS_HDR_RDBK(stats_vdev->dev->hdr.op_mode) && ++ stats_vdev->stats_buf[0].mem_priv) { + stats_vdev->priv_ops = &rkisp_stats_ddr_ops_v21; + stats_vdev->rd_stats_from_ddr = true; + stats_vdev->rd_buf_idx = 0; @@ -854967,15 +854962,12 @@ index 000000000..d6946c9fe + rkisp_set_bits(stats_vdev->dev, CTRL_SWS_CFG, SW_3A_DDR_WRITE_EN, + SW_3A_DDR_WRITE_EN, false); + } -+ return; -+err: -+ for (i -= 1; i >= 0; i--) -+ rkisp_free_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); -+ dev_err(stats_vdev->dev->dev, "alloc stats ddr buf fail\n"); +} + +void rkisp_init_stats_vdev_v21(struct rkisp_isp_stats_vdev *stats_vdev) +{ ++ int i; ++ + stats_vdev->vdev_fmt.fmt.meta.dataformat = + V4L2_META_FMT_RK_ISP1_STAT_3A; + stats_vdev->vdev_fmt.fmt.meta.buffersize = @@ -854984,13 +854976,21 @@ index 000000000..d6946c9fe + stats_vdev->ops = &rkisp_isp_stats_ops_tbl; + stats_vdev->priv_ops = &rkisp_stats_reg_ops_v21; + stats_vdev->rd_stats_from_ddr = false; ++ ++ for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) { ++ stats_vdev->stats_buf[i].is_need_vaddr = true; ++ stats_vdev->stats_buf[i].size = RKISP_RD_STATS_BUF_SIZE; ++ rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); ++ } +} + +void rkisp_uninit_stats_vdev_v21(struct rkisp_isp_stats_vdev *stats_vdev) +{ ++ int i; + ++ for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) ++ rkisp_free_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); +} -+ diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v21.h b/drivers/media/platform/rockchip/isp/isp_stats_v21.h new file mode 100755 index 000000000..c1dba6c65