Browse Source

qcacmn: Initial changes for ipq9574 target compilation

Added device ID and target type checks for ipq9574 traget
compilation.

Change-Id: Ie337d1256f828987ed469a609c8fb74de2180dca
Basamma Yakkanahalli 4 years ago
parent
commit
00bcc8cbd3

+ 2 - 1
dp/inc/cdp_txrx_cmn_reg.h

@@ -69,7 +69,7 @@ ol_txrx_soc_attach(void *scn_handle, struct ol_if_ops *dp_ol_if_ops);
  * Return: DP SOC handle on success, NULL on failure
  */
 #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \
-	defined(QCA_WIFI_QCA5018)
+	defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574)
 struct cdp_soc_t *
 dp_soc_attach_wifi3(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
 		    struct hif_opaque_softc *hif_handle,
@@ -109,6 +109,7 @@ static inline int cdp_get_arch_type_from_devid(uint16_t devid)
 	case LITHIUM_DP: /*FIXME Add lithium devide IDs */
 	case QCA8074_DEVICE_ID: /* Hawekeye */
 	case QCA8074V2_DEVICE_ID: /* Hawekeye V2*/
+	case QCA9574_DEVICE_ID:
 	case QCA5018_DEVICE_ID:
 	case QCA6290_DEVICE_ID:
 	case QCN9000_DEVICE_ID:

+ 3 - 1
dp/wifi3.0/dp_main.c

@@ -12661,7 +12661,7 @@ void dp_soc_set_txrx_ring_map(struct dp_soc *soc)
 }
 
 #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \
