Browse Source

qcacmn: FISA init code movement

Move the FISA initialization code out of cmn DP.

Change-Id: I744a69d559225d4a0496b84be9007ab230f2f4a0
CRs-Fixed: 3512034
Rakesh Pillai 2 năm trước cách đây
mục cha
commit
60e91fe20b

+ 15 - 0
dp/inc/cdp_txrx_cmn.h

@@ -3190,4 +3190,19 @@ cdp_get_tqm_offset(ol_txrx_soc_handle soc, uint64_t *value)
 
 	soc->ops->cmn_drv_ops->txrx_get_tqm_offset(soc, value);
 }
+
+static inline uint64_t cdp_get_fst_cem_base(ol_txrx_soc_handle soc,
+					    uint64_t size)
+{
+	if (!soc) {
+		dp_cdp_debug("Invalid Instance");
+		return 0;
+	}
+
+	if (!soc->ops->cmn_drv_ops ||
+	    !soc->ops->cmn_drv_ops->get_fst_cmem_base)
+		return 0;
+
+	return soc->ops->cmn_drv_ops->get_fst_cmem_base(soc, size);
+}
 #endif /* _CDP_TXRX_CMN_H_ */

+ 1 - 0
dp/inc/cdp_txrx_ops.h

@@ -727,6 +727,7 @@ struct cdp_cmn_ops {
 	void (*txrx_get_tsf2_offset)(struct cdp_soc_t *soc_hdl, uint8_t mac_id,
 				     uint64_t *value);
 	void (*txrx_get_tqm_offset)(struct cdp_soc_t *soc_hdl, uint64_t *value);
+	uint64_t (*get_fst_cmem_base)(struct cdp_soc_t *soc_hdl, uint64_t size);
 };
 
 struct cdp_ctrl_ops {

+ 10 - 16
dp/wifi3.0/be/dp_be.c

@@ -168,19 +168,19 @@ static uint64_t dp_get_cmem_chunk(struct dp_soc *soc, uint64_t size,
 }
 #endif
 
-#if defined(WLAN_SUPPORT_RX_FISA)
-static inline QDF_STATUS dp_fisa_fst_cmem_addr_init(struct dp_soc *soc)
+#ifdef WLAN_SUPPORT_RX_FISA
+static uint64_t dp_get_fst_cmem_base_be(struct dp_soc *soc, uint64_t size)
 {
-	soc->fst_cmem_size = DP_CMEM_FST_SIZE;
-	soc->fst_cmem_base = dp_get_cmem_chunk(soc, soc->fst_cmem_size,
-					       FISA_FST);
+	return dp_get_cmem_chunk(soc, size, FISA_FST);
+}
 
-	return QDF_STATUS_SUCCESS;
+static void dp_initialize_arch_ops_be_fisa(struct dp_arch_ops *arch_ops)
+{
+	arch_ops->dp_get_fst_cmem_base = dp_get_fst_cmem_base_be;
 }
-#else /* !WLAN_SUPPORT_RX_FISA */
-static inline QDF_STATUS dp_fisa_fst_cmem_addr_init(struct dp_soc *soc)
+#else
+static void dp_initialize_arch_ops_be_fisa(struct dp_arch_ops *arch_ops)
 {
-	return QDF_STATUS_SUCCESS;
 }
 #endif
 
@@ -335,9 +335,6 @@ static QDF_STATUS dp_get_cmem_allocation(struct dp_soc *soc,
 	case COOKIE_CONVERSION:
 		status = dp_hw_cc_cmem_addr_init(soc);
 		break;
-	case FISA_FST:
-		status = dp_fisa_fst_cmem_addr_init(soc);
-		break;
 	default:
 		dp_err("Invalid CMEM request");
 	}
@@ -988,10 +985,6 @@ static QDF_STATUS dp_soc_attach_be(struct dp_soc *soc,
 			goto fail;
 	}
 
-	qdf_status = dp_get_cmem_allocation(soc, FISA_FST);
-	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
-		goto fail;
-
 	for (i = 0; i < MAX_RXDESC_POOLS; i++) {
 		num_entries =
 			wlan_cfg_get_dp_soc_rx_sw_desc_num(soc->wlan_cfg_ctx);
@@ -2953,6 +2946,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 #endif
 	dp_initialize_arch_ops_be_ipa(arch_ops);
 	dp_initialize_arch_ops_be_single_dev(arch_ops);
+	dp_initialize_arch_ops_be_fisa(arch_ops);
 }
 
 #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE

+ 1 - 4
dp/wifi3.0/be/dp_be.h

@@ -55,13 +55,10 @@ enum CMEM_MEM_CLIENTS {
 #define DP_CC_PPT_MEM_SIZE 8192
 #endif
 
-/* FST required CMEM offset from CMEM pool */
+/* FST required CMEM offset M pool */
 #define DP_FST_MEM_OFFSET_IN_CMEM \
 	(DP_CC_MEM_OFFSET_IN_CMEM + DP_CC_PPT_MEM_SIZE)
 
-/* CMEM size for FISA FST 16K */
-#define DP_CMEM_FST_SIZE 16384
-
 /* lower 9 bits in Desc ID for offset in page of SPT */
 #define DP_CC_DESC_ID_SPT_VA_OS_SHIFT 0
 

+ 7 - 32
dp/wifi3.0/dp_internal.h

@@ -3926,7 +3926,7 @@ struct cdp_soc_t *dp_soc_to_cdp_soc_t(struct dp_soc *psoc)
 	return (struct cdp_soc_t *)psoc;
 }
 
-#if defined(WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA)
+#if defined(WLAN_SUPPORT_RX_FLOW_TAG)
 /**
  * dp_rx_flow_get_fse_stats() - Retrieve a flow's statistics
  * @pdev: pdev handle
@@ -3977,16 +3977,6 @@ QDF_STATUS dp_rx_fst_attach(struct dp_soc *soc, struct dp_pdev *pdev);
  */
 void dp_rx_fst_detach(struct dp_soc *soc, struct dp_pdev *pdev);
 
-/**
- * dp_rx_flow_send_fst_fw_setup() - Program FST parameters in FW/HW post-attach
- * @soc: SoC handle
- * @pdev: Pdev handle
- *
- * Return: Success when fst parameters are programmed in FW, error otherwise
- */
-QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
-					struct dp_pdev *pdev);
-
 /**
  * dp_mon_rx_update_rx_flow_tag_stats() - Update a mon flow's statistics
  * @pdev: pdev handle
@@ -3996,33 +3986,18 @@ QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
  */
 QDF_STATUS
 dp_mon_rx_update_rx_flow_tag_stats(struct dp_pdev *pdev, uint32_t flow_id);
