qcacmn: Add ini support to modify IPA tx and tx_comp ring sizes
Currently IPA tx buffers are fixed at 1007 buffers. Adding INI support to change number of TX buffers at load time. Change-Id: Ide0357554f34759198276b9699e0e6f4a3e20051 CRs-Fixed: 2957916
This commit is contained in:

committed by
Madan Koyyalamudi

parent
79f2d89f69
commit
b5a3efab59
@@ -3742,14 +3742,16 @@ static bool dp_ipa_is_alt_tx_comp_ring(int index)
|
|||||||
*
|
*
|
||||||
* @tx_ring_num: Tx ring number
|
* @tx_ring_num: Tx ring number
|
||||||
* @tx_ipa_ring_sz: Return param only updated for IPA.
|
* @tx_ipa_ring_sz: Return param only updated for IPA.
|
||||||
|
* @soc_cfg_ctx: dp soc cfg context
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void dp_ipa_get_tx_ring_size(int tx_ring_num, int *tx_ipa_ring_sz)
|
static void dp_ipa_get_tx_ring_size(int tx_ring_num, int *tx_ipa_ring_sz,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx)
|
||||||
{
|
{
|
||||||
if (tx_ring_num == IPA_TCL_DATA_RING_IDX ||
|
if (tx_ring_num == IPA_TCL_DATA_RING_IDX ||
|
||||||
dp_ipa_is_alt_tx_ring(tx_ring_num))
|
dp_ipa_is_alt_tx_ring(tx_ring_num))
|
||||||
*tx_ipa_ring_sz = WLAN_CFG_IPA_TX_RING_SIZE;
|
*tx_ipa_ring_sz = wlan_cfg_ipa_tx_ring_size(soc_cfg_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3757,15 +3759,18 @@ static void dp_ipa_get_tx_ring_size(int tx_ring_num, int *tx_ipa_ring_sz)
|
|||||||
*
|
*
|
||||||
* @tx_comp_ring_num: Tx comp ring number
|
* @tx_comp_ring_num: Tx comp ring number
|
||||||
* @tx_comp_ipa_ring_sz: Return param only updated for IPA.
|
* @tx_comp_ipa_ring_sz: Return param only updated for IPA.
|
||||||
|
* @soc_cfg_ctx: dp soc cfg context
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void dp_ipa_get_tx_comp_ring_size(int tx_comp_ring_num,
|
static void dp_ipa_get_tx_comp_ring_size(int tx_comp_ring_num,
|
||||||
int *tx_comp_ipa_ring_sz)
|
int *tx_comp_ipa_ring_sz,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx)
|
||||||
{
|
{
|
||||||
if (tx_comp_ring_num == IPA_TCL_DATA_RING_IDX ||
|
if (tx_comp_ring_num == IPA_TCL_DATA_RING_IDX ||
|
||||||
dp_ipa_is_alt_tx_comp_ring(tx_comp_ring_num))
|
dp_ipa_is_alt_tx_comp_ring(tx_comp_ring_num))
|
||||||
*tx_comp_ipa_ring_sz = WLAN_CFG_IPA_TX_COMP_RING_SIZE;
|
*tx_comp_ipa_ring_sz =
|
||||||
|
wlan_cfg_ipa_tx_comp_ring_size(soc_cfg_ctx);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring)
|
static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring)
|
||||||
@@ -3899,12 +3904,14 @@ static bool dp_reo_remap_config(struct dp_soc *soc,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dp_ipa_get_tx_ring_size(int ring_num, int *tx_ipa_ring_sz)
|
static void dp_ipa_get_tx_ring_size(int ring_num, int *tx_ipa_ring_sz,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dp_ipa_get_tx_comp_ring_size(int tx_comp_ring_num,
|
static void dp_ipa_get_tx_comp_ring_size(int tx_comp_ring_num,
|
||||||
int *tx_comp_ipa_ring_sz)
|
int *tx_comp_ipa_ring_sz,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif /* IPA_OFFLOAD */
|
#endif /* IPA_OFFLOAD */
|
||||||
@@ -4051,7 +4058,7 @@ static QDF_STATUS dp_alloc_tx_ring_pair_by_index(struct dp_soc *soc,
|
|||||||
int cached = 0;
|
int cached = 0;
|
||||||
|
|
||||||
tx_ring_size = wlan_cfg_tx_ring_size(soc_cfg_ctx);
|
tx_ring_size = wlan_cfg_tx_ring_size(soc_cfg_ctx);
|
||||||
dp_ipa_get_tx_ring_size(index, &tx_ring_size);
|
dp_ipa_get_tx_ring_size(index, &tx_ring_size, soc_cfg_ctx);
|
||||||
|
|
||||||
if (dp_srng_alloc(soc, &soc->tcl_data_ring[index], TCL_DATA,
|
if (dp_srng_alloc(soc, &soc->tcl_data_ring[index], TCL_DATA,
|
||||||
tx_ring_size, cached)) {
|
tx_ring_size, cached)) {
|
||||||
@@ -4060,7 +4067,7 @@ static QDF_STATUS dp_alloc_tx_ring_pair_by_index(struct dp_soc *soc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
tx_comp_ring_size = wlan_cfg_tx_comp_ring_size(soc_cfg_ctx);
|
tx_comp_ring_size = wlan_cfg_tx_comp_ring_size(soc_cfg_ctx);
|
||||||
dp_ipa_get_tx_comp_ring_size(index, &tx_comp_ring_size);
|
dp_ipa_get_tx_comp_ring_size(index, &tx_comp_ring_size, soc_cfg_ctx);
|
||||||
/* Enable cached TCL desc if NSS offload is disabled */
|
/* Enable cached TCL desc if NSS offload is disabled */
|
||||||
if (!wlan_cfg_get_dp_soc_nss_cfg(soc_cfg_ctx))
|
if (!wlan_cfg_get_dp_soc_nss_cfg(soc_cfg_ctx))
|
||||||
cached = WLAN_CFG_DST_RING_CACHED_DESC;
|
cached = WLAN_CFG_DST_RING_CACHED_DESC;
|
||||||
|
@@ -63,8 +63,13 @@
|
|||||||
#define WLAN_CFG_TX_RING_SIZE 1024
|
#define WLAN_CFG_TX_RING_SIZE 1024
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define WLAN_CFG_IPA_TX_RING_SIZE_MIN 1024
|
||||||
#define WLAN_CFG_IPA_TX_RING_SIZE 1024
|
#define WLAN_CFG_IPA_TX_RING_SIZE 1024
|
||||||
|
#define WLAN_CFG_IPA_TX_RING_SIZE_MAX 8096
|
||||||
|
|
||||||
|
#define WLAN_CFG_IPA_TX_COMP_RING_SIZE_MIN 1024
|
||||||
#define WLAN_CFG_IPA_TX_COMP_RING_SIZE 1024
|
#define WLAN_CFG_IPA_TX_COMP_RING_SIZE 1024
|
||||||
|
#define WLAN_CFG_IPA_TX_COMP_RING_SIZE_MAX 8096
|
||||||
|
|
||||||
#define WLAN_CFG_PER_PDEV_TX_RING 0
|
#define WLAN_CFG_PER_PDEV_TX_RING 0
|
||||||
#define WLAN_CFG_IPA_UC_TX_BUF_SIZE 2048
|
#define WLAN_CFG_IPA_UC_TX_BUF_SIZE 2048
|
||||||
@@ -1118,6 +1123,62 @@
|
|||||||
CFG_INI_BOOL("gForceRX64BA", \
|
CFG_INI_BOOL("gForceRX64BA", \
|
||||||
false, "Enable/Disable force 64 blockack in RX side")
|
false, "Enable/Disable force 64 blockack in RX side")
|
||||||
|
|
||||||
|
#ifdef IPA_OFFLOAD
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* dp_ipa_tx_ring_size - Set tcl ring size for IPA
|
||||||
|
* @Min: 1024
|
||||||
|
* @Max: 8096
|
||||||
|
* @Default: 1024
|
||||||
|
*
|
||||||
|
* This ini sets the tcl ring size for IPA
|
||||||
|
*
|
||||||
|
* Related: N/A
|
||||||
|
*
|
||||||
|
* Supported Feature: IPA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_DP_IPA_TX_RING_SIZE \
|
||||||
|
CFG_INI_UINT("dp_ipa_tx_ring_size", \
|
||||||
|
WLAN_CFG_IPA_TX_RING_SIZE_MIN, \
|
||||||
|
WLAN_CFG_IPA_TX_RING_SIZE_MAX, \
|
||||||
|
WLAN_CFG_IPA_TX_RING_SIZE, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, "IPA TCL ring size")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* dp_ipa_tx_comp_ring_size - Set tx comp ring size for IPA
|
||||||
|
* @Min: 1024
|
||||||
|
* @Max: 8096
|
||||||
|
* @Default: 1024
|
||||||
|
*
|
||||||
|
* This ini sets the tx comp ring size for IPA
|
||||||
|
*
|
||||||
|
* Related: N/A
|
||||||
|
*
|
||||||
|
* Supported Feature: IPA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_DP_IPA_TX_COMP_RING_SIZE \
|
||||||
|
CFG_INI_UINT("dp_ipa_tx_comp_ring_size", \
|
||||||
|
WLAN_CFG_IPA_TX_COMP_RING_SIZE_MIN, \
|
||||||
|
WLAN_CFG_IPA_TX_COMP_RING_SIZE_MAX, \
|
||||||
|
WLAN_CFG_IPA_TX_COMP_RING_SIZE, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, "IPA tx comp ring size")
|
||||||
|
|
||||||
|
#define CFG_DP_IPA_TX_RING_CFG \
|
||||||
|
CFG(CFG_DP_IPA_TX_RING_SIZE) \
|
||||||
|
CFG(CFG_DP_IPA_TX_COMP_RING_SIZE)
|
||||||
|
#else
|
||||||
|
#define CFG_DP_IPA_TX_RING_CFG
|
||||||
|
#endif
|
||||||
|
|
||||||
#define CFG_DP \
|
#define CFG_DP \
|
||||||
CFG(CFG_DP_HTT_PACKET_TYPE) \
|
CFG(CFG_DP_HTT_PACKET_TYPE) \
|
||||||
CFG(CFG_DP_INT_BATCH_THRESHOLD_OTHER) \
|
CFG(CFG_DP_INT_BATCH_THRESHOLD_OTHER) \
|
||||||
@@ -1212,5 +1273,6 @@
|
|||||||
CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) \
|
CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) \
|
||||||
CFG(CFG_DP_WOW_CHECK_RX_PENDING) \
|
CFG(CFG_DP_WOW_CHECK_RX_PENDING) \
|
||||||
CFG(CFG_FORCE_RX_64_BA) \
|
CFG(CFG_FORCE_RX_64_BA) \
|
||||||
CFG(CFG_DP_DELAY_MON_REPLENISH)
|
CFG(CFG_DP_DELAY_MON_REPLENISH) \
|
||||||
|
CFG_DP_IPA_TX_RING_CFG
|
||||||
#endif /* _CFG_DP_H_ */
|
#endif /* _CFG_DP_H_ */
|
||||||
|
@@ -887,6 +887,32 @@ void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef IPA_OFFLOAD
|
||||||
|
/**
|
||||||
|
* wlan_soc_ipa_cfg_attach() - Update ipa config in dp soc
|
||||||
|
* cfg context
|
||||||
|
* @psoc - Object manager psoc
|
||||||
|
* @wlan_cfg_ctx - dp soc cfg ctx
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
wlan_soc_ipa_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx)
|
||||||
|
{
|
||||||
|
wlan_cfg_ctx->ipa_tx_ring_size =
|
||||||
|
cfg_get(psoc, CFG_DP_IPA_TX_RING_SIZE);
|
||||||
|
wlan_cfg_ctx->ipa_tx_comp_ring_size =
|
||||||
|
cfg_get(psoc, CFG_DP_IPA_TX_COMP_RING_SIZE);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
wlan_soc_ipa_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc,
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_cfg_soc_attach() - Allocate and prepare SoC configuration
|
* wlan_cfg_soc_attach() - Allocate and prepare SoC configuration
|
||||||
* @psoc - Object manager psoc
|
* @psoc - Object manager psoc
|
||||||
@@ -1063,6 +1089,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
|
|||||||
cfg_get(psoc, CFG_DP_WOW_CHECK_RX_PENDING);
|
cfg_get(psoc, CFG_DP_WOW_CHECK_RX_PENDING);
|
||||||
wlan_cfg_ctx->delay_mon_replenish = cfg_get(psoc,
|
wlan_cfg_ctx->delay_mon_replenish = cfg_get(psoc,
|
||||||
CFG_DP_DELAY_MON_REPLENISH);
|
CFG_DP_DELAY_MON_REPLENISH);
|
||||||
|
wlan_soc_ipa_cfg_attach(psoc, wlan_cfg_ctx);
|
||||||
|
|
||||||
return wlan_cfg_ctx;
|
return wlan_cfg_ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1971,3 +1999,15 @@ void wlan_cfg_dp_soc_ctx_dump(struct wlan_cfg_dp_soc_ctxt *cfg)
|
|||||||
dp_info("reo_dst_ring_size = %d, delayed_replenish_entries = %d",
|
dp_info("reo_dst_ring_size = %d, delayed_replenish_entries = %d",
|
||||||
cfg->reo_dst_ring_size, cfg->delayed_replenish_entries);
|
cfg->reo_dst_ring_size, cfg->delayed_replenish_entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef IPA_OFFLOAD
|
||||||
|
uint32_t wlan_cfg_ipa_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
|
||||||
|
{
|
||||||
|
return cfg->ipa_tx_ring_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t wlan_cfg_ipa_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
|
||||||
|
{
|
||||||
|
return cfg->ipa_tx_comp_ring_size;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -196,6 +196,8 @@ struct wlan_srng_cfg {
|
|||||||
* @is_swlm_enabled: flag to enable/disable SWLM
|
* @is_swlm_enabled: flag to enable/disable SWLM
|
||||||
* @tx_per_pkt_vdev_id_check: Enable tx perpkt vdev id check
|
* @tx_per_pkt_vdev_id_check: Enable tx perpkt vdev id check
|
||||||
* @wow_check_rx_pending_enable: Enable RX frame pending check in WoW
|
* @wow_check_rx_pending_enable: Enable RX frame pending check in WoW
|
||||||
|
* @ipa_tx_ring_size: IPA tx ring size
|
||||||
|
* @ipa_tx_comp_ring_size: IPA tx completion ring size
|
||||||
*/
|
*/
|
||||||
struct wlan_cfg_dp_soc_ctxt {
|
struct wlan_cfg_dp_soc_ctxt {
|
||||||
int num_int_ctxts;
|
int num_int_ctxts;
|
||||||
@@ -317,6 +319,10 @@ struct wlan_cfg_dp_soc_ctxt {
|
|||||||
uint8_t radio1_rx_default_reo;
|
uint8_t radio1_rx_default_reo;
|
||||||
uint8_t radio2_rx_default_reo;
|
uint8_t radio2_rx_default_reo;
|
||||||
bool wow_check_rx_pending_enable;
|
bool wow_check_rx_pending_enable;
|
||||||
|
#ifdef IPA_OFFLOAD
|
||||||
|
uint32_t ipa_tx_ring_size;
|
||||||
|
uint32_t ipa_tx_comp_ring_size;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1524,6 +1530,36 @@ bool wlan_cfg_is_swlm_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
|
|||||||
* Return: force use 64 BA flag
|
* Return: force use 64 BA flag
|
||||||
*/
|
*/
|
||||||
bool wlan_cfg_is_dp_force_rx_64_ba(struct wlan_cfg_dp_soc_ctxt *cfg);
|
bool wlan_cfg_is_dp_force_rx_64_ba(struct wlan_cfg_dp_soc_ctxt *cfg);
|
||||||
|
|
||||||
|
#ifdef IPA_OFFLOAD
|
||||||
|
/*
|
||||||
|
* wlan_cfg_ipa_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)
|
||||||
|
* @wlan_cfg_soc_ctx: dp cfg context
|
||||||
|
*
|
||||||
|
* Return: IPA Tx Ring Size
|
||||||
|
*/
|
||||||
|
uint32_t wlan_cfg_ipa_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wlan_cfg_ipa_tx_comp_ring_size - Get Tx completion ring size (WBM Ring)
|
||||||
|
* @wlan_cfg_soc_ctx: dp cfg context
|
||||||
|
*
|
||||||
|
* Return: IPA Tx Completion ring size
|
||||||
|
*/
|
||||||
|
uint32_t wlan_cfg_ipa_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
uint32_t wlan_cfg_ipa_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
uint32_t wlan_cfg_ipa_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user