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