From bedbef8ad3e75a304af6361af235302bcc61d06b Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 14 May 2024 06:39:01 +0000 Subject: [PATCH] 修改内核路径 --- kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c | 81 +++++++++++++++++++++++----------------- 1 files changed, 46 insertions(+), 35 deletions(-) diff --git a/kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c b/kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c index 4343412..23072b4 100644 --- a/kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c +++ b/kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c @@ -555,11 +555,11 @@ bool is_check, u32 id) { struct rkisp_device *dev = params_vdev->dev; - u32 sram_addr, data, table; + u32 data = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); + u32 sram_addr, table; int i, j; - if (is_check && - !(isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id) & ISP_LSC_EN)) + if (is_check && (data & ISP3X_LSC_LUT_EN || !(data & ISP_LSC_EN))) return; table = isp3_param_read_direct(params_vdev, ISP3X_LSC_STATUS); @@ -643,12 +643,13 @@ * readback mode lsc lut AHB config to sram, once for single device, * need record to switch for multi-device. */ - if (!IS_HDR_RDBK(dev->rd_mode)) + if (!IS_HDR_RDBK(dev->rd_mode)) { isp_lsc_matrix_cfg_ddr(params_vdev, arg); - else if (dev->hw_dev->is_single) - isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id); - else + } else { + if (dev->hw_dev->is_single) + isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id); params_rec->others.lsc_cfg = *arg; + } } else { /* two lsc sram table */ params_rec->others.lsc_cfg = *arg; @@ -1435,6 +1436,12 @@ value &= ISP3X_RAWAE_BIG_EN; wnd_num_idx = arg->wnd_num; + if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) { + wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1; + dev_err(params_vdev->dev->dev, + "%s invalid wnd_num:%d, set to %d\n", + __func__, arg->wnd_num, wnd_num_idx); + } value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx); if (arg->subwin_en[0]) @@ -1576,20 +1583,19 @@ isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, const struct isp32_rawawb_meas_cfg *arg, bool is_check, u32 id) { - u32 i, val = ISP32_MODULE_EN; + u32 i, val = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id); - if (params_vdev->dev->isp_ver == ISP_V32 && is_check && - !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & val)) + if (params_vdev->dev->isp_ver != ISP_V32 || + (is_check && !(val & ISP32_MODULE_EN))) return; for (i = 0; i < ISP32_RAWAWB_WEIGHT_NUM / 5; i++) { - isp3_param_write_direct(params_vdev, - (arg->wp_blk_wei_w[5 * i] & 0x3f) | - (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | - (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | - (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | - (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, - ISP3X_RAWAWB_WRAM_DATA_BASE); + val = (arg->wp_blk_wei_w[5 * i] & 0x3f) | + (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | + (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | + (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | + (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24; + isp3_param_write_direct(params_vdev, val, ISP3X_RAWAWB_WRAM_DATA_BASE); } } @@ -2255,9 +2261,7 @@ if (params_vdev->dev->isp_ver == ISP_V32) { if (params_vdev->dev->hw_dev->is_single) isp_rawawb_cfg_sram(params_vdev, arg, false, id); - else - memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w, - ISP32_RAWAWB_WEIGHT_NUM); + memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w, ISP32_RAWAWB_WEIGHT_NUM); } else { for (i = 0; i < ISP32L_RAWAWB_WEIGHT_NUM; i++) isp3_param_write(params_vdev, arg->win_weight[i], @@ -2415,6 +2419,12 @@ return; wnd_num_idx = arg->wnd_num; + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; + dev_err(params_vdev->dev->dev, + "%s invalid wnd_num:%d, set to %d\n", + __func__, arg->wnd_num, wnd_num_idx); + } memset(weight15x15, 0, sizeof(weight15x15)); for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) { for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) { @@ -2465,6 +2475,12 @@ } wnd_num_idx = arg->wnd_num; + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; + dev_err(params_vdev->dev->dev, + "%s invalid wnd_num:%d, set to %d\n", + __func__, arg->wnd_num, wnd_num_idx); + } /* avoid to override the old enable value */ hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); hist_ctrl &= ISP3X_RAWHIST_EN; @@ -2503,8 +2519,7 @@ if (dev->hw_dev->is_single) isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false, id); - else - *arg_rec = *arg; + *arg_rec = *arg; } static void @@ -4269,8 +4284,6 @@ { struct rkisp_isp_params_ops_v32 *ops = (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops; - struct rkisp_isp_params_val_v32 *priv_val = - (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val; u64 module_cfg_update = new_params->module_cfg_update; params_vdev->cur_frame_id = new_params->frame_id; @@ -4314,9 +4327,7 @@ if ((module_cfg_update & ISP32_MODULE_RAWHIST3)) ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3, id); - if ((module_cfg_update & ISP32_MODULE_RAWAWB) || - ((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_AWB) && - !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & ISP32_RAWAWB_2DDR_PATH_EN))) + if ((module_cfg_update & ISP32_MODULE_RAWAWB)) ops->rawawb_config(params_vdev, &new_params->meas.rawawb, id); } @@ -5399,18 +5410,18 @@ else if (new_params->module_en_update || (new_params->module_cfg_update & ISP32_MODULE_FORCE)) { /* update en immediately */ - __isp_isr_meas_config(params_vdev, new_params, type, 0); - __isp_isr_other_config(params_vdev, new_params, type, 0); - __isp_isr_other_en(params_vdev, new_params, type, 0); - __isp_isr_meas_en(params_vdev, new_params, type, 0); + __isp_isr_meas_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0); + __isp_isr_other_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0); + __isp_isr_other_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0); + __isp_isr_meas_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0); new_params->module_cfg_update = 0; if (hw->unite) { struct isp32_isp_params_cfg *params = new_params + 1; - __isp_isr_meas_config(params_vdev, params, type, 1); - __isp_isr_other_config(params_vdev, params, type, 1); - __isp_isr_other_en(params_vdev, params, type, 1); - __isp_isr_meas_en(params_vdev, params, type, 1); + __isp_isr_meas_config(params_vdev, params, RKISP_PARAMS_ALL, 1); + __isp_isr_other_config(params_vdev, params, RKISP_PARAMS_ALL, 1); + __isp_isr_other_en(params_vdev, params, RKISP_PARAMS_ALL, 1); + __isp_isr_meas_en(params_vdev, params, RKISP_PARAMS_ALL, 1); params->module_cfg_update = 0; } } -- Gitblit v1.6.2