qcacmn: Increse num TX rings for QCN9224

This change includes below
1) Changes needed to increase Tx rings to 4
2) Use WBM2SW4 ring for rx error in QCN9224
3) memset srng at alloc to avoid populating RBM_id
in per packet path and enable implicit RBM

Change-Id: Icbd5ac2378273b8f3c6adc41c611e29551fff22f
This commit is contained in:
Chaithanya Garrepalli
2021-10-09 14:47:58 +05:30
committed by Madan Koyyalamudi
parent de13832745
commit 3c3e5709ac
15 changed files with 148 additions and 23 deletions

View File

@@ -37,7 +37,6 @@ static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RIN
{3, 6, HAL_BE_WBM_SW5_BM_ID, 0},
{4, 7, HAL_BE_WBM_SW6_BM_ID, 0}
};
#else
#define DP_TX_VDEV_ID_CHECK_ENABLE 1
@@ -52,6 +51,10 @@ static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RIN
static void dp_soc_cfg_attach_be(struct dp_soc *soc)
{
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
soc->wlan_cfg_ctx->tcl_wbm_map_array = g_tcl_wbm_map_array;
/* this is used only when dmac mode is enabled */

View File

@@ -69,6 +69,13 @@
/* 4K aligned case, number of bits HW append for one PPT entry value */
#define DP_CC_PPT_ENTRY_HW_APEND_BITS_4K_ALIGNED 12
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
/* WBM2SW ring id for rx release */
#define WBM2SW_REL_ERR_RING_NUM 3
#else
/* WBM2SW ring id for rx release */
#define WBM2SW_REL_ERR_RING_NUM 5
#endif
/**
* struct dp_spt_page_desc - secondary page table page descriptors
* @next: pointer to next linked SPT page Desc

View File

@@ -1167,11 +1167,15 @@ uint8_t *dp_srng_get_near_full_irq_mask(struct dp_soc *soc,
enum hal_ring_type ring_type,
int ring_num)
{
struct wlan_cfg_dp_soc_ctxt *cfg_ctx = soc->wlan_cfg_ctx;
uint8_t wbm2_sw_rx_rel_ring_id;
uint8_t *nf_irq_mask = NULL;
switch (ring_type) {
case WBM2SW_RELEASE:
if (ring_num != WBM2SW_REL_ERR_RING_NUM) {
wbm2_sw_rx_rel_ring_id =
wlan_cfg_get_rx_rel_ring_id(soc_cfg_ctx);
if (ring_num != wbm2_sw_rx_rel_ring_id) {
nf_irq_mask = &soc->wlan_cfg_ctx->
int_tx_ring_near_full_irq_mask[0];
}
@@ -1354,10 +1358,13 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
struct wlan_cfg_dp_soc_ctxt *cfg_ctx = soc->wlan_cfg_ctx;
uint8_t *grp_mask, *nf_irq_mask = NULL;
bool nf_irq_enabled = false;
uint8_t wbm2_sw_rx_rel_ring_id;
switch (ring_type) {
case WBM2SW_RELEASE:
if (ring_num == WBM2SW_REL_ERR_RING_NUM) {
wbm2_sw_rx_rel_ring_id =
wlan_cfg_get_rx_rel_ring_id(cfg_ctx);
if (ring_num == wbm2_sw_rx_rel_ring_id) {
/* dp_rx_wbm_err_process - soc->rx_rel_ring */
grp_mask = &cfg_ctx->int_rx_wbm_rel_ring_mask[0];
ring_num = 0;
@@ -1961,11 +1968,17 @@ void *dp_srng_aligned_mem_alloc_consistent(struct dp_soc *soc,
uint32_t ring_type)
{
return qdf_aligned_mem_alloc_consistent(soc->osdev, &srng->alloc_size,
void *mem;
mem = qdf_aligned_mem_alloc_consistent(soc->osdev, &srng->alloc_size,
&srng->base_vaddr_unaligned,
&srng->base_paddr_unaligned,
&srng->base_paddr_aligned,
DP_RING_BASE_ALIGN);
if (mem)
qdf_mem_set(srng->base_vaddr_unaligned, 0, srng->alloc_size);
return mem;
}
static inline void dp_srng_mem_free_consistent(struct dp_soc *soc,
@@ -13070,6 +13083,7 @@ static QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
{
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
uint8_t i;
uint8_t wbm2_sw_rx_rel_ring_id;
soc_cfg_ctx = soc->wlan_cfg_ctx;
@@ -13125,9 +13139,10 @@ static QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
WLAN_MD_DP_SRNG_REO_REINJECT,
"reo_reinject_ring");
wbm2_sw_rx_rel_ring_id = wlan_cfg_get_rx_rel_ring_id(soc_cfg_ctx);
/* Rx release ring */
if (dp_srng_init(soc, &soc->rx_rel_ring, WBM2SW_RELEASE,
WBM2SW_REL_ERR_RING_NUM, 0)) {
wbm2_sw_rx_rel_ring_id, 0)) {
dp_init_err("%pK: dp_srng_init failed for rx_rel_ring", soc);
goto fail1;
}

View File

@@ -2509,7 +2509,7 @@ QDF_STATUS dp_rx_pdev_desc_pool_init(struct dp_pdev *pdev)
rx_sw_desc_num =
wlan_cfg_get_dp_soc_rx_sw_desc_num(soc->wlan_cfg_ctx);
rx_desc_pool->owner = DP_WBM2SW_RBM(soc->wbm_sw0_bm_id);
rx_desc_pool->owner = dp_rx_get_rx_bm_id(soc);
rx_desc_pool->buf_size = RX_DATA_BUFFER_SIZE;
rx_desc_pool->buf_alignment = RX_DATA_BUFFER_ALIGNMENT;
/* Disable monitor dest processing via frag */

View File

@@ -39,9 +39,6 @@
#define DP_WBM2SW_RBM(sw0_bm_id) HAL_RX_BUF_RBM_SW1_BM(sw0_bm_id)
/* RBM value used for re-injecting defragmented packets into REO */
#define DP_DEFRAG_RBM(sw0_bm_id) HAL_RX_BUF_RBM_SW3_BM(sw0_bm_id)
#else
#define DP_WBM2SW_RBM(sw0_bm_id) HAL_RX_BUF_RBM_SW3_BM(sw0_bm_id)
#define DP_DEFRAG_RBM(sw0_bm_id) DP_WBM2SW_RBM(sw0_bm_id)
#endif /* QCA_HOST2FW_RXBUF_RING */
#define RX_BUFFER_RESERVATION 0
@@ -2026,6 +2023,38 @@ dp_rx_is_list_ready(qdf_nbuf_t nbuf_head,
}
#endif
#ifdef QCA_HOST2FW_RXBUF_RING
static inline uint8_t
dp_rx_get_defrag_bm_id(struct dp_soc *soc)
{
return DP_DEFRAG_RBM(soc->wbm_sw0_bm_id);
}
static inline uint8_t
dp_rx_get_rx_bm_id(struct dp_soc *soc)
{
return DP_WBM2SW_RBM(soc->wbm_sw0_bm_id);
}
#else
static inline uint8_t
dp_rx_get_rx_bm_id(struct dp_soc *soc)
{
struct wlan_cfg_dp_soc_ctxt *cfg_ctx = soc->wlan_cfg_ctx;
uint8_t wbm2_sw_rx_rel_ring_id;
wbm2_sw_rx_rel_ring_id = wlan_cfg_get_rx_rel_ring_id(cfg_ctx);
return HAL_RX_BUF_RBM_SW_BM(soc->wbm_sw0_bm_id,
wbm2_sw_rx_rel_ring_id);
}
static inline uint8_t
dp_rx_get_defrag_bm_id(struct dp_soc *soc)
{
return dp_rx_get_rx_bm_id(soc);
}
#endif
/**
* dp_rx_desc_pool_init_generic() - Generic Rx descriptors initialization
* @soc: SOC handle

View File

@@ -1257,6 +1257,7 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_peer *peer,
qdf_nbuf_t nbuf_head;
struct rx_desc_pool *rx_desc_pool = NULL;
void *buf_addr_info = HAL_RX_REO_BUF_ADDR_INFO_GET(dst_ring_desc);
uint8_t rx_defrag_rbm_id = dp_rx_get_defrag_bm_id(soc);
/* do duplicate link desc address check */
dp_rx_link_desc_refill_duplicate_check(
@@ -1350,7 +1351,7 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_peer *peer,
}
hal_rxdma_buff_addr_info_set(soc->hal_soc, msdu0, paddr, cookie,
DP_DEFRAG_RBM(soc->wbm_sw0_bm_id));
rx_defrag_rbm_id);
/* Lets fill entrance ring now !!! */
if (qdf_unlikely(hal_srng_access_start(soc->hal_soc, hal_srng))) {
@@ -1362,7 +1363,7 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_peer *peer,
}
dp_rx_reinject_ring_record_entry(soc, paddr, cookie,
DP_DEFRAG_RBM(soc->wbm_sw0_bm_id));
rx_defrag_rbm_id);
paddr = (uint64_t)buf_info.paddr;
/* buf addr */
hal_rxdma_buff_addr_info_set(soc->hal_soc, ent_ring_desc, paddr,

View File

@@ -2216,11 +2216,11 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
msdu_list.rbm[0]);
// TODO - BE- Check if the RBM is to be checked for all chips
if (qdf_unlikely((msdu_list.rbm[0] !=
DP_WBM2SW_RBM(soc->wbm_sw0_bm_id)) &&
dp_rx_get_rx_bm_id(soc)) &&
(msdu_list.rbm[0] !=
HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST) &&
(msdu_list.rbm[0] !=
DP_DEFRAG_RBM(soc->wbm_sw0_bm_id)))) {
dp_rx_get_defrag_bm_id(soc)))) {
/* TODO */
/* Call appropriate handler */
if (!wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx)) {

View File

@@ -4496,7 +4496,7 @@ void dp_tx_process_htt_completion(struct dp_soc *soc,
goto release_tx_desc;
}
default:
dp_tx_comp_alert("Invalid HTT tx_status %d\n",
dp_tx_comp_err("Invalid HTT tx_status %d\n",
tx_status);
goto release_tx_desc;
}

View File

@@ -39,7 +39,11 @@ static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RIN
static void dp_soc_cfg_attach_li(struct dp_soc *soc)
{
soc->wlan_cfg_ctx->tcl_wbm_map_array = g_tcl_wbm_map_array;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
wlan_cfg_set_rx_rel_ring_id(soc_cfg_ctx, WBM2SW_REL_ERR_RING_NUM);
soc_cfg_ctx->tcl_wbm_map_array = g_tcl_wbm_map_array;
}
qdf_size_t dp_get_context_size_li(enum dp_context_type context_type)

View File

@@ -21,6 +21,9 @@
#include <dp_types.h>
#include <hal_li_tx.h>
/* WBM2SW ring id for rx release */
#define WBM2SW_REL_ERR_RING_NUM 3
/**
* struct dp_soc_li - Extended DP soc for LI targets
* @soc: dp soc structure

View File

@@ -602,6 +602,35 @@ hal_tx_config_rbm_mapping_be(hal_soc_handle_t hal_soc_hdl,
*
* Return: void
*/
#ifdef DP_TX_IMPLICIT_RBM_MAPPING
static inline void
hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl, void *desc,
dma_addr_t paddr, uint8_t rbm_id,
uint32_t desc_id, uint8_t type)
{
/* Set buffer_addr_info.buffer_addr_31_0 */
HAL_SET_FLD(desc, TCL_DATA_CMD,
BUF_ADDR_INFO_BUFFER_ADDR_31_0) =
HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_31_0, paddr);
/* Set buffer_addr_info.buffer_addr_39_32 */
HAL_SET_FLD(desc, TCL_DATA_CMD,
BUF_ADDR_INFO_BUFFER_ADDR_39_32) |=
HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_39_32,
(((uint64_t)paddr) >> 32));
/* Set buffer_addr_info.sw_buffer_cookie = desc_id */
HAL_SET_FLD(desc, TCL_DATA_CMD,
BUF_ADDR_INFO_SW_BUFFER_COOKIE) |=
HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_SW_BUFFER_COOKIE,
desc_id);
/* Set Buffer or Ext Descriptor Type */
HAL_SET_FLD(desc, TCL_DATA_CMD,
BUF_OR_EXT_DESC_TYPE) |=
HAL_TX_SM(TCL_DATA_CMD, BUF_OR_EXT_DESC_TYPE, type);
}
#else
static inline void
hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl, void *desc,
dma_addr_t paddr, uint8_t rbm_id,
@@ -635,6 +664,7 @@ hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl, void *desc,
BUF_OR_EXT_DESC_TYPE) |=
HAL_TX_SM(TCL_DATA_CMD, BUF_OR_EXT_DESC_TYPE, type);
}
#endif
#ifdef HWIO_TCL_R0_VDEV_MCAST_PACKET_CTRL_MAP_n_VAL_SHFT

