qcacmn: FISA init code movement

Move the FISA initialization code out of cmn DP.

Change-Id: I744a69d559225d4a0496b84be9007ab230f2f4a0
CRs-Fixed: 3512034
This commit is contained in:
Rakesh Pillai
2023-05-17 00:30:15 -07:00
committed by Rahul Choudhary
parent aa7c47fe95
commit 60e91fe20b
7 changed files with 52 additions and 125 deletions

View File

@@ -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); 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_ */ #endif /* _CDP_TXRX_CMN_H_ */

View File

@@ -727,6 +727,7 @@ struct cdp_cmn_ops {
void (*txrx_get_tsf2_offset)(struct cdp_soc_t *soc_hdl, uint8_t mac_id, void (*txrx_get_tsf2_offset)(struct cdp_soc_t *soc_hdl, uint8_t mac_id,
uint64_t *value); uint64_t *value);
void (*txrx_get_tqm_offset)(struct cdp_soc_t *soc_hdl, 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 { struct cdp_ctrl_ops {

View File

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

View File

@@ -55,13 +55,10 @@ enum CMEM_MEM_CLIENTS {
#define DP_CC_PPT_MEM_SIZE 8192 #define DP_CC_PPT_MEM_SIZE 8192
#endif #endif
/* FST required CMEM offset from CMEM pool */ /* FST required CMEM offset M pool */
#define DP_FST_MEM_OFFSET_IN_CMEM \ #define DP_FST_MEM_OFFSET_IN_CMEM \
(DP_CC_MEM_OFFSET_IN_CMEM + DP_CC_PPT_MEM_SIZE) (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 */ /* lower 9 bits in Desc ID for offset in page of SPT */
#define DP_CC_DESC_ID_SPT_VA_OS_SHIFT 0 #define DP_CC_DESC_ID_SPT_VA_OS_SHIFT 0

View File

@@ -3926,7 +3926,7 @@ struct cdp_soc_t *dp_soc_to_cdp_soc_t(struct dp_soc *psoc)
return (struct cdp_soc_t *)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 * dp_rx_flow_get_fse_stats() - Retrieve a flow's statistics
* @pdev: pdev handle * @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); 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 * dp_mon_rx_update_rx_flow_tag_stats() - Update a mon flow's statistics
* @pdev: pdev handle * @pdev: pdev handle
@@ -3996,33 +3986,18 @@ QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
*/ */
QDF_STATUS QDF_STATUS
dp_mon_rx_update_rx_flow_tag_stats(struct dp_pdev *pdev, uint32_t flow_id); 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 * @soc: SoC handle
* @pdev: Pdev 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_flow_send_fst_fw_setup(struct dp_soc *soc,
QDF_STATUS dp_rx_fst_attach(struct dp_soc *soc, struct dp_pdev *pdev) 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)
{
}
#endif #endif
/** /**

View File

@@ -2633,18 +2633,6 @@ dp_rx_fst_detach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev)
} }
pdev->rx_fst = NULL; 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 #else
QDF_STATUS QDF_STATUS
dp_rx_fst_attach_wrapper(struct dp_soc *soc, struct dp_pdev *pdev) 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; 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 */ #else /* !WLAN_SUPPORT_RX_FISA */
static inline QDF_STATUS dp_rx_target_fst_config(struct dp_soc *soc) static inline QDF_STATUS dp_rx_target_fst_config(struct dp_soc *soc)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
#endif /* !WLAN_SUPPORT_RX_FISA */ #endif
#ifndef WLAN_SUPPORT_RX_FISA #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) static QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc)
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
@@ -3552,14 +3489,6 @@ dp_soc_attach_target_wifi3(struct cdp_soc_t *cdp_soc)
return status; 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_STATS_INIT(soc);
dp_runtime_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; 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 #ifdef DP_TX_PACKET_INSPECT_FOR_ILP
/** /**
* dp_evaluate_update_tx_ilp_config() - Evaluate and update DP TX * 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_tsf_time = dp_get_tsf_time,
.txrx_get_tsf2_offset = dp_get_tsf2_scratch_reg, .txrx_get_tsf2_offset = dp_get_tsf2_scratch_reg,
.txrx_get_tqm_offset = dp_get_tqm_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 = { static struct cdp_ctrl_ops dp_ops_ctrl = {

View File

@@ -2237,6 +2237,7 @@ enum dp_context_type {
* @txrx_soc_ppeds_enabled_check: * @txrx_soc_ppeds_enabled_check:
* @txrx_soc_ppeds_txdesc_pool_reset: * @txrx_soc_ppeds_txdesc_pool_reset:
* @dp_update_ring_hptp: Update rings hptp during suspend/resume * @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 { struct dp_arch_ops {
/* INIT/DEINIT Arch Ops */ /* INIT/DEINIT Arch Ops */
@@ -2496,6 +2497,7 @@ struct dp_arch_ops {
qdf_nbuf_t *nbuf_list); qdf_nbuf_t *nbuf_list);
#endif #endif
void (*dp_update_ring_hptp)(struct dp_soc *soc, bool force_flush_tx); 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);
}; };
/** /**