瀏覽代碼

qcacmn: Initial changes in hif for ipq5332 target compilation

Added device ID and target type checks in hif for ipq5332 traget
compilation.

CRs-Fixed: 3273827
Change-Id: I771d741c204695a678bf22bccd039047b9dc8356
Sajini R 2 年之前
父節點
當前提交
5d150285fd
共有 10 個文件被更改,包括 142 次插入7 次删除
  1. 1 0
      hif/inc/hif.h
  2. 1 0
      hif/inc/hostdef.h
  3. 2 0
      hif/inc/targetdef.h
  4. 2 0
      hif/src/ath_procfs.c
  5. 60 0
      hif/src/ce/ce_assignment.h
  6. 43 2
      hif/src/ce/ce_main.c
  7. 10 3
      hif/src/hif_main.c
  8. 3 0
      hif/src/pcie/if_pci.c
  9. 13 0
      hif/src/regtable.c
  10. 7 2
      hif/src/snoc/if_ahb.c

+ 1 - 0
hif/inc/hif.h

@@ -81,6 +81,7 @@ typedef void *hif_handle_t;
 #define HIF_TYPE_QCN9224 27
 #define HIF_TYPE_QCA9574 28
 #define HIF_TYPE_MANGO 29
+#define HIF_TYPE_QCA5332 30
 
 #define DMA_COHERENT_MASK_DEFAULT   37
 

+ 1 - 0
hif/inc/hostdef.h

@@ -49,4 +49,5 @@ extern struct hostdef_s *QCN6122_HOSTDEF;
 extern struct hostdef_s *QCN9224v1_HOSTDEF;
 extern struct hostdef_s *QCN9224_HOSTDEF;
 extern struct hostdef_s *QCA9574_HOSTDEF;
+extern struct hostdef_s *QCA5332_HOSTDEF;
 #endif

+ 2 - 0
hif/inc/targetdef.h

@@ -49,6 +49,7 @@ extern struct targetdef_s *KIWI_TARGETdef;
 extern struct targetdef_s *QCN9224v1_TARGETDEF;
 extern struct targetdef_s *QCN9224_TARGETDEF;
 extern struct targetdef_s *QCA9574_TARGETDEF;
+extern struct targetdef_s *QCA5332_TARGETDEF;
 
 extern struct ce_reg_def *AR6002_CE_TARGETdef;
 extern struct ce_reg_def *AR6003_CE_TARGETdef;
@@ -73,5 +74,6 @@ extern struct ce_reg_def *KIWI_CE_TARGETdef;
 extern struct ce_reg_def *QCN9224v1_CE_TARGETDEF;
 extern struct ce_reg_def *QCN9224_CE_TARGETDEF;
 extern struct ce_reg_def *QCA9574_CE_TARGETDEF;
+extern struct ce_reg_def *QCA5332_CE_TARGETDEF;
 
 #endif

+ 2 - 0
hif/src/ath_procfs.c

@@ -110,6 +110,7 @@ static ssize_t ath_procfs_diag_read_legacy(struct file *file,
 	     (tgt_info->target_type == TARGET_TYPE_QCN9224) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCN6122) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCA5018) ||
+	     (tgt_info->target_type == TARGET_TYPE_QCA5332) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCA6018) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCN7605) ||
 	     (tgt_info->target_type == TARGET_TYPE_KIWI) ||
@@ -193,6 +194,7 @@ static ssize_t ath_procfs_diag_write_legacy(struct file *file,
 	      (tgt_info->target_type == TARGET_TYPE_QCN9224) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCN6122) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCA5018) ||
+	      (tgt_info->target_type == TARGET_TYPE_QCA5332) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCA6018) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCN7605) ||
 	      (tgt_info->target_type == TARGET_TYPE_KIWI) ||

+ 60 - 0
hif/src/ce/ce_assignment.h

