qcacmn: Set low threshold for monitor ring

Configure low threshold for monitor ring only when monitor
vap is created. This is needed to avoid spurious low threshold
interrupts on monitor ring since the low threshold condition always
evaluates to true.

Change-Id: I452c0ada84e0a4f18e410c865d8a6a7f50329aef
This commit is contained in:
Nandha Kishore Easwaran
2020-05-18 21:13:46 +05:30
committed by nshrivas
parent 3e3a071188
commit 3e8172d58b
3 changed files with 27 additions and 3 deletions

View File

@@ -1374,9 +1374,8 @@ dp_srng_configure_interrupt_thresholds(struct dp_soc *soc,
/* During initialisation monitor rings are only filled with
* MON_BUF_MIN_ENTRIES entries. So low threshold needs to be set to
* a value less than that. Once HTT dynamic config of ring threshold
* setting is enabled, then the low threshold updated should be
* adjusted accrodingly.
* a value less than that. Low threshold value is reconfigured again
* to 1/8th of the ring size when monitor vap is created.
*/
if (ring_type == RXDMA_MONITOR_BUF)
ring_params->low_threshold = MON_BUF_MIN_ENTRIES >> 1;
@@ -6461,6 +6460,8 @@ static QDF_STATUS dp_vdev_set_monitor_mode(struct cdp_soc_t *soc,
uint32_t mac_id;
uint32_t mac_for_pdev;
struct dp_pdev *pdev;
uint32_t num_entries;
struct dp_srng *mon_buf_ring;
struct dp_vdev *vdev =
dp_get_vdev_from_soc_vdev_id_wifi3((struct dp_soc *)soc,
vdev_id);
@@ -6499,6 +6500,17 @@ static QDF_STATUS dp_vdev_set_monitor_mode(struct cdp_soc_t *soc,
pdev->pdev_id);
dp_rx_pdev_mon_buf_buffers_alloc(pdev, mac_for_pdev,
FALSE);
/*
* Configure low interrupt threshld when monitor mode is
* configured.
*/
mon_buf_ring = &pdev->soc->rxdma_mon_buf_ring[mac_for_pdev];
num_entries = mon_buf_ring->num_entries;
hal_set_low_threshold(pdev->soc->rxdma_mon_buf_ring[mac_for_pdev].hal_srng,
num_entries >> 3);
htt_srng_setup(pdev->soc->htt_handle, pdev->pdev_id,
pdev->soc->rxdma_mon_buf_ring[mac_for_pdev]
.hal_srng, RXDMA_MONITOR_BUF);
}
dp_soc_config_full_mon_mode(pdev, DP_FULL_MON_ENABLE);