+#endif
 
-#else /* !((WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA)) */
-
-/**
- * dp_rx_fst_attach() - Initialize Rx FST and setup necessary parameters
- * @soc: SoC handle
- * @pdev: Pdev handle
- *
- * Return: Handle to flow search table entry
- */
-static inline
-QDF_STATUS dp_rx_fst_attach(struct dp_soc *soc, struct dp_pdev *pdev)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
+#ifdef WLAN_SUPPORT_RX_FLOW_TAG
 /**
- * dp_rx_fst_detach() - De-initialize Rx FST
+ * dp_rx_flow_send_fst_fw_setup() - Program FST parameters in FW/HW post-attach
  * @soc: SoC handle
  * @pdev: Pdev handle
  *
- * Return: None
+ * Return: Success when fst parameters are programmed in FW, error otherwise
  */
-static inline
-void dp_rx_fst_detach(struct dp_soc *soc, struct dp_pdev *pdev)
-{
-}
+QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
+					struct dp_pdev *pdev);
 #endif
 
 /**

+ 15 - 72
dp/wifi3.0/dp_main.c

@@ -2633,18 +2633,6 @@ dp_rx_fst_detach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev)
 	}
 	pdev->rx_fst = NULL;
 }
-#elif defined(WLAN_SUPPORT_RX_FISA)
-QDF_STATUS
-dp_rx_fst_attach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev)
-{
-	return dp_rx_fst_attach(soc, pdev);
-}
-
-void
-dp_rx_fst_detach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev)
-{
-	dp_rx_fst_detach(soc, pdev);
-}
 #else
 QDF_STATUS
 dp_rx_fst_attach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev)
@@ -3346,65 +3334,14 @@ dp_rx_target_fst_config(struct dp_soc *soc)
 	}
 	return status;
 }
-#elif defined(WLAN_SUPPORT_RX_FISA)
-/**
- * dp_rx_target_fst_config() - Configure RX OLE FSE engine in HW
- * @soc: SoC handle
- *
- * Return: Success
- */
-static inline QDF_STATUS dp_rx_target_fst_config(struct dp_soc *soc)
-{
-	QDF_STATUS status;
-	struct dp_rx_fst *fst = soc->rx_fst;
-
-	/* Check if it is enabled in the INI */
-	if (!soc->fisa_enable) {
-		dp_err("RX FISA feature is disabled");
-		return QDF_STATUS_E_NOSUPPORT;
-	}
-
-	status = dp_rx_flow_send_fst_fw_setup(soc, soc->pdev_list[0]);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		dp_err("dp_rx_flow_send_fst_fw_setup failed %d",
-		       status);
-		return status;
-	}
-
-	if (soc->fst_cmem_base) {
-		soc->fst_in_cmem = true;
-		dp_rx_fst_update_cmem_params(soc, fst->max_entries,
-					     soc->fst_cmem_base & 0xffffffff,
-					     soc->fst_cmem_base >> 32);
-	}
-	return status;
-}
-
-#define FISA_MAX_TIMEOUT 0xffffffff
-#define FISA_DISABLE_TIMEOUT 0
-static QDF_STATUS dp_rx_fisa_config(struct dp_soc *soc)
-{
-	struct dp_htt_rx_fisa_cfg fisa_config;
-
-	fisa_config.pdev_id = 0;
-	fisa_config.fisa_timeout = FISA_MAX_TIMEOUT;
-
-	return dp_htt_rx_fisa_config(soc->pdev_list[0], &fisa_config);
-}
-
 #else /* !WLAN_SUPPORT_RX_FISA */
 static inline QDF_STATUS dp_rx_target_fst_config(struct dp_soc *soc)
 {
 	return QDF_STATUS_SUCCESS;
 }
