diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index e9249696f4..cb9ed8ca2d 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/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_ */ diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 8834636004..d94948348e 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/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 { diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index f16f1bfe6d..12ea890e01 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/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 QDF_STATUS_SUCCESS; + return dp_get_cmem_chunk(soc, size, FISA_FST); } -#else /* !WLAN_SUPPORT_RX_FISA */ -static inline QDF_STATUS dp_fisa_fst_cmem_addr_init(struct dp_soc *soc) + +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 +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 diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index 0c3c7c8fdc..03ef113bae 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/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 diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index fb14e8797b..a541e9aedd 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/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)) */ - +#ifdef WLAN_SUPPORT_RX_FLOW_TAG /** - * dp_rx_fst_attach() - Initialize Rx FST and setup necessary parameters + * dp_rx_flow_send_fst_fw_setup() - Program FST parameters in FW/HW post-attach * @soc: SoC handle * @pdev: Pdev handle * - * Return: Handle to flow search table entry + * Return: Success when fst parameters are programmed in FW, error otherwise */ -static inline -QDF_STATUS dp_rx_fst_attach(struct dp_soc *soc, struct dp_pdev *pdev) -{ - return QDF_STATUS_SUCCESS; -} - -/** - * dp_rx_fst_detach() - De-initialize Rx FST - * @soc: SoC handle - * @pdev: Pdev handle - * - * Return: None - */ -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 /** diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 9486eaed72..ee33df31c8 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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 = { diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 3c9b8d4275..42417d22b6 100644 --- a/dp/wifi3.0/dp_types.h +++ b/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); }; /**