| .. | .. |
|---|
| 555 | 555 | bool is_check, u32 id) |
|---|
| 556 | 556 | { |
|---|
| 557 | 557 | struct rkisp_device *dev = params_vdev->dev; |
|---|
| 558 | | - u32 sram_addr, data, table; |
|---|
| 558 | + u32 data = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); |
|---|
| 559 | + u32 sram_addr, table; |
|---|
| 559 | 560 | int i, j; |
|---|
| 560 | 561 | |
|---|
| 561 | | - if (is_check && |
|---|
| 562 | | - !(isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id) & ISP_LSC_EN)) |
|---|
| 562 | + if (is_check && (data & ISP3X_LSC_LUT_EN || !(data & ISP_LSC_EN))) |
|---|
| 563 | 563 | return; |
|---|
| 564 | 564 | |
|---|
| 565 | 565 | table = isp3_param_read_direct(params_vdev, ISP3X_LSC_STATUS); |
|---|
| .. | .. |
|---|
| 643 | 643 | * readback mode lsc lut AHB config to sram, once for single device, |
|---|
| 644 | 644 | * need record to switch for multi-device. |
|---|
| 645 | 645 | */ |
|---|
| 646 | | - if (!IS_HDR_RDBK(dev->rd_mode)) |
|---|
| 646 | + if (!IS_HDR_RDBK(dev->rd_mode)) { |
|---|
| 647 | 647 | isp_lsc_matrix_cfg_ddr(params_vdev, arg); |
|---|
| 648 | | - else if (dev->hw_dev->is_single) |
|---|
| 649 | | - isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id); |
|---|
| 650 | | - else |
|---|
| 648 | + } else { |
|---|
| 649 | + if (dev->hw_dev->is_single) |
|---|
| 650 | + isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id); |
|---|
| 651 | 651 | params_rec->others.lsc_cfg = *arg; |
|---|
| 652 | + } |
|---|
| 652 | 653 | } else { |
|---|
| 653 | 654 | /* two lsc sram table */ |
|---|
| 654 | 655 | params_rec->others.lsc_cfg = *arg; |
|---|
| .. | .. |
|---|
| 1435 | 1436 | value &= ISP3X_RAWAE_BIG_EN; |
|---|
| 1436 | 1437 | |
|---|
| 1437 | 1438 | wnd_num_idx = arg->wnd_num; |
|---|
| 1439 | + if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) { |
|---|
| 1440 | + wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1; |
|---|
| 1441 | + dev_err(params_vdev->dev->dev, |
|---|
| 1442 | + "%s invalid wnd_num:%d, set to %d\n", |
|---|
| 1443 | + __func__, arg->wnd_num, wnd_num_idx); |
|---|
| 1444 | + } |
|---|
| 1438 | 1445 | value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx); |
|---|
| 1439 | 1446 | |
|---|
| 1440 | 1447 | if (arg->subwin_en[0]) |
|---|
| .. | .. |
|---|
| 1576 | 1583 | isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, |
|---|
| 1577 | 1584 | const struct isp32_rawawb_meas_cfg *arg, bool is_check, u32 id) |
|---|
| 1578 | 1585 | { |
|---|
| 1579 | | - u32 i, val = ISP32_MODULE_EN; |
|---|
| 1586 | + u32 i, val = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id); |
|---|
| 1580 | 1587 | |
|---|
| 1581 | | - if (params_vdev->dev->isp_ver == ISP_V32 && is_check && |
|---|
| 1582 | | - !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & val)) |
|---|
| 1588 | + if (params_vdev->dev->isp_ver != ISP_V32 || |
|---|
| 1589 | + (is_check && !(val & ISP32_MODULE_EN))) |
|---|
| 1583 | 1590 | return; |
|---|
| 1584 | 1591 | |
|---|
| 1585 | 1592 | for (i = 0; i < ISP32_RAWAWB_WEIGHT_NUM / 5; i++) { |
|---|
| 1586 | | - isp3_param_write_direct(params_vdev, |
|---|
| 1587 | | - (arg->wp_blk_wei_w[5 * i] & 0x3f) | |
|---|
| 1588 | | - (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | |
|---|
| 1589 | | - (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | |
|---|
| 1590 | | - (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | |
|---|
| 1591 | | - (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, |
|---|
| 1592 | | - ISP3X_RAWAWB_WRAM_DATA_BASE); |
|---|
| 1593 | + val = (arg->wp_blk_wei_w[5 * i] & 0x3f) | |
|---|
| 1594 | + (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | |
|---|
| 1595 | + (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | |
|---|
| 1596 | + (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | |
|---|
| 1597 | + (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24; |
|---|
| 1598 | + isp3_param_write_direct(params_vdev, val, ISP3X_RAWAWB_WRAM_DATA_BASE); |
|---|
| 1593 | 1599 | } |
|---|
| 1594 | 1600 | } |
|---|
| 1595 | 1601 | |
|---|
| .. | .. |
|---|
| 2255 | 2261 | if (params_vdev->dev->isp_ver == ISP_V32) { |
|---|
| 2256 | 2262 | if (params_vdev->dev->hw_dev->is_single) |
|---|
| 2257 | 2263 | isp_rawawb_cfg_sram(params_vdev, arg, false, id); |
|---|
| 2258 | | - else |
|---|
| 2259 | | - memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w, |
|---|
| 2260 | | - ISP32_RAWAWB_WEIGHT_NUM); |
|---|
| 2264 | + memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w, ISP32_RAWAWB_WEIGHT_NUM); |
|---|
| 2261 | 2265 | } else { |
|---|
| 2262 | 2266 | for (i = 0; i < ISP32L_RAWAWB_WEIGHT_NUM; i++) |
|---|
| 2263 | 2267 | isp3_param_write(params_vdev, arg->win_weight[i], |
|---|
| .. | .. |
|---|
| 2415 | 2419 | return; |
|---|
| 2416 | 2420 | |
|---|
| 2417 | 2421 | wnd_num_idx = arg->wnd_num; |
|---|
| 2422 | + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { |
|---|
| 2423 | + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; |
|---|
| 2424 | + dev_err(params_vdev->dev->dev, |
|---|
| 2425 | + "%s invalid wnd_num:%d, set to %d\n", |
|---|
| 2426 | + __func__, arg->wnd_num, wnd_num_idx); |
|---|
| 2427 | + } |
|---|
| 2418 | 2428 | memset(weight15x15, 0, sizeof(weight15x15)); |
|---|
| 2419 | 2429 | for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) { |
|---|
| 2420 | 2430 | for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) { |
|---|
| .. | .. |
|---|
| 2465 | 2475 | } |
|---|
| 2466 | 2476 | |
|---|
| 2467 | 2477 | wnd_num_idx = arg->wnd_num; |
|---|
| 2478 | + if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) { |
|---|
| 2479 | + wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1; |
|---|
| 2480 | + dev_err(params_vdev->dev->dev, |
|---|
| 2481 | + "%s invalid wnd_num:%d, set to %d\n", |
|---|
| 2482 | + __func__, arg->wnd_num, wnd_num_idx); |
|---|
| 2483 | + } |
|---|
| 2468 | 2484 | /* avoid to override the old enable value */ |
|---|
| 2469 | 2485 | hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); |
|---|
| 2470 | 2486 | hist_ctrl &= ISP3X_RAWHIST_EN; |
|---|
| .. | .. |
|---|
| 2503 | 2519 | |
|---|
| 2504 | 2520 | if (dev->hw_dev->is_single) |
|---|
| 2505 | 2521 | isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false, id); |
|---|
| 2506 | | - else |
|---|
| 2507 | | - *arg_rec = *arg; |
|---|
| 2522 | + *arg_rec = *arg; |
|---|
| 2508 | 2523 | } |
|---|
| 2509 | 2524 | |
|---|
| 2510 | 2525 | static void |
|---|
| .. | .. |
|---|
| 4269 | 4284 | { |
|---|
| 4270 | 4285 | struct rkisp_isp_params_ops_v32 *ops = |
|---|
| 4271 | 4286 | (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops; |
|---|
| 4272 | | - struct rkisp_isp_params_val_v32 *priv_val = |
|---|
| 4273 | | - (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val; |
|---|
| 4274 | 4287 | u64 module_cfg_update = new_params->module_cfg_update; |
|---|
| 4275 | 4288 | |
|---|
| 4276 | 4289 | params_vdev->cur_frame_id = new_params->frame_id; |
|---|
| .. | .. |
|---|
| 4314 | 4327 | if ((module_cfg_update & ISP32_MODULE_RAWHIST3)) |
|---|
| 4315 | 4328 | ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3, id); |
|---|
| 4316 | 4329 | |
|---|
| 4317 | | - if ((module_cfg_update & ISP32_MODULE_RAWAWB) || |
|---|
| 4318 | | - ((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_AWB) && |
|---|
| 4319 | | - !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & ISP32_RAWAWB_2DDR_PATH_EN))) |
|---|
| 4330 | + if ((module_cfg_update & ISP32_MODULE_RAWAWB)) |
|---|
| 4320 | 4331 | ops->rawawb_config(params_vdev, &new_params->meas.rawawb, id); |
|---|
| 4321 | 4332 | } |
|---|
| 4322 | 4333 | |
|---|
| .. | .. |
|---|
| 5399 | 5410 | else if (new_params->module_en_update || |
|---|
| 5400 | 5411 | (new_params->module_cfg_update & ISP32_MODULE_FORCE)) { |
|---|
| 5401 | 5412 | /* update en immediately */ |
|---|
| 5402 | | - __isp_isr_meas_config(params_vdev, new_params, type, 0); |
|---|
| 5403 | | - __isp_isr_other_config(params_vdev, new_params, type, 0); |
|---|
| 5404 | | - __isp_isr_other_en(params_vdev, new_params, type, 0); |
|---|
| 5405 | | - __isp_isr_meas_en(params_vdev, new_params, type, 0); |
|---|
| 5413 | + __isp_isr_meas_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0); |
|---|
| 5414 | + __isp_isr_other_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0); |
|---|
| 5415 | + __isp_isr_other_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0); |
|---|
| 5416 | + __isp_isr_meas_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0); |
|---|
| 5406 | 5417 | new_params->module_cfg_update = 0; |
|---|
| 5407 | 5418 | if (hw->unite) { |
|---|
| 5408 | 5419 | struct isp32_isp_params_cfg *params = new_params + 1; |
|---|
| 5409 | 5420 | |
|---|
| 5410 | | - __isp_isr_meas_config(params_vdev, params, type, 1); |
|---|
| 5411 | | - __isp_isr_other_config(params_vdev, params, type, 1); |
|---|
| 5412 | | - __isp_isr_other_en(params_vdev, params, type, 1); |
|---|
| 5413 | | - __isp_isr_meas_en(params_vdev, params, type, 1); |
|---|
| 5421 | + __isp_isr_meas_config(params_vdev, params, RKISP_PARAMS_ALL, 1); |
|---|
| 5422 | + __isp_isr_other_config(params_vdev, params, RKISP_PARAMS_ALL, 1); |
|---|
| 5423 | + __isp_isr_other_en(params_vdev, params, RKISP_PARAMS_ALL, 1); |
|---|
| 5424 | + __isp_isr_meas_en(params_vdev, params, RKISP_PARAMS_ALL, 1); |
|---|
| 5414 | 5425 | params->module_cfg_update = 0; |
|---|
| 5415 | 5426 | } |
|---|
| 5416 | 5427 | } |
|---|