hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/isp/isp_params_v2x.c
....@@ -461,6 +461,12 @@
461461 };
462462
463463 wnd_num_idx = arg->wnd_num;
464
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
465
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
466
+ dev_err(params_vdev->dev->dev,
467
+ "%s invalid wnd_num:%d, set to %d\n",
468
+ __func__, arg->wnd_num, wnd_num_idx);
469
+ }
464470 for (i = 0; i < ISP2X_SIHIST_WIN_NUM; i++) {
465471 /* avoid to override the old enable value */
466472 hist_ctrl = rkisp_ioread32(params_vdev, ISP_HIST_HIST_CTRL + i * 0x10);
....@@ -536,10 +542,9 @@
536542 {
537543 int i, j;
538544 unsigned int sram_addr;
539
- unsigned int data;
545
+ unsigned int data = rkisp_ioread32(params_vdev, ISP_LSC_CTRL);
540546
541
- if (is_check &&
542
- !(rkisp_ioread32(params_vdev, ISP_LSC_CTRL) & ISP_LSC_EN))
547
+ if (is_check && (data & ISP_LSC_LUT_EN || !(data & ISP_LSC_EN)))
543548 return;
544549
545550 /* CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
....@@ -679,12 +684,13 @@
679684 * readback mode lsc lut AHB config to sram, once for single device,
680685 * need record to switch for multi-device.
681686 */
682
- if (!IS_HDR_RDBK(dev->rd_mode))
687
+ if (!IS_HDR_RDBK(dev->rd_mode)) {
683688 isp_lsc_matrix_cfg_ddr(params_vdev, arg);
684
- else if (dev->hw_dev->is_single)
685
- isp_lsc_matrix_cfg_sram(params_vdev, arg, false);
686
- else
689
+ } else {
687690 params_rec->others.lsc_cfg = *arg;
691
+ if (dev->hw_dev->is_single)
692
+ isp_lsc_matrix_cfg_sram(params_vdev, arg, false);
693
+ }
688694
689695 for (i = 0; i < 4; i++) {
690696 /* program x size tables */
....@@ -1758,6 +1764,12 @@
17581764 ISP2X_REG_WR_MASK);
17591765
17601766 wnd_num_idx = arg->wnd_num;
1767
+ if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) {
1768
+ wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1;
1769
+ dev_err(params_vdev->dev->dev,
1770
+ "%s invalid wnd_num:%d, set to %d\n",
1771
+ __func__, arg->wnd_num, wnd_num_idx);
1772
+ }
17611773 value |= ISP2X_RAWAEBIG_WNDNUM_SET(wnd_num_idx);
17621774
17631775 if (arg->subwin_en[0])
....@@ -2831,6 +2843,12 @@
28312843 return;
28322844
28332845 wnd_num_idx = arg->wnd_num;
2846
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2847
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2848
+ dev_err(params_vdev->dev->dev,
2849
+ "%s invalid wnd_num:%d, set to %d\n",
2850
+ __func__, arg->wnd_num, wnd_num_idx);
2851
+ }
28342852 memset(weight15x15, 0, sizeof(weight15x15));
28352853 for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
28362854 for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
....@@ -2879,6 +2897,12 @@
28792897 }
28802898
28812899 wnd_num_idx = arg->wnd_num;
2900
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2901
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2902
+ dev_err(params_vdev->dev->dev,
2903
+ "%s invalid wnd_num:%d, set to %d\n",
2904
+ __func__, arg->wnd_num, wnd_num_idx);
2905
+ }
28822906 /* avoid to override the old enable value */
28832907 hist_ctrl = rkisp_ioread32(params_vdev, addr + ISP_RAWHIST_BIG_CTRL);
28842908 hist_ctrl &= ISP2X_RAWHSTBIG_CTRL_EN_MASK;
....@@ -2910,8 +2934,7 @@
29102934
29112935 if (dev->hw_dev->is_single)
29122936 isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false);
2913
- else
2914
- *arg_rec = *arg;
2937
+ *arg_rec = *arg;
29152938 }
29162939
29172940 static void
....@@ -4190,14 +4213,21 @@
41904213 }
41914214 }
41924215
4193
-static void
4216
+static int
41944217 rkisp_params_set_ldchbuf_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
41954218 void *size)
41964219 {
41974220 struct rkisp_ldchbuf_size *ldchsize = size;
41984221
41994222 rkisp_deinit_ldch_buf(params_vdev);
4200
- rkisp_init_ldch_buf(params_vdev, ldchsize);
4223
+ return rkisp_init_ldch_buf(params_vdev, ldchsize);
4224
+}
4225
+
4226
+static void
4227
+rkisp_params_free_meshbuf_v2x(struct rkisp_isp_params_vdev *params_vdev,
4228
+ u64 module_id)
4229
+{
4230
+ rkisp_deinit_ldch_buf(params_vdev);
42014231 }
42024232
42034233 static void
....@@ -4383,6 +4413,7 @@
43834413 .param_cfgsram = rkisp_params_cfgsram_v2x,
43844414 .get_meshbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
43854415 .set_meshbuf_size = rkisp_params_set_ldchbuf_size_v2x,
4416
+ .free_meshbuf = rkisp_params_free_meshbuf_v2x,
43864417 .fop_release = rkisp_params_fop_release_v2x,
43874418 };
43884419