@@ -1068,6 +1068,66 @@ static struct CE_pipe_config target_ce_config_wlan_qcn6122[] = {
 #define PKTLOG_DST_ENTRIES 512
 #endif
 
+#define QCA_5332_CE_COUNT 12
+static struct CE_attr host_ce_config_wlan_qca5332[] = {
+	/* host->target HTC control and raw streams */
+	{/*CE0*/ (CE_ATTR_FLAGS), 0, 16, 2048, 0, NULL,},
+	/* target->host HTT + HTC control */
+	{/*CE1*/ (CE_ATTR_FLAGS), 0, 0,  2048, 512, NULL,},
+	/* target->host WMI */
+	{/*CE2*/ (CE_ATTR_FLAGS), 0, 0,  2048, 128, NULL,},
+	/* host->target WMI */
+	{/*CE3*/ (CE_ATTR_FLAGS), 0, 32, 2048, 0, NULL,},
+	/* host->target HTT */
+	{/*CE4*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,
+			CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,},
+	/* target -> host PKTLOG */
+	#ifdef REMOVE_PKT_LOG
+	{ /* CE5 */ 0, 0, 0, 0, 0, NULL,},
+	#else
+	{/*CE5*/ (CE_ATTR_FLAGS), 0, 0, 2048, PKTLOG_DST_ENTRIES, NULL,},
+	#endif
+	/* Target autonomous HIF_memcpy */
+	{/*CE6*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 0, 0, 0, NULL,},
+	/* CV Prefetch */
+	{/*CE7*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 0, 0, 0, NULL,},
+	/* Target HIF memcpy (Generic HIF memcypy) */
+	{/*CE8*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 0, 0, 0, NULL,},
+	/* WMI logging/CFR/Spectral/Radar/ */
+	{/*CE9*/ (CE_ATTR_FLAGS), 0, 0, 2048, 128, NULL,},
+	/* Customer reserve */
+	{/*CE10*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 0, 0, 0, NULL,},
+	/* Un-assigned */
+	{/*CE11*/ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 0, 0, 0, NULL,},
+};
+
+static struct CE_pipe_config target_ce_config_wlan_qca5332[] = {
+	/* host->target HTC control and raw streams */
+	{ /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,},
+	/* target->host HTT */
+	{ /* CE1 */ 1, PIPEDIR_IN,  32, 2048, CE_ATTR_FLAGS, 0,},
+	/* target->host WMI  + HTC control */
+	{ /* CE2 */ 2, PIPEDIR_IN,  32, 2048, CE_ATTR_FLAGS, 0,},
+	/* host->target WMI */
+	{ /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,},
+	/* host->target HTT */
+	{ /* CE4 */ 4, PIPEDIR_OUT, 256, 256,
+		(CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,},
+	/* Target -> host PKTLOG */
+	{ /* CE5 */ 5, PIPEDIR_IN,  32, 2048, CE_ATTR_FLAGS, 0,},
+	/* Reserved for target autonomous HIF_memcpy */
+	{ /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,},
+	/* CE7 Reserved for CV Prefetch */
+	{ /* CE7 */ 7, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,},
+	/* CE8 Reserved for target generic HIF memcpy */
+	{ /* CE8 */ 8, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,},
+	/* WMI logging/CFR/Spectral/Radar/ */
+	{ /* CE9 */ 9, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,},
+	/* CE 10,11 to be defined */
+	{/* CE11 unused */10, PIPEDIR_NONE, 0, 0, 0, 0,},
+	{/* CE11 unused */11, PIPEDIR_NONE, 0, 0, 0, 0,},
+};
+
 #define QCA_5018_CE_COUNT 6
 static struct CE_attr host_ce_config_wlan_qca5018[] = {
 	/* host->target HTC control and raw streams */

+ 43 - 2
hif/src/ce/ce_main.c

@@ -55,8 +55,8 @@
 
 #if (defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6290) || \
 	defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018) || \
-	defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_QCA9574)) && \
-	!defined(QCA_WIFI_SUPPORT_SRNG)
+	defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_QCA5332) || \
+	defined(QCA_WIFI_QCA9574)) && !defined(QCA_WIFI_SUPPORT_SRNG)
 #define QCA_WIFI_SUPPORT_SRNG
 #endif
 
@@ -885,6 +885,34 @@ static struct service_to_pipe target_service_to_ce_map_qcn9000[] = {
 };
 #endif
 
+#if (defined(QCA_WIFI_QCA5332))
+static struct service_to_pipe target_service_to_ce_map_qca5332[] = {
+	{ WMI_DATA_VO_SVC, PIPEDIR_OUT, 3, },
+	{ WMI_DATA_VO_SVC, PIPEDIR_IN, 2, },
+	{ WMI_DATA_BK_SVC, PIPEDIR_OUT, 3, },
+	{ WMI_DATA_BK_SVC, PIPEDIR_IN, 2, },
+	{ WMI_DATA_BE_SVC, PIPEDIR_OUT, 3, },
+	{ WMI_DATA_BE_SVC, PIPEDIR_IN, 2, },
+	{ WMI_DATA_VI_SVC, PIPEDIR_OUT, 3, },
+	{ WMI_DATA_VI_SVC, PIPEDIR_IN, 2, },
+	{ WMI_CONTROL_SVC, PIPEDIR_OUT, 3, },
+	{ WMI_CONTROL_SVC, PIPEDIR_IN, 2, },
+	{ HTC_CTRL_RSVD_SVC, PIPEDIR_OUT, 0, },
+	{ HTC_CTRL_RSVD_SVC, PIPEDIR_IN, 1, },
+	{ HTC_RAW_STREAMS_SVC, PIPEDIR_OUT, 0},
+	{ HTC_RAW_STREAMS_SVC, PIPEDIR_IN, 1 },
+	{ HTT_DATA_MSG_SVC, PIPEDIR_OUT, 4, },
+	{ HTT_DATA_MSG_SVC, PIPEDIR_IN, 1, },
+	{ PACKET_LOG_SVC, PIPEDIR_IN, 5, },
+	{ WMI_CONTROL_DIAG_SVC, PIPEDIR_IN, 9, },
+	/* (Additions here) */
+	{ 0, 0, 0, },
+};
+#else
+static struct service_to_pipe target_service_to_ce_map_qca5332[] = {
+};
+#endif
+
 #if (defined(QCA_WIFI_QCN9224))
 static struct service_to_pipe target_service_to_ce_map_qcn9224[] = {
 	{ WMI_DATA_VO_SVC, PIPEDIR_OUT, 3, },
@@ -1404,6 +1432,11 @@ static void hif_select_service_to_pipe_map(struct hif_softc *scn,
 			hif_select_ce_map_qcn9224(tgt_svc_map_to_use,
 						  sz_tgt_svc_map_to_use);
 			break;
+		case TARGET_TYPE_QCA5332:
+			*tgt_svc_map_to_use = target_service_to_ce_map_qca5332;
+			*sz_tgt_svc_map_to_use =
+				sizeof(target_service_to_ce_map_qca5332);
+			break;
 		case TARGET_TYPE_QCA5018:
 		case TARGET_TYPE_QCN6122:
 			*tgt_svc_map_to_use =
@@ -1679,6 +1712,7 @@ bool ce_srng_based(struct hif_softc *scn)
 	case TARGET_TYPE_MANGO:
 	case TARGET_TYPE_QCN9224:
 	case TARGET_TYPE_QCA9574:
+	case TARGET_TYPE_QCA5332:
 		return true;
 	default:
 		return false;
@@ -4049,6 +4083,13 @@ void hif_ce_prepare_config(struct hif_softc *scn)
 	case TARGET_TYPE_QCN9224:
 		hif_set_ce_config_qcn9224(scn, hif_state);
 		break;
+	case TARGET_TYPE_QCA5332:
+		hif_state->host_ce_config = host_ce_config_wlan_qca5332;
+		hif_state->target_ce_config = target_ce_config_wlan_qca5332;
+		hif_state->target_ce_config_sz =
+					 sizeof(target_ce_config_wlan_qca5332);
+		scn->ce_count = QCA_5332_CE_COUNT;
+		break;
 	case TARGET_TYPE_QCN6122:
 		hif_state->host_ce_config = host_ce_config_wlan_qcn6122;
 		hif_state->target_ce_config = target_ce_config_wlan_qcn6122;

+ 10 - 3
hif/src/hif_main.c

@@ -41,7 +41,8 @@
 #include "hif_debug.h"
 #include "mp_dev.h"
 #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \
-	defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574)
+	defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574) || \
+	defined(QCA_WIFI_QCA5332)
 #include "hal_api.h"
 #endif
 #include "hif_napi.h"
@@ -1077,7 +1078,7 @@ static inline int hif_get_num_active_grp_tasklets(struct hif_softc *scn)
 	defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \
 	defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \
 	defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_QCN9224) || \
-	defined(QCA_WIFI_QCA9574))
+	defined(QCA_WIFI_QCA9574)) || defined(QCA_WIFI_QCA5332)
 /**
  * hif_get_num_pending_work() - get the number of entries in
  *		the workqueue pending to be completed.
@@ -1213,7 +1214,7 @@ uint8_t hif_get_ep_vote_access(struct hif_opaque_softc *hif_ctx,
 	defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \
 	defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \
 	defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_QCN9224) || \
-	defined(QCA_WIFI_QCA9574))
+	defined(QCA_WIFI_QCA9574)) || defined(QCA_WIFI_QCA5332)
 static QDF_STATUS hif_hal_attach(struct hif_softc *scn)
 {
 	if (ce_srng_based(scn)) {
@@ -1658,6 +1659,12 @@ int hif_get_device_type(uint32_t device_id,
 		hif_info(" *********** qca5018 *************");
 		break;
 
+	case QCA5332_DEVICE_ID:
+		*hif_type = HIF_TYPE_QCA5332;
+		*target_type = TARGET_TYPE_QCA5332;
+		hif_info(" *********** QCA5332 *************");
+		break;
+
 	case QCA9574_DEVICE_ID:
 		*hif_type = HIF_TYPE_QCA9574;
 		*target_type = TARGET_TYPE_QCA9574;

+ 3 - 0
hif/src/pcie/if_pci.c

@@ -1730,6 +1730,7 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc)
 	if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA9574) ||
+	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA5332) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA5018) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) &&
@@ -1753,6 +1754,7 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc)
 	if (((hif_sc->target_info.target_type == TARGET_TYPE_QCA8074) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA8074V2) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA9574) ||
+	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA5332) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA5018) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) &&
@@ -3522,6 +3524,7 @@ int hif_configure_irq(struct hif_softc *scn)
 	case TARGET_TYPE_QCA8074V2:
 	case TARGET_TYPE_QCA6018:
 	case TARGET_TYPE_QCA5018:
+	case TARGET_TYPE_QCA5332:
 	case TARGET_TYPE_QCA9574:
 		ret = hif_ahb_configure_irq(sc);
 		break;

+ 13 - 0
hif/src/regtable.c

@@ -164,6 +164,14 @@ void hif_target_register_tbl_attach(struct hif_softc *scn, u32 target_type)
 		break;
 #endif
 
+#if defined(QCA5332_HEADERS_DEF)
+	case TARGET_TYPE_QCA5332:
+		scn->targetdef = QCA5332_TARGETDEF;
+		scn->target_ce_def = QCA5332_CE_TARGETDEF;
+		hif_info("TARGET_TYPE_QCA5332");
+		break;
+#endif
+
 #if defined(QCA6390_HEADERS_DEF)
 	case TARGET_TYPE_QCA6390:
 		scn->targetdef = QCA6390_TARGETdef;
@@ -306,6 +314,11 @@ void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type)
 		scn->hostdef = QCA5018_HOSTDEF;
 		break;
 #endif
+#if defined(QCA5332_HEADERS_DEF)
+	case HIF_TYPE_QCA5332:
+		scn->hostdef = QCA5332_HOSTDEF;
+		break;
+#endif
 #if defined(QCA9574_HEADERS_DEF)
 	case HIF_TYPE_QCA9574:
 		scn->hostdef = QCA9574_HOSTDEF;

+ 7 - 2
hif/src/snoc/if_ahb.c

@@ -406,7 +406,8 @@ void hif_ahb_disable_bus(struct hif_softc *scn)
 		if (memres)
 			mem_pa_size = memres->end - memres->start + 1;
 
-		if (tgt_info->target_type == TARGET_TYPE_QCA5018) {
+		if (tgt_info->target_type == TARGET_TYPE_QCA5018 ||
+		    tgt_info->target_type == TARGET_TYPE_QCA5332) {
 			iounmap(sc->mem_ce);
 			sc->mem_ce = NULL;
 			scn->mem_ce = NULL;
@@ -533,7 +534,8 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
 	 * In QCA5018 CE region moved to SOC outside WCSS block.
 	 * Allocate separate I/O remap to access CE registers.
 	 */