-	defined(QCA_WIFI_QCA5018)
+	defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574)
 /**
  * dp_soc_attach_wifi3() - Attach txrx SOC
  * @ctrl_psoc: Opaque SOC handle from control plane
@@ -14412,6 +14412,7 @@ static void dp_soc_cfg_init(struct dp_soc *soc)
 		break;
 	case TARGET_TYPE_QCA8074V2:
 	case TARGET_TYPE_QCA6018:
+	case TARGET_TYPE_QCA9574:
 		wlan_cfg_set_mon_delayed_replenish_entries(soc->wlan_cfg_ctx,
 							   MON_BUF_MIN_ENTRIES);
 		wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
@@ -14499,6 +14500,7 @@ static void dp_soc_cfg_attach(struct dp_soc *soc)
 		break;
 	case TARGET_TYPE_QCA8074V2:
 	case TARGET_TYPE_QCA6018:
+	case TARGET_TYPE_QCA9574:
 	case TARGET_TYPE_QCN6122:
 	case TARGET_TYPE_QCA5018:
 		wlan_cfg_set_tso_desc_attach_defer(soc->wlan_cfg_ctx, 1);

+ 1 - 0
gpio/dispatcher/src/wlan_gpio_tgt_api.c

@@ -102,6 +102,7 @@ static bool tgt_gpio_disabled(struct wlan_objmgr_psoc *psoc)
 	if ((target_type == TARGET_TYPE_QCA8074) ||
 	    (target_type == TARGET_TYPE_QCN6122) ||
 	    (target_type == TARGET_TYPE_QCA8074V2) ||
+	    (target_type == TARGET_TYPE_QCA9574) ||
 	    (target_type == TARGET_TYPE_QCA5018) ||
 	    (target_type == TARGET_TYPE_QCA6018)) {
 		return true;

+ 8 - 1
hal/wifi3.0/hal_srng.c

@@ -29,7 +29,8 @@ void hal_qca6290_attach(struct hal_soc *hal);
 #ifdef QCA_WIFI_QCA8074
 void hal_qca8074_attach(struct hal_soc *hal);
 #endif
-#if defined(QCA_WIFI_QCA8074V2) || defined(QCA_WIFI_QCA6018)
+#if defined(QCA_WIFI_QCA8074V2) || defined(QCA_WIFI_QCA6018) || \
+	defined(QCA_WIFI_QCA9574)
 void hal_qca8074v2_attach(struct hal_soc *hal);
 #endif
 #ifdef QCA_WIFI_QCA6390
@@ -417,6 +418,12 @@ static void hal_target_based_configure(struct hal_soc *hal)
 	break;
 #endif
 
+#if defined(QCA_WIFI_QCA9574)
+	case TARGET_TYPE_QCA9574:
+		hal_qca8074v2_attach(hal);
+	break;
+#endif
+
 #if defined(QCA_WIFI_QCN6122)
 	case TARGET_TYPE_QCN6122:
 		hal->use_register_windowing = true;

+ 2 - 2
hal/wifi3.0/qca8074v2/hal_8074v2_rx.h

@@ -23,7 +23,7 @@
 #include "hal_tx.h"
 #include "dp_types.h"
 #include "hal_api_mon.h"
-#ifndef QCA_WIFI_QCA6018
+#if (!defined(QCA_WIFI_QCA6018)) && (!defined(QCA_WIFI_QCA9574))
 #include "phyrx_other_receive_info_su_evm_details.h"
 #endif
 
@@ -422,7 +422,7 @@ static uint8_t hal_rx_get_tlv_8074v2(void *rx_tlv)
 	return HAL_RX_GET(rx_tlv, PHYRX_RSSI_LEGACY_0, RECEIVE_BANDWIDTH);
 }
 
-#ifndef QCA_WIFI_QCA6018
+#if (!defined(QCA_WIFI_QCA6018)) && (!defined(QCA_WIFI_QCA9574))
 #define HAL_RX_UPDATE_SU_EVM_INFO(rx_tlv, ppdu_info, evm, pilot) \
 	(ppdu_info)->evm_info.pilot_evm[pilot] = HAL_RX_GET(rx_tlv, \
 				PHYRX_OTHER_RECEIVE_INFO, \

+ 1 - 0
hif/inc/hif.h

@@ -75,6 +75,7 @@ typedef void *hif_handle_t;
 #define HIF_TYPE_QCN6122 25
 #define HIF_TYPE_WCN7850 26
 #define HIF_TYPE_QCN9224 27
+#define HIF_TYPE_QCA9574 28
 
 #define DMA_COHERENT_MASK_DEFAULT   37
 

+ 1 - 0
hif/inc/hostdef.h

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

+ 5 - 0
hif/inc/target_type.h

@@ -79,6 +79,11 @@ extern "C" {
 #define TARGET_TYPE_QCN9224      32
 #endif
 
+/* Alder */
+#ifndef TARGET_TYPE_QCA9574
+#define TARGET_TYPE_QCA9574      33
+#endif
+
 #ifdef __cplusplus
 }
 #endif

+ 2 - 0
hif/inc/targetdef.h

@@ -49,6 +49,7 @@ extern struct targetdef_s *QCN9000_TARGETDEF;
 extern struct targetdef_s *QCN6122_TARGETDEF;
 extern struct targetdef_s *WCN7850_TARGETdef;
 extern struct targetdef_s *QCN9224_TARGETDEF;
+extern struct targetdef_s *QCA9574_TARGETDEF;
 
 extern struct ce_reg_def *AR6002_CE_TARGETdef;
 extern struct ce_reg_def *AR6003_CE_TARGETdef;
@@ -74,5 +75,6 @@ extern struct ce_reg_def *QCN9000_CE_TARGETDEF;
 extern struct ce_reg_def *QCN6122_CE_TARGETDEF;
 extern struct ce_reg_def *WCN7850_CE_TARGETdef;
 extern struct ce_reg_def *QCN9224_CE_TARGETDEF;
+extern struct ce_reg_def *QCA9574_CE_TARGETDEF;
 
 #endif

+ 2 - 0
hif/src/ath_procfs.c

@@ -104,6 +104,7 @@ static ssize_t ath_procfs_diag_read_legacy(struct file *file,
 	     (tgt_info->target_type == TARGET_TYPE_QCA6490) ||
 	     (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_QCN9000) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCN9224) ||
 	     (tgt_info->target_type == TARGET_TYPE_QCN6122) ||
