Эх сурвалжийг харах

msm: camera: ife: Add support for camera v680 bus

This change adds support for Waipio bus hardware. It also
changes the bus private structure to be pointer based so
that most of the information is filled from hardware
specific headers.

CRs-Fixed: 2794540
Change-Id: Ie9d30442246a896f372512b62bd54be32c4921ad
Signed-off-by: Venkat Chinta <[email protected]>
Signed-off-by: Mukund Madhusudan Atre <[email protected]>
Mukund Madhusudan Atre 5 жил өмнө
parent
commit
1332b49e26

+ 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";
 		return "RDI_RD";
 	case CAM_ISP_IFE_OUT_RES_LCR:
 	case CAM_ISP_IFE_OUT_RES_LCR:
 		return "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:
 	default:
 		return "CAM_ISP_Invalid_Resource_Type";
 		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.
  *                           with this resource.
  * @priv:                    Context data
  * @priv:                    Context data
  * @event_cb:                Callback function to hw mgr in case of hw events
  * @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_out:                 Acquire args for VFE_OUT
  * @vfe_bus_rd               Acquire args for VFE_BUS_READ
  * @vfe_bus_rd               Acquire args for VFE_BUS_READ
  * @vfe_in:                  Acquire args for VFE_IN
  * @vfe_in:                  Acquire args for VFE_IN