-	if (tgt_info->target_type == TARGET_TYPE_QCA5018) {
+	if (tgt_info->target_type == TARGET_TYPE_QCA5018 ||
+	    tgt_info->target_type == TARGET_TYPE_QCA5332) {
 		struct hif_softc *scn = HIF_GET_SOFTC(sc);
 
 		sc->mem_ce = ioremap_nocache(HOST_CE_ADDRESS, HOST_CE_SIZE);
@@ -638,6 +640,7 @@ void hif_ahb_irq_enable(struct hif_softc *scn, int ce_id)
 			if (tgt_info->target_type == TARGET_TYPE_QCA8074 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA8074V2 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA9574 ||
+			    tgt_info->target_type == TARGET_TYPE_QCA5332 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA5018 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA6018) {
 				/* Enable destination ring interrupts for
@@ -691,6 +694,7 @@ void hif_ahb_irq_disable(struct hif_softc *scn, int ce_id)
 			if (tgt_info->target_type == TARGET_TYPE_QCA8074 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA8074V2 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA9574 ||
+			    tgt_info->target_type == TARGET_TYPE_QCA5332 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA5018 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA6018) {
 				/* Disable destination ring interrupts for
@@ -773,6 +777,7 @@ void hif_display_ahb_irq_regs(struct hif_softc *scn)
 		if (tgt_info->target_type == TARGET_TYPE_QCA8074 ||
 		    tgt_info->target_type == TARGET_TYPE_QCA8074V2 ||
 		    tgt_info->target_type == TARGET_TYPE_QCA9574 ||
+		    tgt_info->target_type == TARGET_TYPE_QCA5332 ||
 		    tgt_info->target_type == TARGET_TYPE_QCA5018 ||
 		    tgt_info->target_type == TARGET_TYPE_QCA6018) {
 			regval = hif_read32_mb(scn, mem +