From c78b55df2cfae36da52748213a40ffa6c716fbb2 Mon Sep 17 00:00:00 2001 From: Jia Ding Date: Fri, 17 Dec 2021 14:12:50 +0800 Subject: [PATCH] qcacmn: Define IPA TX ring indexes for WCN7850 As part of IPA offload support for WCN7850 chipset, properly define TX ring indexes into soc->tcl_data_ring[] and soc->tx_comp_ring[] used by IPA. In the change, use wlan_cfg_get_rbm_id_for_index() to get correct rbm values for WBM2SW ring used by IPA. Change-Id: Ie5b6743c1cb2adfa156735fc84dc1429a67f833a CRs-Fixed: 3246038 --- dp/wifi3.0/dp_ipa.c | 19 ++++++++++--------- dp/wifi3.0/dp_ipa.h | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/dp/wifi3.0/dp_ipa.c b/dp/wifi3.0/dp_ipa.c index 25ff201956..3034ce80cf 100644 --- a/dp/wifi3.0/dp_ipa.c +++ b/dp/wifi3.0/dp_ipa.c @@ -41,9 +41,6 @@ #include "dp_txrx_wds.h" #endif -/* Ring index for WBM2SW2 release ring */ -#define IPA_TX_COMP_RING_IDX HAL_IPA_TX_COMP_RING_IDX - /* Hard coded config parameters until dp_ops_cfg.cfg_attach implemented */ #define CFG_IPA_UC_TX_BUF_SIZE_DEFAULT (2048) @@ -436,7 +433,7 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc) struct hal_srng *wbm_srng = (struct hal_srng *) soc->tx_comp_ring[IPA_TX_ALT_COMP_RING_IDX].hal_srng; struct hal_srng_params srng_params; - uint32_t wbm_sw0_bm_id = soc->wbm_sw0_bm_id; + uint32_t wbm_bm_id; void *ring_entry; int num_entries; qdf_nbuf_t nbuf; @@ -451,6 +448,9 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc) unsigned int uc_tx_buf_sz = CFG_IPA_UC_TX_BUF_SIZE_DEFAULT; unsigned int alloc_size = uc_tx_buf_sz + ring_base_align - 1; + wbm_bm_id = wlan_cfg_get_rbm_id_for_index(soc->wlan_cfg_ctx, + IPA_TX_ALT_RING_IDX); + hal_get_srng_params(soc->hal_soc, hal_srng_to_hal_ring_handle(wbm_srng), &srng_params); @@ -508,8 +508,7 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc) qdf_mem_dp_tx_skb_inc(qdf_nbuf_get_end_offset(nbuf)); hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry, - buffer_paddr, 0, - HAL_WBM_SW4_BM_ID(wbm_sw0_bm_id)); + buffer_paddr, 0, wbm_bm_id); soc->ipa_uc_tx_rsc_alt.tx_buf_pool_vaddr_unaligned[ tx_buffer_count] = (void *)nbuf; @@ -1206,6 +1205,7 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev) qdf_nbuf_t nbuf; int retval = QDF_STATUS_SUCCESS; int max_alloc_count = 0; + uint32_t wbm_bm_id; /* * Uncomment when dp_ops_cfg.cfg_attach is implemented @@ -1215,6 +1215,9 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev) unsigned int uc_tx_buf_sz = CFG_IPA_UC_TX_BUF_SIZE_DEFAULT; unsigned int alloc_size = uc_tx_buf_sz + ring_base_align - 1; + wbm_bm_id = wlan_cfg_get_rbm_id_for_index(soc->wlan_cfg_ctx, + IPA_TCL_DATA_RING_IDX); + hal_get_srng_params(soc->hal_soc, hal_srng_to_hal_ring_handle(wbm_srng), &srng_params); num_entries = srng_params.num_entries; @@ -1274,9 +1277,7 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev) * instead of hal soc ops. */ hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry, - buffer_paddr, 0, - (IPA_TCL_DATA_RING_IDX + - soc->wbm_sw0_bm_id)); + buffer_paddr, 0, wbm_bm_id); soc->ipa_uc_tx_rsc.tx_buf_pool_vaddr_unaligned[tx_buffer_count] = (void *)nbuf; diff --git a/dp/wifi3.0/dp_ipa.h b/dp/wifi3.0/dp_ipa.h index 8ea7261444..c4f353834b 100644 --- a/dp/wifi3.0/dp_ipa.h +++ b/dp/wifi3.0/dp_ipa.h @@ -18,7 +18,15 @@ #ifndef _DP_IPA_H_ #define _DP_IPA_H_ +#if defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_KIWI_V2) +/* Index into soc->tcl_data_ring[] */ +#define IPA_TCL_DATA_RING_IDX 3 +#else #define IPA_TCL_DATA_RING_IDX 2 +#endif +/* Index into soc->tx_comp_ring[] */ +#define IPA_TX_COMP_RING_IDX IPA_TCL_DATA_RING_IDX + #ifdef IPA_OFFLOAD #define DP_IPA_MAX_IFACE 3 @@ -32,14 +40,21 @@ #define TX_COMP_DRAIN_WAIT_TIMEOUT_MS 100 #ifdef IPA_WDI3_TX_TWO_PIPES +#if defined(QCA_WIFI_KIWI) || defined(QCA_WIFI_KIWI_V2) +/* Index into soc->tcl_data_ring[] and soc->tx_comp_ring[] */ +#define IPA_TX_ALT_RING_IDX 4 +#define IPA_TX_ALT_COMP_RING_IDX IPA_TX_ALT_RING_IDX +#else /* !KIWI */ #define IPA_TX_ALT_RING_IDX 1 /* * must be same as IPA_TX_ALT_RING_IDX as tcl and wbm ring * are initialized with same index as a pair. */ #define IPA_TX_ALT_COMP_RING_IDX 1 +#endif /* KIWI */ + #define IPA_SESSION_ID_SHIFT 1 -#endif +#endif /* IPA_WDI3_TX_TWO_PIPES */ /** * struct dp_ipa_uc_tx_hdr - full tx header registered to IPA hardware