View File

@@ -253,6 +253,8 @@ enum hal_rx_mpdu_desc_flags {
#define HAL_RX_BUF_RBM_SW5_BM(sw0_bm_id) (sw0_bm_id + 5)
#define HAL_RX_BUF_RBM_SW6_BM(sw0_bm_id) (sw0_bm_id + 6)
#define HAL_RX_BUF_RBM_SW_BM(sw0_bm_id, wbm2sw_id) (sw0_bm_id + wbm2sw_id)
#define HAL_REO_DESTINATION_RING_MSDU_COUNT_OFFSET 0x8
#define HAL_REO_DESTINATION_RING_MSDU_COUNT_LSB 0
#define HAL_REO_DESTINATION_RING_MSDU_COUNT_MASK 0x000000ff

View File

@@ -41,7 +41,7 @@
#define WLAN_CFG_TX_RING_MASK_0 BIT(0)
#define WLAN_CFG_TX_RING_MASK_1 BIT(1)
#define WLAN_CFG_TX_RING_MASK_2 BIT(2)
#define WLAN_CFG_TX_RING_MASK_3 0
#define WLAN_CFG_TX_RING_MASK_3 BIT(3)
#define WLAN_CFG_TX_RING_MASK_4 BIT(4)
#define WLAN_CFG_TX_RING_MASK_5 BIT(5)
#define WLAN_CFG_TX_RING_MASK_6 BIT(6)
@@ -2941,3 +2941,16 @@ void wlan_cfg_set_host2txmon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
}
qdf_export_symbol(wlan_cfg_set_host2txmon_ring_mask);
uint8_t
wlan_cfg_get_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->rx_rel_wbm2sw_ring_id;
}
void
wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t wbm2sw_ring_id)
{
cfg->rx_rel_wbm2sw_ring_id = wbm2sw_ring_id;
}

View File

@@ -380,6 +380,7 @@ struct wlan_cfg_dp_soc_ctxt {
#endif
uint32_t rx_mon_buf_ring_size;
uint32_t tx_mon_buf_ring_size;
uint8_t rx_rel_wbm2sw_ring_id;
};
/**
@@ -1938,4 +1939,23 @@ void wlan_cfg_set_host2txmon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
*/
int wlan_cfg_get_host2txmon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
int context);
/*
* wlan_cfg_get_rx_rel_ring_id() - get wbm2sw ring id for Rx release ring
* @wlan_cfg_ctx - Configuration Handle
*
* Return: wbm2sw ring id
*/
uint8_t
wlan_cfg_get_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg);
/**
* wlan_cfg_set_rx_rel_ring_id() - set wbm2sw ring id for Rx release ring
* @cfg: soc configuration context
*
* Return: None
*/
void
wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
uint8_t wbm2sw_ring_id);
#endif

View File

@@ -76,8 +76,6 @@
#define MAX_REO_DEST_RINGS 8
#define MAX_TCL_DATA_RINGS 5
#define WBM2SW_REL_ERR_RING_NUM 3
#define MAX_RX_MAC_RINGS 2
#endif /* __WLAN_INIT_CFG_H */