-#endif /* !WLAN_SUPPORT_RX_FISA */
+#endif
 
 #ifndef WLAN_SUPPORT_RX_FISA
-static QDF_STATUS dp_rx_fisa_config(struct dp_soc *soc)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
 static QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc)
 {
 	return QDF_STATUS_SUCCESS;
@@ -3552,14 +3489,6 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
 		return status;
 	}
 
-	if (status == QDF_STATUS_SUCCESS) {
-		status = dp_rx_fisa_config(soc);
-		if (status != QDF_STATUS_SUCCESS) {
-			dp_err("Failed to send htt FISA config message to target");
-			return status;
-		}
-	}
-
 	DP_STATS_INIT(soc);
 
 	dp_runtime_init(soc);
@@ -11054,6 +10983,17 @@ void dp_set_tx_pause(struct cdp_soc_t *soc_hdl, bool flag)
 	soc->is_tx_pause = flag;
 }
 
+static inline uint64_t dp_rx_fisa_get_cmem_base(struct cdp_soc_t *soc_hdl,
+						uint64_t size)
+{
+	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
+
+	if (soc->arch_ops.dp_get_fst_cmem_base)
+		return soc->arch_ops.dp_get_fst_cmem_base(soc, size);
+
+	return 0;
+}
+
 #ifdef DP_TX_PACKET_INSPECT_FOR_ILP
 /**
  * dp_evaluate_update_tx_ilp_config() - Evaluate and update DP TX
@@ -11242,6 +11182,9 @@ static struct cdp_cmn_ops dp_ops_cmn = {
 	.txrx_get_tsf_time = dp_get_tsf_time,
 	.txrx_get_tsf2_offset = dp_get_tsf2_scratch_reg,
 	.txrx_get_tqm_offset = dp_get_tqm_scratch_reg,
+#ifdef WLAN_SUPPORT_RX_FISA
+	.get_fst_cmem_base = dp_rx_fisa_get_cmem_base,
+#endif
 };
 
 static struct cdp_ctrl_ops dp_ops_ctrl = {

+ 2 - 0
dp/wifi3.0/dp_types.h

@@ -2237,6 +2237,7 @@ enum dp_context_type {
  * @txrx_soc_ppeds_enabled_check:
  * @txrx_soc_ppeds_txdesc_pool_reset:
  * @dp_update_ring_hptp: Update rings hptp during suspend/resume
+ * @dp_get_fst_cmem_base: Get CMEM base address for FISA
  */
 struct dp_arch_ops {
 	/* INIT/DEINIT Arch Ops */
@@ -2496,6 +2497,7 @@ struct dp_arch_ops {
 						 qdf_nbuf_t *nbuf_list);
 #endif
 	void (*dp_update_ring_hptp)(struct dp_soc *soc, bool force_flush_tx);
+	uint64_t (*dp_get_fst_cmem_base)(struct dp_soc *soc, uint64_t size);
 };
 
 /**