Browse Source

Merge "msm: camera: ife: Add support for camera v680 bus" into camera-kernel.lnx.4.0

Camera Software Integration 4 years ago
parent
commit
370725a4b0

+ 14 - 0
drivers/cam_isp/cam_isp_context.c

@@ -569,6 +569,20 @@ static const char *__cam_isp_resource_handle_id_to_type(
 		return "RDI_RD";
 	case CAM_ISP_IFE_OUT_RES_LCR:
 		return "LCR";
+	case CAM_ISP_IFE_OUT_RES_AWB_BFW:
+		return "AWB_BFW";
+	case CAM_ISP_IFE_OUT_RES_2PD_STATS:
+		return "2PD_STATS";
+	case CAM_ISP_IFE_OUT_RES_STATS_AEC_BE:
+		return "STATS_AEC_BE";
+	case CAM_ISP_IFE_OUT_RES_LTM_STATS:
+		return "LTM_STATS";
+	case CAM_ISP_IFE_OUT_RES_STATS_GTM_BHIST:
+		return "STATS_GTM_BHIST";
+	case CAM_ISP_IFE_LITE_OUT_RES_STATS_BE:
+		return "STATS_BE";
+	case CAM_ISP_IFE_LITE_OUT_RES_GAMMA:
+		return "GAMMA";
 	default:
 		return "CAM_ISP_Invalid_Resource_Type";
 	}

+ 2 - 0
drivers/cam_isp/isp_hw_mgr/isp_hw/include/cam_vfe_hw_intf.h