@@ -185,6 +186,7 @@ static ssize_t ath_procfs_diag_write_legacy(struct file *file,
 	      (tgt_info->target_type == TARGET_TYPE_QCA6490) ||
 	      (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_QCN9000) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCN9224) ||
 	      (tgt_info->target_type == TARGET_TYPE_QCN6122) ||

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

@@ -816,6 +816,71 @@ static struct CE_pipe_config target_ce_config_wlan_qca8074_pci[] = {
 	{ /* CE11 */ 11, PIPEDIR_IN,  32, 2048, CE_ATTR_FLAGS, 0,},
 };
 
+static struct CE_attr host_ce_config_wlan_qca9574[] = {
+	/* 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, 512, NULL,},
+	/* host->target WMI (mac0) */
+	{ /* 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, 512, NULL,},
+#endif
+	/* Target autonomous HIF_memcpy */
+	{ /* CE6 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 0,
+		0, 0, NULL,},
+	/* host->target WMI (mac1) */
+	{ /* CE7 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,},
+	/* Target to uMC */
+	{ /* CE8 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 0, 0, 0, NULL,},
+	/* host->target WMI (mac2) */
+	{ /* CE9 */ CE_ATTR_FLAGS, 0, 32,  2048, 0, NULL,},
+	/* target->host HTT */
+	{ /* CE10 unused */ 0, 0, 0, 0, 0, NULL,},
+	{ /* CE11 unused */ 0, 0, 0, 0, 0, NULL,},
+};
+
+static struct CE_pipe_config target_ce_config_wlan_qca9574[] = {
+	/* 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,  T2H_WMI_RING_SIZE, 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,},
+	/* NB: 50% of src nentries, since tx has 2 frags */
+	/* Target -> host PKTLOG */
+#ifdef REMOVE_PKT_LOG
+	{ /* CE5 */ 5, PIPEDIR_NONE,  0, 0, 0, 0,},
+#else
+	{ /* CE5 */ 5, PIPEDIR_IN,  32, 2048, 0, 0,},
+#endif
+	/* Reserved for target autonomous HIF_memcpy */
+	{ /* CE6 */ 6, PIPEDIR_INOUT, 32, 65535, 64, 0,},
+	/* CE7 used only by Host */
+	{ /* CE7 */ 7, PIPEDIR_OUT, 32, 2048,
+		8192, 0,},
+	/* CE8 used only by IPA */
+	{ /* CE8 */ 8, PIPEDIR_INOUT, 32, 65535, 112, 0,},
+	/* CE9 target->host HTT */
+	{ /* CE9 */ 9, PIPEDIR_OUT,  32, 2048, 8192, 0,},
+	/* CE10 target->host HTT */
+	{/* CE10 unused */10, PIPEDIR_NONE, 0, 0, 0, 0,},
+	{/* CE11 unused */11, PIPEDIR_NONE, 0, 0, 0, 0,},
+};
+
 static struct CE_attr host_lowdesc_ce_config_wlan_adrastea_nopktlog[] = {
 	/* host->target HTC control and raw streams */
 	{ /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,},

+ 44 - 1
hif/src/ce/ce_main.c

@@ -54,7 +54,8 @@
 
 #if (defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6290) || \
 	defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018) || \
-	defined(QCA_WIFI_WCN7850)) && !defined(QCA_WIFI_SUPPORT_SRNG)
+	defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCA9574)) && \
+	!defined(QCA_WIFI_SUPPORT_SRNG)
 #define QCA_WIFI_SUPPORT_SRNG
 #endif
 
@@ -767,6 +768,35 @@ static struct service_to_pipe target_service_to_ce_map_qca8074[] = {
 };
 #endif
 
+#if (defined(QCA_WIFI_QCA9574))
+static struct service_to_pipe target_service_to_ce_map_qca9574[] = {
+	{ 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, },
+	{ WMI_CONTROL_SVC_WMAC1, PIPEDIR_OUT, 7},
+	{ WMI_CONTROL_SVC_WMAC1, 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, },
+	/* (Additions here) */
+	{ 0, 0, 0, },
+};
+#else
+static struct service_to_pipe target_service_to_ce_map_qca9574[] = {
+};
+#endif
+
 #if (defined(QCA_WIFI_QCA8074V2))
 static struct service_to_pipe target_service_to_ce_map_qca8074_v2[] = {
 	{ WMI_DATA_VO_SVC, PIPEDIR_OUT, 3, },
@@ -1342,6 +1372,12 @@ static void hif_select_service_to_pipe_map(struct hif_softc *scn,
 			*sz_tgt_svc_map_to_use =
 				sizeof(target_service_to_ce_map_qca8074_v2);
 			break;
+		case TARGET_TYPE_QCA9574:
+			*tgt_svc_map_to_use =
+				target_service_to_ce_map_qca9574;
+			*sz_tgt_svc_map_to_use =
+				sizeof(target_service_to_ce_map_qca9574);
+			break;
 		case TARGET_TYPE_QCA6018:
 			*tgt_svc_map_to_use =
 				target_service_to_ce_map_qca6018;
@@ -1594,6 +1630,7 @@ bool ce_srng_based(struct hif_softc *scn)
 	case TARGET_TYPE_QCA5018:
 	case TARGET_TYPE_WCN7850:
 	case TARGET_TYPE_QCN9224:
+	case TARGET_TYPE_QCA9574:
 		return true;
 	default:
 		return false;
@@ -3832,6 +3869,12 @@ void hif_ce_prepare_config(struct hif_softc *scn)
 					sizeof(target_ce_config_wlan_qca5018);
 		scn->ce_count = QCA_5018_CE_COUNT;
 		break;
+	case TARGET_TYPE_QCA9574:
+		hif_state->host_ce_config = host_ce_config_wlan_qca9574;
+		hif_state->target_ce_config = target_ce_config_wlan_qca9574;
+		hif_state->target_ce_config_sz =
+					sizeof(target_ce_config_wlan_qca9574);
+		break;
 	case TARGET_TYPE_QCA6390:
 		hif_state->host_ce_config = host_ce_config_wlan_qca6390;
 		hif_state->target_ce_config = target_ce_config_wlan_qca6390;

+ 11 - 3
hif/src/hif_main.c

@@ -40,7 +40,7 @@
 #include "hif_debug.h"
 #include "mp_dev.h"
 #if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \
-	defined(QCA_WIFI_QCA5018)
+	defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574)
 #include "hal_api.h"
 #endif
 #include "hif_napi.h"
@@ -1008,7 +1008,8 @@ static inline int hif_get_num_active_grp_tasklets(struct hif_softc *scn)
 	defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390) || \
 	defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \
 	defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \
-	defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224))
+	defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224) || \
+	defined(QCA_WIFI_QCA9574))
 /**
  * hif_get_num_pending_work() - get the number of entries in
  *		the workqueue pending to be completed.
@@ -1113,7 +1114,8 @@ uint8_t hif_get_ep_vote_access(struct hif_opaque_softc *hif_ctx,
 	defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390) || \
 	defined(QCA_WIFI_QCN9000) || defined(QCA_WIFI_QCA6490) || \
 	defined(QCA_WIFI_QCA6750) || defined(QCA_WIFI_QCA5018) || \
-	defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224))
+	defined(QCA_WIFI_WCN7850) || defined(QCA_WIFI_QCN9224) || \
+	defined(QCA_WIFI_QCA9574))
 static QDF_STATUS hif_hal_attach(struct hif_softc *scn)
 {
 	if (ce_srng_based(scn)) {
@@ -1560,6 +1562,12 @@ int hif_get_device_type(uint32_t device_id,
 		hif_info(" *********** qca5018 *************");
 		break;
 
+	case QCA9574_DEVICE_ID:
+		*hif_type = HIF_TYPE_QCA9574;
+		*target_type = TARGET_TYPE_QCA9574;
+		hif_info(" *********** QCA9574 *************");
+		break;
+
 	default:
 		hif_err("Unsupported device ID = 0x%x!", device_id);
 		ret = -ENODEV;

+ 1 - 0
hif/src/hif_main.h

@@ -119,6 +119,7 @@
 #define QCA8074V2_DEVICE_ID (0xfffe) /* Todo: replace this with actual number */
 #define QCA6018_DEVICE_ID (0xfffd) /* Todo: replace this with actual number */
 #define QCA5018_DEVICE_ID (0xfffc) /* Todo: replace this with actual number */