@@ -199,6 +200,7 @@ struct cam_vfe_acquire_args {
 	void                                *tasklet;
 	void                                *tasklet;
 	void                                *priv;
 	void                                *priv;
 	cam_hw_mgr_event_cb_func             event_cb;
 	cam_hw_mgr_event_cb_func             event_cb;
+	void                                *buf_done_controller;
 	union {
 	union {
 		struct cam_vfe_hw_vfe_out_acquire_args     vfe_out;
 		struct cam_vfe_hw_vfe_out_acquire_args     vfe_out;
 		struct cam_vfe_hw_vfe_bus_rd_acquire_args  vfe_bus_rd;
 		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 */
 /* 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_
 #ifndef _CAM_VFE_CORE_H_
@@ -12,6 +12,13 @@
 #include "cam_vfe_bus.h"
 #include "cam_vfe_bus.h"
 #include "cam_vfe_hw_intf.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_vfe_hw_info {
 	struct cam_irq_controller_reg_info *irq_reg_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,
 			.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_reg = {
 		/* BUS Client 0 FULL Y */
 		/* BUS Client 0 FULL Y */
 		{
 		{
@@ -1177,6 +1177,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.mid[0]        = 8,
 			.mid[0]        = 8,
+			.num_wm        = 1,
+			.wm_idx        = {
+				23,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_4,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_4,
 			.mid[0]        = 9,
 			.mid[0]        = 9,
+			.num_wm        = 1,
+			.wm_idx        = {
+				24,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_5,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_5,
 			.mid[0]        = 10,
 			.mid[0]        = 10,
+			.num_wm        = 1,
+			.wm_idx        = {
+				25,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FULL,
 			.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[1]        = 33,
 			.mid[2]        = 34,
 			.mid[2]        = 34,
 			.mid[3]        = 35,
 			.mid[3]        = 35,
+			.num_wm        = 2,
+			.wm_idx        = {
+				0,
+				1,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS4,
 			.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,
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 16,
 			.mid[0]        = 16,
+			.num_wm        = 1,
+			.wm_idx        = {
+				2,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS16,
 			.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,
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 17,
 			.mid[0]        = 17,
+			.num_wm        = 1,
+			.wm_idx        = {
+				3,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RAW_DUMP,
 			.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,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 11,
 			.mid[0]        = 11,
 			.mid[1]        = 12,
 			.mid[1]        = 12,
+			.num_wm        = 1,
+			.wm_idx        = {
+				10,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FD,
 			.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[0]        = 20,
 			.mid[1]        = 21,
 			.mid[1]        = 21,
 			.mid[2]        = 22,
 			.mid[2]        = 22,
+			.num_wm        = 2,
+			.wm_idx        = {
+				8,
+				9,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_PDAF,
 			.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,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 25,
 			.mid[0]        = 25,
 			.mid[1]        = 26,
 			.mid[1]        = 26,
+			.num_wm        = 1,
+			.wm_idx        = {
+				11,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_HDR_BE,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 40,
 			.mid[0]        = 40,
+			.num_wm        = 1,
+			.wm_idx        = {
+				12,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  =
 			.vfe_out_type  =
@@ -1255,6 +1297,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = 1080,
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 41,
 			.mid[0]        = 41,
+			.num_wm        = 1,
+			.wm_idx        = {
+				13,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  =
 			.vfe_out_type  =
@@ -1263,6 +1309,10 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
 			.max_height    = -1,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 42,
 			.mid[0]        = 42,
+			.num_wm        = 1,
+			.wm_idx        = {
+				14,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BF,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 43,
 			.mid[0]        = 43,
+			.num_wm        = 1,
+			.wm_idx        = {
+				20,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_AWB_BG,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]         = 44,
 			.mid[0]         = 44,
+			.num_wm        = 1,
+			.wm_idx        = {
+				15,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_BHIST,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 45,
 			.mid[0]        = 45,
+			.num_wm        = 1,
+			.wm_idx        = {
+				16,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_RS,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 46,
 			.mid[0]        = 46,
+			.num_wm        = 1,
+			.wm_idx        = {
+				17,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_CS,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 47,
 			.mid[0]        = 47,
+			.num_wm        = 1,
+			.wm_idx        = {
+				18,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_STATS_IHIST,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 48,
 			.mid[0]        = 48,
+			.num_wm        = 1,
+			.wm_idx        = {
+				19,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_FULL_DISP,
 			.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[1]        = 37,
 			.mid[2]        = 38,
 			.mid[2]        = 38,
 			.mid[3]        = 39,
 			.mid[3]        = 39,
+			.num_wm        = 2,
+			.wm_idx        = {
+				4,
+				5,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS4_DISP,
 			.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,
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 18,
 			.mid[0]        = 18,
+			.num_wm        = 1,
+			.wm_idx        = {
+				6,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_DS16_DISP,
 			.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,
 			.max_height    = 1080,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 19,
 			.mid[0]        = 19,
+			.num_wm        = 1,
+			.wm_idx        = {
+				7,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_2PD,
 			.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,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.mid[0]        = 23,
 			.mid[0]        = 23,
 			.mid[1]        = 24,
 			.mid[1]        = 24,
+			.num_wm        = 1,
+			.wm_idx        = {
+				21,
+			}
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_LCR,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.mid[0]        = 27,
 			.mid[0]        = 27,
+			.num_wm        = 1,
+			.wm_idx        = {
+				22,
+			}
 		},
 		},
 	},
 	},
+	.num_comp_grp    = 14,
 	.comp_done_shift = 6,
 	.comp_done_shift = 6,
 	.top_irq_shift   = 7,
 	.top_irq_shift   = 7,
 	.support_consumed_addr = true,
 	.support_consumed_addr = true,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 25,
 	.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] = {
 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,
 			.ubwc_regs                = NULL,
 		},
 		},
 	},
 	},
-	.num_out = 25,
+	.num_out = 27,
 	.vfe_out_hw_info = {
 	.vfe_out_hw_info = {
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI0,
 			.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,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.num_wm        = 1,
 			.num_wm        = 1,
 			.wm_idx        = {
 			.wm_idx        = {
-				17,
+				12,
 			},
 			},
 		},
 		},
 		{
 		{
@@ -1273,6 +1273,16 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 				22,
 				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,
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_LTM_STATS,
 			.max_width     = -1,
 			.max_width     = -1,
@@ -1283,9 +1293,21 @@ static struct cam_vfe_bus_ver3_hw_info vfe680_bus_hw_info = {
 				27,
 				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,
 	.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_0,
 			.mid[0]        = 16,
 			.mid[0]        = 16,
+			.num_wm        = 1,
+			.wm_idx        = {
+				0,
+			},
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_1,
 			.mid[0]        = 17,
 			.mid[0]        = 17,
+			.num_wm        = 1,
+			.wm_idx        = {
+				1,
+			},
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_2,
 			.mid[0]        = 18,
 			.mid[0]        = 18,
+			.num_wm        = 1,
+			.wm_idx        = {
+				2,
+			},
 		},
 		},
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI3,
 			.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,
 			.max_height    = -1,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.source_group  = CAM_VFE_BUS_VER3_SRC_GRP_3,
 			.mid[0]        = 19,
 			.mid[0]        = 19,
+			.num_wm        = 1,
+			.wm_idx        = {
+				3,
+			},
 		},
 		},
 	},
 	},
+	.num_comp_grp    = 4,
 	.comp_done_shift = 4,
 	.comp_done_shift = 4,
 	.top_irq_shift   = 4,
 	.top_irq_shift   = 4,
 	.support_consumed_addr = true,
 	.support_consumed_addr = true,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 25,
 	.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 = {
 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,
 			0x0000023C,
 			0x00000240,
 			0x00000240,
 			0x00000244,
 			0x00000244,
-			0x00000248,
 		},
 		},
 		.pwr_iso_cfg                      = 0x0000025C,
 		.pwr_iso_cfg                      = 0x0000025C,
 		.overflow_status_clear            = 0x00000260,
 		.overflow_status_clear            = 0x00000260,
@@ -52,7 +51,7 @@ static struct cam_vfe_bus_ver3_hw_info vfe680x_bus_hw_info = {
 			.global_clear_bitmask     = 0x00000001,
 			.global_clear_bitmask     = 0x00000001,
 		},
 		},
 	},
 	},
-	.num_client = 4,
+	.num_client = 6,
 	.bus_client_reg = {
 	.bus_client_reg = {
 		/* BUS Client 0 RDI0 */
 		/* 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_cfg         = 0x00000480,
 			.debug_status_0           = 0x00000484,
 			.debug_status_0           = 0x00000484,
 			.debug_status_1           = 0x00000488,
 			.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,
 			.ubwc_regs                = NULL,
 		},
 		},
 		/* BUS Client 1 RDI1 */
 		/* 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_cfg         = 0x00000580,
 			.debug_status_0           = 0x00000584,
 			.debug_status_0           = 0x00000584,
 			.debug_status_1           = 0x00000588,
 			.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,
 			.ubwc_regs                = NULL,
 		},
 		},
 		/* BUS Client 2 RDI2 */
 		/* 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_cfg         = 0x00000680,
 			.debug_status_0           = 0x00000684,
 			.debug_status_0           = 0x00000684,
 			.debug_status_1           = 0x00000688,
 			.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,
 			.ubwc_regs                = NULL,
 		},
 		},
 		/* BUS Client 3 RDI3 */
 		/* 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_cfg         = 0x00000780,
 			.debug_status_0           = 0x00000784,
 			.debug_status_0           = 0x00000784,
 			.debug_status_1           = 0x00000788,
 			.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,
 			.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_hw_info = {
 		{
 		{
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI0,
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI0,
 			.max_width     = -1,
 			.max_width     = -1,
 			.max_height    = -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,
 			.num_wm        = 1,
 			.wm_idx        = {
 			.wm_idx        = {
 				0,
 				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,
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI1,
 			.max_width     = -1,
 			.max_width     = -1,
 			.max_height    = -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,
 			.num_wm        = 1,
 			.wm_idx        = {
 			.wm_idx        = {
 				1,
 				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,
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI2,
 			.max_width     = -1,
 			.max_width     = -1,
 			.max_height    = -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,
 			.num_wm        = 1,
 			.wm_idx        = {
 			.wm_idx        = {
 				2,
 				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,
 			.vfe_out_type  = CAM_VFE_BUS_VER3_VFE_OUT_RDI3,
 			.max_width     = -1,
 			.max_width     = -1,
 			.max_height    = -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,
 			.num_wm        = 1,
 			.wm_idx        = {
 			.wm_idx        = {
 				3,
 				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,
 	.top_irq_shift   = 1,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 33,
 	.max_out_res = CAM_ISP_IFE_OUT_RES_BASE + 33,
 };
 };

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 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_irq_controller.h"
 #include "cam_vfe_bus.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_SUB_GRPS        6
 #define CAM_VFE_BUS_VER3_MAX_MID_PER_PORT 4
 #define CAM_VFE_BUS_VER3_MAX_MID_PER_PORT 4
 #define CAM_VFE_BUS_VER3_480_MAX_CLIENTS     26
 #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_LCR,
 	CAM_VFE_BUS_VER3_VFE_OUT_AWB_BFW,
 	CAM_VFE_BUS_VER3_VFE_OUT_AWB_BFW,
 	CAM_VFE_BUS_VER3_VFE_OUT_2PD_STATS,
 	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_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,
 	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
  * @num_client:            Total number of write clients
  * @bus_client_reg:        Bus client register info
  * @bus_client_reg:        Bus client register info
  * @vfe_out_hw_info:       VFE output capability
  * @vfe_out_hw_info:       VFE output capability
+ * @num_comp_grp:          Number of composite groups
  * @comp_done_shift:       Mask shift for comp done mask
  * @comp_done_shift:       Mask shift for comp done mask
  * @top_irq_shift:         Mask shift for top level BUS WR irq
  * @top_irq_shift:         Mask shift for top level BUS WR irq
  * @support_consumed_addr: Indicate if bus support consumed address
  * @support_consumed_addr: Indicate if bus support consumed address
  * @max_out_res:           Max vfe out resource value supported for hw
  * @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_hw_info {
 	struct cam_vfe_bus_ver3_reg_offset_common common_reg;
 	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;
 	uint32_t num_out;
 	struct cam_vfe_bus_ver3_vfe_out_hw_info
 	struct cam_vfe_bus_ver3_vfe_out_hw_info
 		vfe_out_hw_info[CAM_VFE_BUS_VER3_VFE_OUT_MAX];
 		vfe_out_hw_info[CAM_VFE_BUS_VER3_VFE_OUT_MAX];
+	uint32_t num_comp_grp;
 	uint32_t comp_done_shift;
 	uint32_t comp_done_shift;
 	uint32_t top_irq_shift;
 	uint32_t top_irq_shift;
 	bool support_consumed_addr;
 	bool support_consumed_addr;
 	uint32_t max_out_res;
 	uint32_t max_out_res;
+	uint32_t supported_irq;
+	bool comp_cfg_needed;
 };
 };
 
 
 /*
 /*

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно