hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/isp/isp_params_v3x.c
....@@ -591,7 +591,7 @@
591591 struct isp3x_isp_params_cfg *params = params_vdev->isp3x_params;
592592
593593 isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, 0);
594
- if (params_vdev->dev->hw_dev->is_unite) {
594
+ if (params_vdev->dev->hw_dev->unite) {
595595 params++;
596596 isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, 1);
597597 }
....@@ -1223,7 +1223,7 @@
12231223
12241224 block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx];
12251225 value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs;
1226
- if (ispdev->hw_dev->is_unite)
1226
+ if (ispdev->hw_dev->unite)
12271227 width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
12281228 if (value + 1 > width)
12291229 block_hsize -= 1;
....@@ -1291,6 +1291,12 @@
12911291 value &= ISP3X_RAWAE_BIG_EN;
12921292
12931293 wnd_num_idx = arg->wnd_num;
1294
+ if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) {
1295
+ wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1;
1296
+ dev_err(params_vdev->dev->dev,
1297
+ "%s invalid wnd_num:%d, set to %d\n",
1298
+ __func__, arg->wnd_num, wnd_num_idx);
1299
+ }
12941300 value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx);
12951301
12961302 if (arg->subwin_en[0])
....@@ -1310,7 +1316,7 @@
13101316
13111317 block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx];
13121318 value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs;
1313
- if (ispdev->hw_dev->is_unite)
1319
+ if (ispdev->hw_dev->unite)
13141320 width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
13151321 if (value + 1 > width)
13161322 block_hsize -= 1;
....@@ -1430,13 +1436,12 @@
14301436 return;
14311437
14321438 for (i = 0; i < ISP3X_RAWAWB_WEIGHT_NUM / 5; i++) {
1433
- isp3_param_write(params_vdev,
1434
- (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 |
1435
- (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
1436
- (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
1437
- (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 |
1438
- (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24,
1439
- ISP3X_RAWAWB_WRAM_DATA_BASE, id);
1439
+ val = (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 |
1440
+ (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
1441
+ (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
1442
+ (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 |
1443
+ (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24;
1444
+ isp3_param_write_direct(params_vdev, val, ISP3X_RAWAWB_WRAM_DATA_BASE, id);
14401445 }
14411446 }
14421447
....@@ -2288,10 +2293,9 @@
22882293
22892294 if (params_vdev->dev->hw_dev->is_single)
22902295 isp_rawawb_cfg_sram(params_vdev, arg, false, id);
2291
- else
2292
- memcpy(arg_rec->sw_rawawb_wp_blk_wei_w,
2293
- arg->sw_rawawb_wp_blk_wei_w,
2294
- ISP3X_RAWAWB_WEIGHT_NUM);
2296
+ memcpy(arg_rec->sw_rawawb_wp_blk_wei_w,
2297
+ arg->sw_rawawb_wp_blk_wei_w,
2298
+ ISP3X_RAWAWB_WEIGHT_NUM);
22952299
22962300 /* avoid to override the old enable value */
22972301 value = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id);
....@@ -2426,6 +2430,12 @@
24262430 return;
24272431
24282432 wnd_num_idx = arg->wnd_num;
2433
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2434
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2435
+ dev_err(params_vdev->dev->dev,
2436
+ "%s invalid wnd_num:%d, set to %d\n",
2437
+ __func__, arg->wnd_num, wnd_num_idx);
2438
+ }
24292439 memset(weight15x15, 0, sizeof(weight15x15));
24302440 for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
24312441 for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
....@@ -2473,6 +2483,12 @@
24732483 }
24742484
24752485 wnd_num_idx = arg->wnd_num;
2486
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2487
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2488
+ dev_err(params_vdev->dev->dev,
2489
+ "%s invalid wnd_num:%d, set to %d\n",
2490
+ __func__, arg->wnd_num, wnd_num_idx);
2491
+ }
24762492 /* avoid to override the old enable value */
24772493 hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24782494 hist_ctrl &= ISP3X_RAWHIST_EN;
....@@ -2502,8 +2518,7 @@
25022518
25032519 if (dev->hw_dev->is_single)
25042520 isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false, id);
2505
- else
2506
- *arg_rec = *arg;
2521
+ *arg_rec = *arg;
25072522 }
25082523
25092524 static void
....@@ -2887,7 +2902,7 @@
28872902 value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], 0);
28882903 isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
28892904
2890
- if (dev->hw_dev->is_unite &&
2905
+ if (dev->hw_dev->unite &&
28912906 dev->hw_dev->is_single &&
28922907 ctrl & ISP3X_DHAZ_ENMUX)
28932908 ctrl |= ISP3X_SELF_FORCE_UPD;
....@@ -4095,22 +4110,6 @@
40954110 ops->rawawb_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAWB), id);
40964111 }
40974112
4098
-static __maybe_unused
4099
-void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev)
4100
-{
4101
- struct rkisp_isp_params_ops_v3x *ops =
4102
- (struct rkisp_isp_params_ops_v3x *)params_vdev->priv_ops;
4103
- struct rkisp_isp_params_val_v3x *priv_val =
4104
- (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val;
4105
-
4106
- if (params_vdev->dev->hw_dev->is_unite) {
4107
- ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD, 1);
4108
- ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD, 1);
4109
- }
4110
- ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD, 0);
4111
- ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD, 0);
4112
-}
4113
-
41144113 static
41154114 void rkisp_params_cfgsram_v3x(struct rkisp_isp_params_vdev *params_vdev)
41164115 {
....@@ -4121,7 +4120,7 @@
41214120 isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist2, 2, true, 0);
41224121 isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist3, 0, true, 0);
41234122 isp_rawawb_cfg_sram(params_vdev, &params->meas.rawawb, true, 0);
4124
- if (params_vdev->dev->hw_dev->is_unite) {
4123
+ if (params_vdev->dev->hw_dev->unite) {
41254124 params++;
41264125 isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, 1);
41274126 isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist1, 1, true, 1);
....@@ -4145,7 +4144,7 @@
41454144 module_en_update = new_params->module_en_update;
41464145 module_ens = new_params->module_ens;
41474146
4148
- for (id = 0; id <= ispdev->hw_dev->is_unite; id++) {
4147
+ for (id = 0; id <= !!ispdev->hw_dev->unite; id++) {
41494148 priv_val->buf_3dlut_idx[id] = 0;
41504149 for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) {
41514150 priv_val->buf_3dlut[id][i].is_need_vaddr = true;
....@@ -4162,10 +4161,10 @@
41624161 (module_ens & ISP3X_MODULE_BAY3D)) {
41634162 w = ALIGN(isp_sdev->in_crop.width, 16);
41644163 h = ALIGN(isp_sdev->in_crop.height, 16);
4165
- if (ispdev->hw_dev->is_unite)
4164
+ if (ispdev->hw_dev->unite)
41664165 w = ALIGN(isp_sdev->in_crop.width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL, 16);
41674166
4168
- for (id = 0; id <= ispdev->hw_dev->is_unite; id++) {
4167
+ for (id = 0; id <= !!ispdev->hw_dev->unite; id++) {
41694168 size = ALIGN((w + w / 8) * h * 2, 16);
41704169
41714170 priv_val->buf_3dnr_iir[id].size = size;
....@@ -4201,7 +4200,7 @@
42014200 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur[id]);
42024201 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds[id]);
42034202 }
4204
- id = ispdev->hw_dev->is_unite ? 1 : 0;
4203
+ id = ispdev->hw_dev->unite ? 1 : 0;
42054204 i = ISP3X_3DLUT_BUF_NUM;
42064205 err_3dlut:
42074206 for (; id >= 0; id--) {
....@@ -4256,7 +4255,7 @@
42564255 continue;
42574256 dev_warn(dev, "isp%d %dx%d over four vir isp max:%dx1536\n",
42584257 i, hw->isp_size[i].w, hw->isp_size[i].h,
4259
- hw->is_unite ? (2560 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 2560);
4258
+ hw->unite ? (2560 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 2560);
42604259 hw->is_multi_overflow = true;
42614260 goto multi_overflow;
42624261 }
....@@ -4298,7 +4297,7 @@
42984297 (hw->isp_size[idx1[0]].size > ISP3X_VIR2_MAX_SIZE)) {
42994298 dev_warn(dev, "isp%d %dx%d over three vir isp max:%dx1536\n",
43004299 idx1[0], hw->isp_size[idx1[0]].w, hw->isp_size[idx1[0]].h,
4301
- hw->is_unite ? (2560 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 2560);
4300
+ hw->unite ? (2560 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 2560);
43024301 hw->is_multi_overflow = true;
43034302 goto multi_overflow;
43044303 } else {
....@@ -4357,7 +4356,7 @@
43574356 hw->isp_size[idx1[k - 1]].size > (ISP3X_VIR4_MAX_SIZE + ISP3X_VIR2_MAX_SIZE)) {
43584357 dev_warn(dev, "isp%d %dx%d over two vir isp max:%dx2160\n",
43594358 idx1[k - 1], hw->isp_size[idx1[k - 1]].w, hw->isp_size[idx1[k - 1]].h,
4360
- hw->is_unite ? (3840 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 3840);
4359
+ hw->unite ? (3840 - RKMOUDLE_UNITE_EXTEND_PIXEL) * 2 : 3840);
43614360 hw->is_multi_overflow = true;
43624361 goto multi_overflow;
43634362 } else {
....@@ -4379,7 +4378,7 @@
43794378 ispdev->multi_mode = 0;
43804379 ispdev->multi_index = 0;
43814380 width = crop->width;
4382
- if (hw->is_unite)
4381
+ if (hw->unite)
43834382 width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
43844383 height = crop->height;
43854384 size = width * height;
....@@ -4416,7 +4415,7 @@
44164415 priv_val->lsc_en = 0;
44174416 priv_val->mge_en = 0;
44184417 priv_val->lut3d_en = 0;
4419
- if (hw->is_unite) {
4418
+ if (hw->unite) {
44204419 if (dev->is_bigmode)
44214420 rkisp_next_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0,
44224421 ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false);
....@@ -4432,11 +4431,6 @@
44324431 __isp_isr_other_config(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0);
44334432 __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0);
44344433 __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0);
4435
-
4436
- priv_val->cur_hdrmge = params_vdev->isp3x_params->others.hdrmge_cfg;
4437
- priv_val->cur_hdrdrc = params_vdev->isp3x_params->others.drc_cfg;
4438
- priv_val->last_hdrmge = priv_val->cur_hdrmge;
4439
- priv_val->last_hdrdrc = priv_val->cur_hdrdrc;
44404434 spin_unlock(&params_vdev->config_lock);
44414435 }
44424436
....@@ -4452,7 +4446,7 @@
44524446
44534447 static void rkisp_clear_first_param_v3x(struct rkisp_isp_params_vdev *params_vdev)
44544448 {
4455
- u32 mult = params_vdev->dev->hw_dev->is_unite ? ISP3_UNITE_MAX : 1;
4449
+ u32 mult = params_vdev->dev->hw_dev->unite ? ISP3_UNITE_MAX : 1;
44564450 u32 size = sizeof(struct isp3x_isp_params_cfg) * mult;
44574451
44584452 memset(params_vdev->isp3x_params, 0, size);
....@@ -4551,7 +4545,7 @@
45514545 rkisp_get_param_size_v3x(struct rkisp_isp_params_vdev *params_vdev,
45524546 unsigned int sizes[])
45534547 {
4554
- u32 mult = params_vdev->dev->hw_dev->is_unite ? ISP3_UNITE_MAX : 1;
4548
+ u32 mult = params_vdev->dev->hw_dev->unite ? ISP3_UNITE_MAX : 1;
45554549
45564550 sizes[0] = sizeof(struct isp3x_isp_params_cfg) * mult;
45574551 }
....@@ -4596,7 +4590,7 @@
45964590 {
45974591 struct rkisp_meshbuf_size *meshsize = size;
45984592
4599
- if (!params_vdev->dev->hw_dev->is_unite)
4593
+ if (!params_vdev->dev->hw_dev->unite)
46004594 meshsize->unite_isp_id = 0;
46014595 rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id, meshsize->unite_isp_id);
46024596 return rkisp_init_mesh_buf(params_vdev, meshsize);
....@@ -4608,7 +4602,7 @@
46084602 {
46094603 int id;
46104604
4611
- for (id = 0; id <= params_vdev->dev->hw_dev->is_unite; id++)
4605
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++)
46124606 rkisp_deinit_mesh_buf(params_vdev, module_id, id);
46134607 }
46144608
....@@ -4621,7 +4615,7 @@
46214615
46224616 priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val;
46234617 tasklet_disable(&priv_val->lsc_tasklet);
4624
- for (id = 0; id <= ispdev->hw_dev->is_unite; id++) {
4618
+ for (id = 0; id <= !!ispdev->hw_dev->unite; id++) {
46254619 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir[id]);
46264620 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur[id]);
46274621 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds[id]);
....@@ -4637,7 +4631,7 @@
46374631 {
46384632 int id;
46394633
4640
- for (id = 0; id <= params_vdev->dev->hw_dev->is_unite; id++) {
4634
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++) {
46414635 rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_LDCH, id);
46424636 rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_CAC, id);
46434637 }
....@@ -4652,7 +4646,7 @@
46524646
46534647 __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0);
46544648 __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0);
4655
- if (params_vdev->dev->hw_dev->is_unite) {
4649
+ if (params_vdev->dev->hw_dev->unite) {
46564650 __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 1);
46574651 __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 1);
46584652 }
....@@ -4725,7 +4719,7 @@
47254719 __isp_isr_other_en(params_vdev, new_params, type, 0);
47264720 __isp_isr_meas_en(params_vdev, new_params, type, 0);
47274721 new_params->module_cfg_update = 0;
4728
- if (hw_dev->is_unite) {
4722
+ if (hw_dev->unite) {
47294723 struct isp3x_isp_params_cfg *params = new_params + 1;
47304724
47314725 __isp_isr_meas_config(params_vdev, params, type, 1);
....@@ -4738,7 +4732,7 @@
47384732 if (new_params->module_cfg_update &
47394733 (ISP3X_MODULE_LDCH | ISP3X_MODULE_CAC)) {
47404734 module_data_abandon(params_vdev, new_params, 0);
4741
- if (hw_dev->is_unite)
4735
+ if (hw_dev->unite)
47424736 module_data_abandon(params_vdev, new_params, 1);
47434737 }
47444738 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
....@@ -4756,7 +4750,7 @@
47564750 goto unlock;
47574751
47584752 new_params = (struct isp3x_isp_params_cfg *)(cur_buf->vaddr[0]);
4759
- if (hw_dev->is_unite) {
4753
+ if (hw_dev->unite) {
47604754 __isp_isr_meas_config(params_vdev, new_params + 1, type, 1);
47614755 __isp_isr_other_config(params_vdev, new_params + 1, type, 1);
47624756 __isp_isr_other_en(params_vdev, new_params + 1, type, 1);
....@@ -4766,19 +4760,10 @@
47664760 __isp_isr_other_config(params_vdev, new_params, type, 0);
47674761 __isp_isr_other_en(params_vdev, new_params, type, 0);
47684762 __isp_isr_meas_en(params_vdev, new_params, type, 0);
4769
- if (!hw_dev->is_single && type != RKISP_PARAMS_SHD)
4770
- __isp_config_hdrshd(params_vdev);
47714763
47724764 if (type != RKISP_PARAMS_IMD) {
4773
- struct rkisp_isp_params_val_v3x *priv_val =
4774
- (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val;
4775
-
4776
- priv_val->last_hdrmge = priv_val->cur_hdrmge;
4777
- priv_val->last_hdrdrc = priv_val->cur_hdrdrc;
4778
- priv_val->cur_hdrmge = new_params->others.hdrmge_cfg;
4779
- priv_val->cur_hdrdrc = new_params->others.drc_cfg;
47804765 new_params->module_cfg_update = 0;
4781
- if (hw_dev->is_unite)
4766
+ if (hw_dev->unite)
47824767 (new_params++)->module_cfg_update = 0;
47834768 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
47844769 cur_buf = NULL;
....@@ -4812,7 +4797,7 @@
48124797 if (value & ISP3X_RAW3D_FST_FRAME)
48134798 rkisp_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1,
48144799 ISP3X_RAW3D_FST_FRAME, false);
4815
- if (hw_dev->is_unite) {
4800
+ if (hw_dev->unite) {
48164801 value = rkisp_next_read(dev, ISP3X_ISP_CTRL1, false);
48174802 if (value & ISP3X_YNR_FST_FRAME)
48184803 rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1,
....@@ -4887,7 +4872,7 @@
48874872 return -ENOMEM;
48884873
48894874 size = sizeof(struct isp3x_isp_params_cfg);
4890
- if (ispdev->hw_dev->is_unite)
4875
+ if (ispdev->hw_dev->unite)
48914876 size *= 2;
48924877 params_vdev->isp3x_params = vmalloc(size);
48934878 if (!params_vdev->isp3x_params) {