+#define QCA9574_DEVICE_ID (0xfffa)
 /* Genoa */
 #define QCN7605_DEVICE_ID  (0x1102) /* Genoa PCIe device ID*/
 #define QCN7605_COMPOSITE  (0x9901)

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

@@ -1707,6 +1707,7 @@ int hif_pci_bus_configure(struct hif_softc *hif_sc)
 	/* todo: consider replacing this with an srng field */
 	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_QCA5018) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) &&
@@ -1729,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_QCA5018) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCN6122) ||
 	     (hif_sc->target_info.target_type == TARGET_TYPE_QCA6018)) &&
@@ -3245,6 +3247,7 @@ int hif_configure_irq(struct hif_softc *scn)
 	case TARGET_TYPE_QCA8074V2:
 	case TARGET_TYPE_QCA6018:
 	case TARGET_TYPE_QCA5018:
+	case TARGET_TYPE_QCA9574:
 		ret = hif_ahb_configure_irq(sc);
 		break;
 	default:

+ 13 - 0
hif/src/regtable.c

@@ -125,6 +125,13 @@ void hif_target_register_tbl_attach(struct hif_softc *scn, u32 target_type)
 		scn->target_ce_def = QCA6018_CE_TARGETDEF;
 		break;
 #endif
+#if defined(QCA9574_HEADERS_DEF)
+	case TARGET_TYPE_QCA9574:
+		scn->targetdef = QCA9574_TARGETDEF;
+		scn->target_ce_def = QCA9574_CE_TARGETDEF;
+		hif_info("TARGET_TYPE_QCA9574");
+		break;
+#endif
 
 #if defined(QCN9000_HEADERS_DEF)
 	case TARGET_TYPE_QCN9000:
@@ -297,6 +304,12 @@ void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type)
 		scn->hostdef = QCA5018_HOSTDEF;
 		break;
 #endif
+#if defined(QCA9574_HEADERS_DEF)
+	case HIF_TYPE_QCA9574:
+		scn->hostdef = QCA9574_HOSTDEF;
+		hif_info("HIF_TYPE_QCA9574");
+		break;
+#endif
 
 #if defined(QCA6390_HEADERS_DEF)
 	case HIF_TYPE_QCA6390:

+ 5 - 0
hif/src/snoc/if_ahb.c

@@ -520,6 +520,7 @@ void hif_ahb_disable_bus(struct hif_softc *scn)
 		/* Should not be executed on 8074 platform */
 		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_QCA5018) &&
 		    (tgt_info->target_type != TARGET_TYPE_QCN6122) &&
 		    (tgt_info->target_type != TARGET_TYPE_QCA6018)) {
@@ -665,6 +666,7 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
 
 	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_QCA5018) &&
 			(tgt_info->target_type != TARGET_TYPE_QCN6122) &&
 			(tgt_info->target_type != TARGET_TYPE_QCA6018)) {
@@ -685,6 +687,7 @@ QDF_STATUS hif_ahb_enable_bus(struct hif_softc *ol_sc,
 err_target_sync:
 	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_QCN6122) &&
 	    (tgt_info->target_type != TARGET_TYPE_QCA5018) &&
 	    (tgt_info->target_type != TARGET_TYPE_QCA6018)) {
@@ -797,6 +800,7 @@ void hif_ahb_irq_enable(struct hif_softc *scn, int ce_id)
 			hif_write32_mb(scn, mem + reg_offset, regval);
 			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_QCA5018 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA6018) {
 				/* Enable destination ring interrupts for
@@ -849,6 +853,7 @@ void hif_ahb_irq_disable(struct hif_softc *scn, int ce_id)
 			hif_write32_mb(scn, mem + reg_offset, regval);
 			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_QCA5018 ||
 			    tgt_info->target_type == TARGET_TYPE_QCA6018) {
 				/* Disable destination ring interrupts for

+ 1 - 1
htc/htc.c

@@ -47,7 +47,7 @@ ATH_DEBUG_INSTANTIATE_MODULE_VAR(htc,
 #endif
 
 #if (defined(WMI_MULTI_MAC_SVC) || defined(QCA_WIFI_QCA8074) || \
-	defined(QCA_WIFI_QCA6018))
+	defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA9574))
 static const uint32_t svc_id[] = {WMI_CONTROL_SVC, WMI_CONTROL_SVC_WMAC1,
 						WMI_CONTROL_SVC_WMAC2};
 #else

+ 3 - 2
target_if/dfs/src/target_if_dfs_full_offload.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
  *
  *
  * Permission to use, copy, modify, and/or distribute this software for
@@ -392,7 +392,8 @@ free_vdevref:
 #endif
 
 #if (defined(WLAN_DFS_FULL_OFFLOAD) || defined(QCA_WIFI_QCA8074) || \
-	defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018))
+	defined(QCA_WIFI_QCA6018) || defined(QCA_WIFI_QCA5018) || \
+	defined(QCA_WIFI_QCA9574))
 QDF_STATUS target_process_bang_radar_cmd(
 		struct wlan_objmgr_pdev *pdev,
 		struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test)

+ 6 - 1
target_if/spectral/target_if_spectral.c

@@ -2522,6 +2522,7 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar,
 				     uint32_t target_type)
 {
 	if (target_type == TARGET_TYPE_QCA8074V2 ||
+	    target_type == TARGET_TYPE_QCA9574 ||
 	    target_type == TARGET_TYPE_QCN9000 ||
 	    target_type == TARGET_TYPE_QCN6122 ||
 	    target_type == TARGET_TYPE_QCA5018 ||
@@ -2537,6 +2538,7 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar,
 
 	if (target_type == TARGET_TYPE_QCA8074 ||
 	    target_type == TARGET_TYPE_QCA8074V2 ||
+	    target_type == TARGET_TYPE_QCA9574 ||
 	    target_type == TARGET_TYPE_QCA6018 ||
 	    target_type == TARGET_TYPE_QCN6122 ||
 	    target_type == TARGET_TYPE_QCA5018 ||
@@ -2549,7 +2551,8 @@ target_if_spectral_len_adj_swar_init(struct spectral_fft_bin_len_adj_swar *swar,
 		swar->null_fftbin_adj = 0;
 	}
 
-	if (target_type == TARGET_TYPE_QCA8074V2)
+	if (target_type == TARGET_TYPE_QCA8074V2 ||
+	    target_type == TARGET_TYPE_QCA9574)
 		swar->packmode_fftbin_size_adj = 1;
 	else
 		swar->packmode_fftbin_size_adj = 0;
@@ -2743,6 +2746,7 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev)
 
 	if (target_type == TARGET_TYPE_QCA8074 ||
 	    target_type == TARGET_TYPE_QCA8074V2 ||
+	    target_type == TARGET_TYPE_QCA9574 ||
 	    target_type == TARGET_TYPE_QCA6018 ||
 	    target_type == TARGET_TYPE_QCA5018 ||
 	    target_type == TARGET_TYPE_QCA6390 ||
@@ -2758,6 +2762,7 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev)
 
 	if ((target_type == TARGET_TYPE_QCA8074) ||
 	    (target_type == TARGET_TYPE_QCA8074V2) ||
+	    (target_type == TARGET_TYPE_QCA9574) ||
 	    (target_type == TARGET_TYPE_QCA6018) ||
 	    (target_type == TARGET_TYPE_QCA5018) ||
 	    (target_type == TARGET_TYPE_QCN6122) ||