.. | .. |
---|
460 | 460 | { |
---|
461 | 461 | int i, j; |
---|
462 | 462 | unsigned int sram_addr; |
---|
463 | | - unsigned int data; |
---|
| 463 | + unsigned int data = rkisp_ioread32(params_vdev, ISP_LSC_CTRL); |
---|
464 | 464 | |
---|
465 | | - if (is_check && |
---|
466 | | - !(rkisp_ioread32(params_vdev, ISP_LSC_CTRL) & ISP_LSC_EN)) |
---|
| 465 | + if (is_check && (data & ISP_LSC_LUT_EN || !(data & ISP_LSC_EN))) |
---|
467 | 466 | return; |
---|
468 | 467 | |
---|
469 | 468 | /* CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */ |
---|
.. | .. |
---|
603 | 602 | * readback mode lsc lut AHB config to sram, once for single device, |
---|
604 | 603 | * need record to switch for multi-device. |
---|
605 | 604 | */ |
---|
606 | | - if (!IS_HDR_RDBK(dev->rd_mode)) |
---|
| 605 | + if (!IS_HDR_RDBK(dev->rd_mode)) { |
---|
607 | 606 | isp_lsc_matrix_cfg_ddr(params_vdev, arg); |
---|
608 | | - else if (dev->hw_dev->is_single) |
---|
609 | | - isp_lsc_matrix_cfg_sram(params_vdev, arg, false); |
---|
610 | | - else |
---|
| 607 | + } else { |
---|
| 608 | + if (dev->hw_dev->is_single) |
---|
| 609 | + isp_lsc_matrix_cfg_sram(params_vdev, arg, false); |
---|
611 | 610 | params_rec->others.lsc_cfg = *arg; |
---|
| 611 | + } |
---|
612 | 612 | |
---|
613 | 613 | for (i = 0; i < 4; i++) { |
---|
614 | 614 | /* program x size tables */ |
---|
.. | .. |
---|
1178 | 1178 | ISP2X_REG_WR_MASK); |
---|
1179 | 1179 | |
---|
1180 | 1180 | wnd_num_idx = arg->wnd_num; |
---|
| 1181 | + if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) { |
---|
| 1182 | + wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1; |
---|
| 1183 | + dev_err(params_vdev->dev->dev, |
---|
| 1184 | + "%s invalid wnd_num:%d, set to %d\n", |
---|
| 1185 | + __func__, arg->wnd_num, wnd_num_idx); |
---|
| 1186 | + } |
---|
1181 | 1187 | value |= ISP2X_RAWAEBIG_WNDNUM_SET(wnd_num_idx); |
---|
1182 | 1188 | |
---|
1183 | 1189 | if (arg->subwin_en[0]) |
---|
.. | .. |
---|
1327 | 1333 | (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | |
---|
1328 | 1334 | (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | |
---|
1329 | 1335 | (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | |
---|
1330 | | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, |
---|
1331 | | - rkisp_iowrite32(params_vdev, val, ISP21_RAWAWB_WRAM_DATA_BASE); |
---|
| 1336 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24; |
---|
| 1337 | + rkisp_write(params_vdev->dev, ISP21_RAWAWB_WRAM_DATA_BASE, val, true); |
---|
1332 | 1338 | } |
---|
1333 | 1339 | } |
---|
1334 | 1340 | |
---|
.. | .. |
---|
2143 | 2149 | |
---|
2144 | 2150 | if (params_vdev->dev->hw_dev->is_single) |
---|
2145 | 2151 | isp_rawawb_cfg_sram(params_vdev, arg, false); |
---|
2146 | | - else |
---|
2147 | | - memcpy(arg_rec->sw_rawawb_wp_blk_wei_w, |
---|
2148 | | - arg->sw_rawawb_wp_blk_wei_w, |
---|
2149 | | - ISP21_RAWAWB_WEIGHT_NUM); |
---|
| 2152 | + memcpy(arg_rec->sw_rawawb_wp_blk_wei_w, |
---|
| 2153 | + arg->sw_rawawb_wp_blk_wei_w, |
---|
| 2154 | + ISP21_RAWAWB_WEIGHT_NUM); |
---|
2150 | 2155 | |
---|
2151 | 2156 | /* avoid to override the old enable value */ |
---|
2152 | 2157 | value = rkisp_ioread32(params_vdev, ISP21_RAWAWB_CTRL); |
---|
.. | .. |
---|
2292 | 2297 | return; |
---|
2293 | 2298 | |
---|
2294 | 2299 | wnd_num_idx = arg->wnd_num; |
---|
| 2300 | + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { |
---|
| 2301 | + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; |
---|
| 2302 | + dev_err(params_vdev->dev->dev, |
---|
| 2303 | + "%s invalid wnd_num:%d, set to %d\n", |
---|
| 2304 | + __func__, arg->wnd_num, wnd_num_idx); |
---|
| 2305 | + } |
---|
2295 | 2306 | memset(weight15x15, 0, sizeof(weight15x15)); |
---|
2296 | 2307 | for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) { |
---|
2297 | 2308 | for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) { |
---|
.. | .. |
---|
2339 | 2350 | } |
---|
2340 | 2351 | |
---|
2341 | 2352 | wnd_num_idx = arg->wnd_num; |
---|
| 2353 | + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { |
---|
| 2354 | + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; |
---|
| 2355 | + dev_err(params_vdev->dev->dev, |
---|
| 2356 | + "%s invalid wnd_num:%d, set to %d\n", |
---|
| 2357 | + __func__, arg->wnd_num, wnd_num_idx); |
---|
| 2358 | + } |
---|
2342 | 2359 | /* avoid to override the old enable value */ |
---|
2343 | 2360 | hist_ctrl = rkisp_ioread32(params_vdev, addr + ISP_RAWHIST_BIG_CTRL); |
---|
2344 | 2361 | hist_ctrl &= ISP2X_RAWHSTBIG_CTRL_EN_MASK; |
---|
.. | .. |
---|
2370 | 2387 | |
---|
2371 | 2388 | if (dev->hw_dev->is_single) |
---|
2372 | 2389 | isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false); |
---|
2373 | | - else |
---|
2374 | | - *arg_rec = *arg; |
---|
| 2390 | + *arg_rec = *arg; |
---|
2375 | 2391 | } |
---|
2376 | 2392 | |
---|
2377 | 2393 | static void |
---|
.. | .. |
---|
3740 | 3756 | ops->rawaf_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAF)); |
---|
3741 | 3757 | } |
---|
3742 | 3758 | |
---|
3743 | | -static __maybe_unused |
---|
3744 | | -void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev) |
---|
3745 | | -{ |
---|
3746 | | - struct rkisp_isp_params_v21_ops *ops = |
---|
3747 | | - (struct rkisp_isp_params_v21_ops *)params_vdev->priv_ops; |
---|
3748 | | - struct rkisp_isp_params_val_v21 *priv_val = |
---|
3749 | | - (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; |
---|
3750 | | - |
---|
3751 | | - ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD); |
---|
3752 | | - |
---|
3753 | | - ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD); |
---|
3754 | | -} |
---|
3755 | | - |
---|
3756 | 3759 | static |
---|
3757 | 3760 | void rkisp_params_cfgsram_v21(struct rkisp_isp_params_vdev *params_vdev) |
---|
3758 | 3761 | { |
---|
.. | .. |
---|
3998 | 4001 | rkisp_set_bits(params_vdev->dev, ISP_CTRL1, |
---|
3999 | 4002 | ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN, |
---|
4000 | 4003 | ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN, false); |
---|
4001 | | - |
---|
4002 | | - priv_val->cur_hdrmge = params_vdev->isp21_params->others.hdrmge_cfg; |
---|
4003 | | - priv_val->cur_hdrdrc = params_vdev->isp21_params->others.drc_cfg; |
---|
4004 | | - priv_val->last_hdrmge = priv_val->cur_hdrmge; |
---|
4005 | | - priv_val->last_hdrdrc = priv_val->cur_hdrdrc; |
---|
4006 | 4004 | spin_unlock(¶ms_vdev->config_lock); |
---|
4007 | 4005 | } |
---|
4008 | 4006 | |
---|
.. | .. |
---|
4210 | 4208 | { |
---|
4211 | 4209 | struct isp21_isp_params_cfg *new_params = NULL; |
---|
4212 | 4210 | struct rkisp_buffer *cur_buf = params_vdev->cur_buf; |
---|
4213 | | - struct rkisp_device *dev = params_vdev->dev; |
---|
4214 | | - struct rkisp_hw_dev *hw_dev = dev->hw_dev; |
---|
4215 | 4211 | |
---|
4216 | 4212 | spin_lock(¶ms_vdev->config_lock); |
---|
4217 | 4213 | if (!params_vdev->streamon) |
---|
.. | .. |
---|
4257 | 4253 | __isp_isr_other_config(params_vdev, new_params, type); |
---|
4258 | 4254 | __isp_isr_other_en(params_vdev, new_params, type); |
---|
4259 | 4255 | __isp_isr_meas_en(params_vdev, new_params, type); |
---|
4260 | | - if (!hw_dev->is_single && type != RKISP_PARAMS_SHD) |
---|
4261 | | - __isp_config_hdrshd(params_vdev); |
---|
4262 | 4256 | |
---|
4263 | 4257 | if (type != RKISP_PARAMS_IMD) { |
---|
4264 | | - struct rkisp_isp_params_val_v21 *priv_val = |
---|
4265 | | - (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; |
---|
4266 | | - |
---|
4267 | | - priv_val->last_hdrmge = priv_val->cur_hdrmge; |
---|
4268 | | - priv_val->last_hdrdrc = priv_val->cur_hdrdrc; |
---|
4269 | | - priv_val->cur_hdrmge = new_params->others.hdrmge_cfg; |
---|
4270 | | - priv_val->cur_hdrdrc = new_params->others.drc_cfg; |
---|
4271 | 4258 | new_params->module_cfg_update = 0; |
---|
4272 | 4259 | vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); |
---|
4273 | 4260 | cur_buf = NULL; |
---|
.. | .. |
---|
4368 | 4355 | ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); |
---|
4369 | 4356 | if (ret) { |
---|
4370 | 4357 | dev_err(dev, "can not alloc buffer\n"); |
---|
4371 | | - goto err; |
---|
| 4358 | + goto err_3dlut; |
---|
4372 | 4359 | } |
---|
4373 | 4360 | } |
---|
4374 | 4361 | |
---|
.. | .. |
---|
4379 | 4366 | ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); |
---|
4380 | 4367 | if (ret) { |
---|
4381 | 4368 | dev_err(dev, "can not alloc buffer\n"); |
---|
4382 | | - goto err; |
---|
| 4369 | + goto err_lsclut; |
---|
4383 | 4370 | } |
---|
4384 | 4371 | } |
---|
4385 | 4372 | |
---|
.. | .. |
---|
4388 | 4375 | params_vdev->priv_ops = &rkisp_v21_isp_params_ops; |
---|
4389 | 4376 | rkisp_clear_first_param_v2x(params_vdev); |
---|
4390 | 4377 | return 0; |
---|
4391 | | - |
---|
4392 | | -err: |
---|
4393 | | - for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) |
---|
| 4378 | +err_lsclut: |
---|
| 4379 | + for (i -= 1; i >= 0; i--) |
---|
| 4380 | + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); |
---|
| 4381 | + i = RKISP_PARAM_3DLUT_BUF_NUM; |
---|
| 4382 | +err_3dlut: |
---|
| 4383 | + for (i -= 1; i >= 0; i--) |
---|
4394 | 4384 | rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); |
---|
4395 | 4385 | |
---|
4396 | | - for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) |
---|
4397 | | - rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); |
---|
4398 | 4386 | vfree(params_vdev->isp21_params); |
---|
4399 | | - |
---|
| 4387 | + kfree(priv_val); |
---|
4400 | 4388 | return ret; |
---|
4401 | 4389 | } |
---|
4402 | 4390 | |
---|