qcacmn: Add ini support for RX low threshold interrupts

Add ini param "dp_disable_rx_buf_low_threshold" to disable
low threshold interrupts on regular rx refill ring. Default
it is enabled.

Change-Id: Ie471a4dc6862cbfe8b1eafe7c7d2ce2e0a7fcb7a
CRs-Fixed: 3313885
This commit is contained in:
Chaithanya Garrepalli
2022-10-16 23:14:09 +05:30
committed by Madan Koyyalamudi
parent 5b526f6819
commit 64c4cb3524
4 changed files with 39 additions and 1 deletions

View File

@@ -1905,6 +1905,7 @@ dp_srng_configure_interrupt_thresholds(struct dp_soc *soc,
int num_entries) int num_entries)
{ {
uint8_t wbm2_sw_rx_rel_ring_id; uint8_t wbm2_sw_rx_rel_ring_id;
bool rx_refill_lt_disable;
wbm2_sw_rx_rel_ring_id = wlan_cfg_get_rx_rel_ring_id(soc->wlan_cfg_ctx); wbm2_sw_rx_rel_ring_id = wlan_cfg_get_rx_rel_ring_id(soc->wlan_cfg_ctx);
@@ -1920,6 +1921,18 @@ dp_srng_configure_interrupt_thresholds(struct dp_soc *soc,
wlan_cfg_get_int_timer_threshold_tx(soc->wlan_cfg_ctx); wlan_cfg_get_int_timer_threshold_tx(soc->wlan_cfg_ctx);
ring_params->intr_batch_cntr_thres_entries = ring_params->intr_batch_cntr_thres_entries =
wlan_cfg_get_int_batch_threshold_tx(soc->wlan_cfg_ctx); wlan_cfg_get_int_batch_threshold_tx(soc->wlan_cfg_ctx);
} else if (ring_type == RXDMA_BUF) {
rx_refill_lt_disable =
wlan_cfg_get_dp_soc_rxdma_refill_lt_disable
(soc->wlan_cfg_ctx);
ring_params->intr_timer_thres_us =
wlan_cfg_get_int_timer_threshold_rx(soc->wlan_cfg_ctx);
if (!rx_refill_lt_disable) {
ring_params->low_threshold = num_entries >> 3;
ring_params->flags |= HAL_SRNG_LOW_THRES_INTR_ENABLE;
ring_params->intr_batch_cntr_thres_entries = 0;
}
} else { } else {
ring_params->intr_timer_thres_us = ring_params->intr_timer_thres_us =
wlan_cfg_get_int_timer_threshold_other(soc->wlan_cfg_ctx); wlan_cfg_get_int_timer_threshold_other(soc->wlan_cfg_ctx);
@@ -1947,7 +1960,7 @@ dp_srng_configure_interrupt_thresholds(struct dp_soc *soc,
* monitor buffer rings. * monitor buffer rings.
* TODO: See if this is required for any other ring * TODO: See if this is required for any other ring
*/ */
if ((ring_type == RXDMA_BUF) || (ring_type == RXDMA_MONITOR_BUF) || if ((ring_type == RXDMA_MONITOR_BUF) ||
(ring_type == RXDMA_MONITOR_STATUS || (ring_type == RXDMA_MONITOR_STATUS ||
(ring_type == TX_MONITOR_BUF))) { (ring_type == TX_MONITOR_BUF))) {
/* TODO: Setting low threshold to 1/8th of ring size /* TODO: Setting low threshold to 1/8th of ring size

View File

@@ -1098,6 +1098,10 @@
WLAN_CFG_RXDMA_REFILL_RING_SIZE, \ WLAN_CFG_RXDMA_REFILL_RING_SIZE, \
CFG_VALUE_OR_DEFAULT, "DP RXDMA refilll ring") CFG_VALUE_OR_DEFAULT, "DP RXDMA refilll ring")
#define CFG_DP_RXDMA_REFILL_LT_DISABLE \
CFG_INI_BOOL("dp_disable_rx_buf_low_threshold", false, \
"Disable Low threshold interrupts for Rx Refill ring")
#define CFG_DP_TX_DESC_LIMIT_0 \ #define CFG_DP_TX_DESC_LIMIT_0 \
CFG_INI_UINT("dp_tx_desc_limit_0", \ CFG_INI_UINT("dp_tx_desc_limit_0", \
WLAN_CFG_TX_DESC_LIMIT_0_MIN, \ WLAN_CFG_TX_DESC_LIMIT_0_MIN, \
@@ -1790,6 +1794,7 @@
CFG(CFG_DP_REO_STATUS_RING) \ CFG(CFG_DP_REO_STATUS_RING) \
CFG(CFG_DP_RXDMA_BUF_RING) \ CFG(CFG_DP_RXDMA_BUF_RING) \
CFG(CFG_DP_RXDMA_REFILL_RING) \ CFG(CFG_DP_RXDMA_REFILL_RING) \
CFG(CFG_DP_RXDMA_REFILL_LT_DISABLE) \
CFG(CFG_DP_TX_DESC_LIMIT_0) \ CFG(CFG_DP_TX_DESC_LIMIT_0) \
CFG(CFG_DP_TX_DESC_LIMIT_1) \ CFG(CFG_DP_TX_DESC_LIMIT_1) \
CFG(CFG_DP_TX_DESC_LIMIT_2) \ CFG(CFG_DP_TX_DESC_LIMIT_2) \

View File

@@ -2803,6 +2803,9 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
CFG_DP_REO_STATUS_RING); CFG_DP_REO_STATUS_RING);
wlan_cfg_ctx->rxdma_refill_ring = cfg_get(psoc, wlan_cfg_ctx->rxdma_refill_ring = cfg_get(psoc,
CFG_DP_RXDMA_REFILL_RING); CFG_DP_RXDMA_REFILL_RING);
wlan_cfg_ctx->rxdma_refill_lt_disable =
cfg_get(psoc,
CFG_DP_RXDMA_REFILL_LT_DISABLE);
wlan_cfg_ctx->tx_desc_limit_0 = cfg_get(psoc, wlan_cfg_ctx->tx_desc_limit_0 = cfg_get(psoc,
CFG_DP_TX_DESC_LIMIT_0); CFG_DP_TX_DESC_LIMIT_0);
wlan_cfg_ctx->tx_desc_limit_1 = cfg_get(psoc, wlan_cfg_ctx->tx_desc_limit_1 = cfg_get(psoc,
@@ -3598,6 +3601,12 @@ wlan_cfg_get_dp_soc_rxdma_refill_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->rxdma_refill_ring; return cfg->rxdma_refill_ring;
} }
bool
wlan_cfg_get_dp_soc_rxdma_refill_lt_disable(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->rxdma_refill_lt_disable;
}
int int
wlan_cfg_get_dp_soc_tx_desc_limit_0(struct wlan_cfg_dp_soc_ctxt *cfg) wlan_cfg_get_dp_soc_tx_desc_limit_0(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {

View File

@@ -207,6 +207,7 @@ struct wlan_srng_cfg {
* @reo_cmd_ring: reo cmd ring size * @reo_cmd_ring: reo cmd ring size
* @reo_status_ring: reo status ting size * @reo_status_ring: reo status ting size
* @rxdma_refill_ring: rxdma refill ring size * @rxdma_refill_ring: rxdma refill ring size
* @rxdma_refill_lt_disable: rxdma refill low threshold disable
* @rxdma_err_dst_ring: rxdma error destination ring size * @rxdma_err_dst_ring: rxdma error destination ring size
* @raw_mode_war: enable/disable raw mode war * @raw_mode_war: enable/disable raw mode war
* @enable_data_stall_detection: enable/disable specific data stall detection * @enable_data_stall_detection: enable/disable specific data stall detection
@@ -351,6 +352,7 @@ struct wlan_cfg_dp_soc_ctxt {
int reo_cmd_ring; int reo_cmd_ring;
int reo_status_ring; int reo_status_ring;
int rxdma_refill_ring; int rxdma_refill_ring;
bool rxdma_refill_lt_disable;
int rxdma_err_dst_ring; int rxdma_err_dst_ring;
uint32_t per_pkt_trace; uint32_t per_pkt_trace;
bool raw_mode_war; bool raw_mode_war;
@@ -1509,6 +1511,15 @@ wlan_cfg_get_dp_soc_tx_sw_internode_queue(struct wlan_cfg_dp_soc_ctxt *cfg);
int int
wlan_cfg_get_dp_soc_rxdma_refill_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); wlan_cfg_get_dp_soc_rxdma_refill_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg);
/*
* wlan_cfg_get_dp_soc_rxdma_refill_lt_disable - Get RxDMA refill LT status
* @wlan_cfg_soc_ctx
*
* Return: true if Low threshold disable else false
*/
bool
wlan_cfg_get_dp_soc_rxdma_refill_lt_disable(struct wlan_cfg_dp_soc_ctxt *cfg);
/* /*
* wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size - Get rxdma dst ring size * wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size - Get rxdma dst ring size
* @wlan_cfg_soc_ctx * @wlan_cfg_soc_ctx