hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/isp/isp_params_v21.c
....@@ -460,10 +460,9 @@
460460 {
461461 int i, j;
462462 unsigned int sram_addr;
463
- unsigned int data;
463
+ unsigned int data = rkisp_ioread32(params_vdev, ISP_LSC_CTRL);
464464
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)))
467466 return;
468467
469468 /* CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
....@@ -603,12 +602,13 @@
603602 * readback mode lsc lut AHB config to sram, once for single device,
604603 * need record to switch for multi-device.
605604 */
606
- if (!IS_HDR_RDBK(dev->rd_mode))
605
+ if (!IS_HDR_RDBK(dev->rd_mode)) {
607606 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);
611610 params_rec->others.lsc_cfg = *arg;
611
+ }
612612
613613 for (i = 0; i < 4; i++) {
614614 /* program x size tables */
....@@ -1178,6 +1178,12 @@
11781178 ISP2X_REG_WR_MASK);
11791179
11801180 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
+ }
11811187 value |= ISP2X_RAWAEBIG_WNDNUM_SET(wnd_num_idx);
11821188
11831189 if (arg->subwin_en[0])
....@@ -1327,8 +1333,8 @@
13271333 (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
13281334 (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
13291335 (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);
13321338 }
13331339 }
13341340
....@@ -2143,10 +2149,9 @@
21432149
21442150 if (params_vdev->dev->hw_dev->is_single)
21452151 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);
21502155
21512156 /* avoid to override the old enable value */
21522157 value = rkisp_ioread32(params_vdev, ISP21_RAWAWB_CTRL);
....@@ -2292,6 +2297,12 @@
22922297 return;
22932298
22942299 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
+ }
22952306 memset(weight15x15, 0, sizeof(weight15x15));
22962307 for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
22972308 for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
....@@ -2339,6 +2350,12 @@
23392350 }
23402351
23412352 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
+ }
23422359 /* avoid to override the old enable value */
23432360 hist_ctrl = rkisp_ioread32(params_vdev, addr + ISP_RAWHIST_BIG_CTRL);
23442361 hist_ctrl &= ISP2X_RAWHSTBIG_CTRL_EN_MASK;
....@@ -2370,8 +2387,7 @@
23702387
23712388 if (dev->hw_dev->is_single)
23722389 isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false);
2373
- else
2374
- *arg_rec = *arg;
2390
+ *arg_rec = *arg;
23752391 }
23762392
23772393 static void
....@@ -4339,7 +4355,7 @@
43394355 ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]);
43404356 if (ret) {
43414357 dev_err(dev, "can not alloc buffer\n");
4342
- goto err;
4358
+ goto err_3dlut;
43434359 }
43444360 }
43454361
....@@ -4350,7 +4366,7 @@
43504366 ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]);
43514367 if (ret) {
43524368 dev_err(dev, "can not alloc buffer\n");
4353
- goto err;
4369
+ goto err_lsclut;
43544370 }
43554371 }
43564372
....@@ -4359,15 +4375,16 @@
43594375 params_vdev->priv_ops = &rkisp_v21_isp_params_ops;
43604376 rkisp_clear_first_param_v2x(params_vdev);
43614377 return 0;
4362
-
4363
-err:
4364
- 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--)
43654384 rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]);
43664385
4367
- for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++)
4368
- rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]);
43694386 vfree(params_vdev->isp21_params);
4370
-
4387
+ kfree(priv_val);
43714388 return ret;
43724389 }
43734390