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
....@@ -3740,19 +3756,6 @@
37403756 ops->rawaf_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAF));
37413757 }
37423758
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
-
37563759 static
37573760 void rkisp_params_cfgsram_v21(struct rkisp_isp_params_vdev *params_vdev)
37583761 {
....@@ -3998,11 +4001,6 @@
39984001 rkisp_set_bits(params_vdev->dev, ISP_CTRL1,
39994002 ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN,
40004003 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;
40064004 spin_unlock(&params_vdev->config_lock);
40074005 }
40084006
....@@ -4210,8 +4208,6 @@
42104208 {
42114209 struct isp21_isp_params_cfg *new_params = NULL;
42124210 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;
42154211
42164212 spin_lock(&params_vdev->config_lock);
42174213 if (!params_vdev->streamon)
....@@ -4257,17 +4253,8 @@
42574253 __isp_isr_other_config(params_vdev, new_params, type);
42584254 __isp_isr_other_en(params_vdev, new_params, type);
42594255 __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);
42624256
42634257 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;
42714258 new_params->module_cfg_update = 0;
42724259 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
42734260 cur_buf = NULL;
....@@ -4368,7 +4355,7 @@
43684355 ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]);
43694356 if (ret) {
43704357 dev_err(dev, "can not alloc buffer\n");
4371
- goto err;
4358
+ goto err_3dlut;
43724359 }
43734360 }
43744361
....@@ -4379,7 +4366,7 @@
43794366 ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]);
43804367 if (ret) {
43814368 dev_err(dev, "can not alloc buffer\n");
4382
- goto err;
4369
+ goto err_lsclut;
43834370 }
43844371 }
43854372
....@@ -4388,15 +4375,16 @@
43884375 params_vdev->priv_ops = &rkisp_v21_isp_params_ops;
43894376 rkisp_clear_first_param_v2x(params_vdev);
43904377 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--)
43944384 rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]);
43954385
4396
- for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++)
4397
- rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]);
43984386 vfree(params_vdev->isp21_params);
4399
-
4387
+ kfree(priv_val);
44004388 return ret;
44014389 }
44024390