@@ -190,6 +190,7 @@ struct cam_vfe_hw_vfe_in_acquire_args {
  *                           with this resource.
  * @priv:                    Context data
  * @event_cb:                Callback function to hw mgr in case of hw events
+ * @buf_done_controller:     Buf done controller for isp
  * @vfe_out:                 Acquire args for VFE_OUT
  * @vfe_bus_rd               Acquire args for VFE_BUS_READ
  * @vfe_in:                  Acquire args for VFE_IN
@@ -199,6 +200,7 @@ struct cam_vfe_acquire_args {
 	void                                *tasklet;
 	void                                *priv;
 	cam_hw_mgr_event_cb_func             event_cb;
+	void                                *buf_done_controller;
 	union {
 		struct cam_vfe_hw_vfe_out_acquire_args     vfe_out;
 		struct cam_vfe_hw_vfe_bus_rd_acquire_args  vfe_bus_rd;

+ 8 - 1
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.h

@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  */
 
 #ifndef _CAM_VFE_CORE_H_
@@ -12,6 +12,13 @@
 #include "cam_vfe_bus.h"
 #include "cam_vfe_hw_intf.h"
 
+#define CAM_VFE_HW_IRQ_CAP_SOF             0x1
+#define CAM_VFE_HW_IRQ_CAP_EPOCH_0         0x2
+#define CAM_VFE_HW_IRQ_CAP_EPOCH_1         0x4
+#define CAM_VFE_HW_IRQ_CAP_RUP             0x8
+#define CAM_VFE_HW_IRQ_CAP_BUF_DONE        0x10
+#define CAM_VFE_HW_IRQ_CAP_EOF             0x20
+
 struct cam_vfe_hw_info {
 	struct cam_irq_controller_reg_info *irq_reg_info;
 

+ 99 - 1
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe480.h

@@ -412,7 +412,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.global_clear_bitmask     = 0x00000001,
 		},
 	},
-	.num_client = CAM_VFE_BUS_VER3_MAX_CLIENTS,
+	.num_client = CAM_VFE_BUS_VER3_480_MAX_CLIENTS,
 	.bus_client_reg = {
 		/* BUS Client 0 FULL Y */
 		{
@@ -1177,6 +1177,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.mid[0]        = 8,
+			.num_wm        = 1,
+			.wm_idx        = {
+				23,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
@@ -1184,6 +1188,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_4,
 			.mid[0]        = 9,
+			.num_wm        = 1,
+			.wm_idx        = {
+				24,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
@@ -1191,6 +1199,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_5,
 			.mid[0]        = 10,
+			.num_wm        = 1,
+			.wm_idx        = {
+				25,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FULL,
@@ -1201,6 +1213,11 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.mid[1]        = 33,
 			.mid[2]        = 34,
 			.mid[3]        = 35,
+			.num_wm        = 2,
+			.wm_idx        = {
+				0,
+				1,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS4,
@@ -1208,6 +1225,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 16,
+			.num_wm        = 1,
+			.wm_idx        = {
+				2,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS16,
@@ -1215,6 +1236,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 17,
+			.num_wm        = 1,
+			.wm_idx        = {
+				3,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RAW_DUMP,
@@ -1223,6 +1248,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 11,
 			.mid[1]        = 12,
+			.num_wm        = 1,
+			.wm_idx        = {
+				10,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FD,
@@ -1232,6 +1261,11 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.mid[0]        = 20,
 			.mid[1]        = 21,
 			.mid[2]        = 22,
+			.num_wm        = 2,
+			.wm_idx        = {
+				8,
+				9,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_PDAF,
@@ -1240,6 +1274,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 25,
 			.mid[1]        = 26,
+			.num_wm        = 1,
+			.wm_idx        = {
+				11,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_HDR_BE,
@@ -1247,6 +1285,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 40,
+			.num_wm        = 1,
+			.wm_idx        = {
+				12,
+			}
 		},
 		{
 			.vfe_out_type  =
@@ -1255,6 +1297,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 41,
+			.num_wm        = 1,
+			.wm_idx        = {
+				13,
+			}
 		},
 		{
 			.vfe_out_type  =
@@ -1263,6 +1309,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 42,
+			.num_wm        = 1,
+			.wm_idx        = {
+				14,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BF,
@@ -1270,6 +1320,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 43,
+			.num_wm        = 1,
+			.wm_idx        = {
+				20,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_AWB_BG,
@@ -1277,6 +1331,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]         = 44,
+			.num_wm        = 1,
+			.wm_idx        = {
+				15,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BHIST,
@@ -1284,6 +1342,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 45,
+			.num_wm        = 1,
+			.wm_idx        = {
+				16,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_RS,
@@ -1291,6 +1353,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 46,
+			.num_wm        = 1,
+			.wm_idx        = {
+				17,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_CS,
@@ -1298,6 +1364,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 47,
+			.num_wm        = 1,
+			.wm_idx        = {
+				18,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_IHIST,
@@ -1305,6 +1375,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 48,
+			.num_wm        = 1,
+			.wm_idx        = {
+				19,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FULL_DISP,
@@ -1315,6 +1389,11 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.mid[1]        = 37,
 			.mid[2]        = 38,
 			.mid[3]        = 39,
+			.num_wm        = 2,
+			.wm_idx        = {
+				4,
+				5,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS4_DISP,
@@ -1322,6 +1401,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 18,
+			.num_wm        = 1,
+			.wm_idx        = {
+				6,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS16_DISP,
@@ -1329,6 +1412,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 19,
+			.num_wm        = 1,
+			.wm_idx        = {
+				7,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_2PD,
@@ -1337,6 +1424,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.mid[0]        = 23,
 			.mid[1]        = 24,
+			.num_wm        = 1,
+			.wm_idx        = {
+				21,
+			}
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_LCR,
@@ -1344,12 +1435,19 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.mid[0]        = 27,
+			.num_wm        = 1,
+			.wm_idx        = {
+				22,
+			}
 		},
 	},
+	.num_comp_grp    = 14,
 	.comp_done_shift = 6,
 	.top_irq_shift   = 7,
 	.support_consumed_addr = true,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 25,
+	.supported_irq =  CAM_VFE_HW_IRQ_CAP_BUF_DONE | CAM_VFE_HW_IRQ_CAP_RUP,
+	.comp_cfg_needed = true,
 };
 
 static struct cam_irq_register_set vfe480_bus_rd_irq_reg[1] = {

+ 26 - 4
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe680.h

@@ -1026,7 +1026,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 			.ubwc_regs                = NULL,
 		},
 	},
-	.num_out = 25,
+	.num_out = 27,
 	.vfe_out_hw_info = {
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI0,
@@ -1179,7 +1179,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.num_wm        = 1,
 			.wm_idx        = {
-				17,
+				12,
 			},
 		},
 		{
@@ -1273,6 +1273,16 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 				22,
 			},
 		},
+		{
+			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_AEC_BE,
+			.max_width     = -1,
+			.max_height    = -1,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
+			.num_wm        = 1,
+			.wm_idx        = {
+				11,
+			},
+		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_LTM_STATS,
 			.max_width     = -1,
@@ -1283,9 +1293,21 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 				27,
 			},
 		},
+		{
+			.vfe_out_type  =
+				CAM_VFE_BUS_VER3_VFE_OUT_STATS_GTM_BHIST,
+			.max_width     = 1920,
+			.max_height    = 1080,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
+			.num_wm        = 1,
+			.wm_idx        = {
+				17,
+			},
+		},
 	},
-	.comp_done_shift = 6,
-	.top_irq_shift   = 7,
+	.num_comp_grp    = 17,
+	.comp_done_shift = 0,
+	.top_irq_shift   = 1,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 33,
 };
 

+ 19 - 0
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe_lite48x.h

@@ -374,6 +374,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe48x_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 16,
+			.num_wm        = 1,
+			.wm_idx        = {
+				0,
+			},
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
@@ -381,6 +385,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe48x_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.mid[0]        = 17,
+			.num_wm        = 1,
+			.wm_idx        = {
+				1,
+			},
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
@@ -388,6 +396,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe48x_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.mid[0]        = 18,
+			.num_wm        = 1,
+			.wm_idx        = {
+				2,
+			},
 		},
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI3,
@@ -395,12 +407,19 @@ static struct cam_vfe_bus_ver3_hw_info vfe48x_bus_hw_info = {
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.mid[0]        = 19,
+			.num_wm        = 1,
+			.wm_idx        = {
+				3,
+			},
 		},
 	},
+	.num_comp_grp    = 4,
 	.comp_done_shift = 4,
 	.top_irq_shift   = 4,
 	.support_consumed_addr = true,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 25,
+	.supported_irq =  CAM_VFE_HW_IRQ_CAP_BUF_DONE | CAM_VFE_HW_IRQ_CAP_RUP,
+	.comp_cfg_needed = true,
 };
 
 static struct cam_vfe_hw_info cam_vfe_lite48x_hw_info = {

+ 91 - 12
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe_lite68x.h

@@ -35,7 +35,6 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			0x0000023C,
 			0x00000240,
 			0x00000244,
-			0x00000248,
 		},
 		.pwr_iso_cfg                      = 0x0000025C,
 		.overflow_status_clear            = 0x00000260,
@@ -52,7 +51,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.global_clear_bitmask     = 0x00000001,
 		},
 	},
-	.num_client = 4,
+	.num_client = 6,
 	.bus_client_reg = {
 		/* BUS Client 0 RDI0 */
 		{
@@ -80,7 +79,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.debug_status_cfg         = 0x00000480,
 			.debug_status_0           = 0x00000484,
 			.debug_status_1           = 0x00000488,
-			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_0,
+			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_1,
 			.ubwc_regs                = NULL,
 		},
 		/* BUS Client 1 RDI1 */
@@ -109,7 +108,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.debug_status_cfg         = 0x00000580,
 			.debug_status_0           = 0x00000584,
 			.debug_status_1           = 0x00000588,
-			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_1,
+			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_2,
 			.ubwc_regs                = NULL,
 		},
 		/* BUS Client 2 RDI2 */
@@ -138,7 +137,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.debug_status_cfg         = 0x00000680,
 			.debug_status_0           = 0x00000684,
 			.debug_status_1           = 0x00000688,
-			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_2,
+			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_3,
 			.ubwc_regs                = NULL,
 		},
 		/* BUS Client 3 RDI3 */
@@ -167,17 +166,75 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.debug_status_cfg         = 0x00000780,
 			.debug_status_0           = 0x00000784,
 			.debug_status_1           = 0x00000788,
-			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_3,
+			.comp_group               = CAM_VFE_BUS_VER3_COMP_GRP_4,
 			.ubwc_regs                = NULL,
 		},
+		/* BUS Client 4 Gamma */
+		{
+			.cfg			  = 0x00000800,
+			.image_addr		  = 0x00000804,
+			.frame_incr		  = 0x00000808,
+			.image_cfg_0		  = 0x0000080C,
+			.image_cfg_1		  = 0x00000810,
+			.image_cfg_2		  = 0x00000814,
+			.packer_cfg		  = 0x00000818,
+			.frame_header_addr	  = 0x00000820,
+			.frame_header_incr	  = 0x00000824,
+			.frame_header_cfg	  = 0x00000828,
+			.irq_subsample_period	  = 0x00000830,
+			.irq_subsample_pattern	  = 0x00000834,
+			.framedrop_period	  = 0x00000838,
+			.framedrop_pattern	  = 0x0000083C,
+			.mmu_prefetch_cfg	  = 0x00000860,
+			.mmu_prefetch_max_offset  = 0x00000864,
+			.system_cache_cfg	  = 0x00000868,
+			.addr_status_0		  = 0x00000870,
+			.addr_status_1		  = 0x00000874,
+			.addr_status_2		  = 0x00000878,
+			.addr_status_3		  = 0x0000087C,
+			.debug_status_cfg	  = 0x00000880,
+			.debug_status_0		  = 0x00000884,
+			.debug_status_1		  = 0x00000888,
+			.comp_group		  = CAM_VFE_BUS_VER3_COMP_GRP_0,
+			.ubwc_regs		  = NULL,
+		},
+		/* BUS Client 5 Stats BE */
+		{
+			.cfg			  = 0x00000900,
+			.image_addr		  = 0x00000904,
+			.frame_incr		  = 0x00000908,
+			.image_cfg_0		  = 0x0000090C,
+			.image_cfg_1		  = 0x00000910,
+			.image_cfg_2		  = 0x00000914,
+			.packer_cfg		  = 0x00000918,
+			.frame_header_addr	  = 0x00000920,
+			.frame_header_incr	  = 0x00000924,
+			.frame_header_cfg	  = 0x00000928,
+			.irq_subsample_period	  = 0x00000930,
+			.irq_subsample_pattern	  = 0x00000934,
+			.framedrop_period	  = 0x00000938,
+			.framedrop_pattern	  = 0x0000093C,
+			.mmu_prefetch_cfg	  = 0x00000960,
+			.mmu_prefetch_max_offset  = 0x00000964,
+			.system_cache_cfg	  = 0x00000968,
+			.addr_status_0		  = 0x00000970,
+			.addr_status_1		  = 0x00000974,
+			.addr_status_2		  = 0x00000978,
+			.addr_status_3		  = 0x0000097C,
+			.debug_status_cfg	  = 0x00000980,
+			.debug_status_0		  = 0x00000984,
+			.debug_status_1		  = 0x00000988,
+			.comp_group		  = CAM_VFE_BUS_VER3_COMP_GRP_0,
+			.ubwc_regs		  = NULL,
+		},
 	},
-	.num_out = 4,
+	.num_out = 6,
 	.vfe_out_hw_info = {
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI0,
 			.max_width     = -1,
 			.max_height    = -1,
-			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.num_wm        = 1,
 			.wm_idx        = {
 				0,
@@ -187,7 +244,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
 			.max_width     = -1,
 			.max_height    = -1,
-			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.num_wm        = 1,
 			.wm_idx        = {
 				1,
@@ -197,7 +254,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
 			.max_width     = -1,
 			.max_height    = -1,
-			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.num_wm        = 1,
 			.wm_idx        = {
 				2,
@@ -207,14 +264,36 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI3,
 			.max_width     = -1,
 			.max_height    = -1,
-			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_4,
 			.num_wm        = 1,
 			.wm_idx        = {
 				3,
 			},
 		},
+		{
+			.vfe_out_type  =
+				CAM_VFE_BUS_VER3_VFE_OUT_GAMMA,
+			.max_width     = 1920,
+			.max_height    = 1080,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
+			.num_wm        = 1,
+			.wm_idx        = {
+				4,
+			},
+		},
+		{
+			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BE,
+			.max_width     = -1,
+			.max_height    = -1,
+			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
+			.num_wm        = 1,
+			.wm_idx        = {
+				5,
+			},
+		},
 	},
-	.comp_done_shift = 6,
+	.num_comp_grp    = 4,
+	.comp_done_shift = 0,
 	.top_irq_shift   = 1,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 33,
 };

File diff suppressed because it is too large
+ 243 - 514
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver3.c


+ 10 - 1
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver3.h

@@ -10,7 +10,6 @@
 #include "cam_irq_controller.h"
 #include "cam_vfe_bus.h"
 
-#define CAM_VFE_BUS_VER3_MAX_CLIENTS     26
 #define CAM_VFE_BUS_VER3_MAX_SUB_GRPS        6
 #define CAM_VFE_BUS_VER3_MAX_MID_PER_PORT 4
 #define CAM_VFE_BUS_VER3_480_MAX_CLIENTS     26
@@ -80,7 +79,11 @@ enum cam_vfe_bus_ver3_vfe_out_type {
 	CAM_VFE_BUS_VER3_VFE_OUT_LCR,
 	CAM_VFE_BUS_VER3_VFE_OUT_AWB_BFW,
 	CAM_VFE_BUS_VER3_VFE_OUT_2PD_STATS,
+	CAM_VFE_BUS_VER3_VFE_OUT_STATS_AEC_BE,
 	CAM_VFE_BUS_VER3_VFE_OUT_LTM_STATS,
+	CAM_VFE_BUS_VER3_VFE_OUT_STATS_GTM_BHIST,
+	CAM_VFE_BUS_VER3_VFE_OUT_STATS_BE,
+	CAM_VFE_BUS_VER3_VFE_OUT_GAMMA,
 	CAM_VFE_BUS_VER3_VFE_OUT_MAX,
 };
 
@@ -185,10 +188,13 @@ struct cam_vfe_bus_ver3_vfe_out_hw_info {
  * @num_client:            Total number of write clients
  * @bus_client_reg:        Bus client register info
  * @vfe_out_hw_info:       VFE output capability
+ * @num_comp_grp:          Number of composite groups
  * @comp_done_shift:       Mask shift for comp done mask
  * @top_irq_shift:         Mask shift for top level BUS WR irq
  * @support_consumed_addr: Indicate if bus support consumed address
  * @max_out_res:           Max vfe out resource value supported for hw
+ * @supported_irq:         Mask to indicate the IRQ supported
+ * @comp_cfg_needed:       Composite group config is needed for hw
  */
 struct cam_vfe_bus_ver3_hw_info {
 	struct cam_vfe_bus_ver3_reg_offset_common common_reg;
@@ -198,10 +204,13 @@ struct cam_vfe_bus_ver3_hw_info {
 	uint32_t num_out;
 	struct cam_vfe_bus_ver3_vfe_out_hw_info
 		vfe_out_hw_info[CAM_VFE_BUS_VER3_VFE_OUT_MAX];
+	uint32_t num_comp_grp;
 	uint32_t comp_done_shift;
 	uint32_t top_irq_shift;
 	bool support_consumed_addr;
 	uint32_t max_out_res;
+	uint32_t supported_irq;
+	bool comp_cfg_needed;
 };
 
 /*

Some files were not shown because too many files changed in this diff