qcacmn: Disable Enhanced PPDU stats and low watermark interrupt

Disable Enhanced PPDU stats and low watermark interrupt for WKK

CRs-Fixed: 3120686
Change-Id: I8eecd2e17cb0748d1e7d15b28ce3d16f69fe81d5
This commit is contained in:
Amir Patel
2022-01-31 23:57:56 +05:30
committed by Madan Koyyalamudi
parent 886ce189d0
commit 8e96dd29e8
7 changed files with 52 additions and 24 deletions

View File

@@ -173,6 +173,16 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
mon_srng = dp_mon_srng->hal_srng; mon_srng = dp_mon_srng->hal_srng;
hal_srng_access_start(dp_soc->hal_soc, mon_srng);
num_entries_avail = hal_srng_src_num_avail(dp_soc->hal_soc,
mon_srng, sync_hw_ptr);
if (num_entries_avail < num_req_buffers) {
num_desc_to_free = num_req_buffers - num_entries_avail;
num_req_buffers = num_entries_avail;
}
/* /*
* if desc_list is NULL, allocate the descs from freelist * if desc_list is NULL, allocate the descs from freelist
*/ */
@@ -185,6 +195,7 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
if (!num_alloc_desc) { if (!num_alloc_desc) {
dp_mon_debug("%pK: no free rx_descs in freelist", dp_soc); dp_mon_debug("%pK: no free rx_descs in freelist", dp_soc);
hal_srng_access_end(dp_soc->hal_soc, mon_srng);
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
} }
@@ -194,16 +205,7 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
num_req_buffers = num_alloc_desc; num_req_buffers = num_alloc_desc;
} }
hal_srng_access_start(dp_soc->hal_soc, mon_srng); while (count < num_req_buffers - 1) {
num_entries_avail = hal_srng_src_num_avail(dp_soc->hal_soc,
mon_srng, sync_hw_ptr);
if (num_entries_avail < num_req_buffers) {
num_desc_to_free = num_req_buffers - num_entries_avail;
num_req_buffers = num_entries_avail;
}
while (count <= num_req_buffers - 1) {
ret = dp_mon_frag_alloc_and_map(dp_soc, ret = dp_mon_frag_alloc_and_map(dp_soc,
&mon_desc, &mon_desc,
mon_desc_pool); mon_desc_pool);
@@ -440,10 +442,11 @@ dp_set_bpr_enable_2_0(struct dp_pdev *pdev, int val)
static static
QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc) QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc)
{ {
QDF_STATUS status;
#ifdef QCA_TXMON_HW_SUPPORT
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
#endif
QDF_STATUS status;
hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng, 0); hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng, 0);
status = htt_srng_setup(soc->htt_handle, 0, status = htt_srng_setup(soc->htt_handle, 0,
@@ -455,6 +458,7 @@ QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc)
return status; return status;
} }
#ifdef QCA_TXMON_HW_SUPPORT
hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng, 0); hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng, 0);
status = htt_srng_setup(soc->htt_handle, 0, status = htt_srng_setup(soc->htt_handle, 0,
mon_soc_be->tx_mon_buf_ring.hal_srng, mon_soc_be->tx_mon_buf_ring.hal_srng,
@@ -464,6 +468,7 @@ QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc)
dp_err("Failed to send htt srng setup message for Tx mon buf ring"); dp_err("Failed to send htt srng setup message for Tx mon buf ring");
return status; return status;
} }
#endif
return status; return status;
} }
@@ -474,8 +479,10 @@ QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
int mac_id, int mac_id,
int mac_for_pdev) int mac_for_pdev)
{ {
#ifdef QCA_TXMON_HW_SUPPORT
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
#endif
QDF_STATUS status; QDF_STATUS status;
status = htt_srng_setup(soc->htt_handle, mac_for_pdev, status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
@@ -487,6 +494,7 @@ QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
return status; return status;
} }
#ifdef QCA_TXMON_HW_SUPPORT
status = htt_srng_setup(soc->htt_handle, mac_for_pdev, status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
mon_soc_be->tx_mon_dst_ring[mac_id].hal_srng, mon_soc_be->tx_mon_dst_ring[mac_id].hal_srng,
TX_MONITOR_DST); TX_MONITOR_DST);
@@ -495,6 +503,7 @@ QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
dp_mon_err("Failed to send htt srng message for Tx mon dst ring"); dp_mon_err("Failed to send htt srng message for Tx mon dst ring");
return status; return status;
} }
#endif
return status; return status;
} }
@@ -967,9 +976,11 @@ static void dp_mon_register_intr_ops_2_0(struct dp_soc *soc)
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
mon_soc->mon_ops->rx_mon_refill_buf_ring = mon_soc->mon_ops->rx_mon_refill_buf_ring =
dp_rx_mon_refill_buf_ring_2_0, NULL,
#ifdef QCA_TXMON_HW_SUPPORT
mon_soc->mon_ops->tx_mon_refill_buf_ring = mon_soc->mon_ops->tx_mon_refill_buf_ring =
dp_tx_mon_refill_buf_ring_2_0, dp_tx_mon_refill_buf_ring_2_0,
#endif
mon_soc->mon_rx_process = dp_rx_mon_process_2_0; mon_soc->mon_rx_process = dp_rx_mon_process_2_0;
} }

View File

@@ -75,7 +75,7 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
} }
while (qdf_likely((rx_mon_dst_ring_desc = while (qdf_likely((rx_mon_dst_ring_desc =
(void *)hal_srng_dst_get_next(hal_soc, mon_dst_srng)) (void *)hal_srng_dst_peek(hal_soc, mon_dst_srng))
&& quota--)) { && quota--)) {
struct hal_mon_desc hal_mon_rx_desc; struct hal_mon_desc hal_mon_rx_desc;
struct dp_mon_desc *mon_desc; struct dp_mon_desc *mon_desc;
@@ -106,12 +106,16 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
qdf_frag_free(mon_desc->buf_addr); qdf_frag_free(mon_desc->buf_addr);
dp_mon_add_to_free_desc_list(&desc_list, &tail, mon_desc); dp_mon_add_to_free_desc_list(&desc_list, &tail, mon_desc);
work_done++; work_done++;
hal_srng_dst_get_next(hal_soc, mon_dst_srng);
} }
dp_srng_access_end(int_ctx, soc, mon_dst_srng); dp_srng_access_end(int_ctx, soc, mon_dst_srng);
if (desc_list) if (desc_list) {
dp_mon_add_desc_list_to_free_list(soc, &desc_list, dp_mon_buffers_replenish(soc, &soc->rxdma_mon_buf_ring[0],
&tail, rx_mon_desc_pool); rx_mon_desc_pool,
work_done,
&desc_list, &tail);
}
qdf_spin_unlock_bh(&mon_pdev->mon_lock); qdf_spin_unlock_bh(&mon_pdev->mon_lock);
dp_mon_info("mac_id: %d, work_done:%d", mac_id, work_done); dp_mon_info("mac_id: %d, work_done:%d", mac_id, work_done);
return work_done; return work_done;

View File

@@ -78,9 +78,7 @@ dp_tx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
&& quota--)) { && quota--)) {
struct hal_mon_desc hal_mon_tx_desc; struct hal_mon_desc hal_mon_tx_desc;
struct dp_mon_desc *mon_desc; struct dp_mon_desc *mon_desc;
struct dp_mon_desc_pool *tx_desc_pool;
tx_desc_pool = &mon_soc_be->tx_desc_mon;
hal_be_get_mon_dest_status(soc->hal_soc, hal_be_get_mon_dest_status(soc->hal_soc,
tx_mon_dst_ring_desc, tx_mon_dst_ring_desc,
&hal_mon_tx_desc); &hal_mon_tx_desc);

View File

@@ -1668,6 +1668,10 @@ dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
dp_cal_client_timer_start(mon_pdev->cal_client_ctx); dp_cal_client_timer_start(mon_pdev->cal_client_ctx);
mon_pdev->enhanced_stats_en = 1; mon_pdev->enhanced_stats_en = 1;
pdev->enhanced_stats_en = true;
if (wlan_cfg_get_txmon_hw_support(pdev->soc->wlan_cfg_ctx))
return QDF_STATUS_SUCCESS;
dp_mon_filter_setup_enhanced_stats(pdev); dp_mon_filter_setup_enhanced_stats(pdev);
status = dp_mon_filter_update(pdev); status = dp_mon_filter_update(pdev);
@@ -1676,10 +1680,10 @@ dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
dp_mon_filter_reset_enhanced_stats(pdev); dp_mon_filter_reset_enhanced_stats(pdev);
dp_cal_client_timer_stop(mon_pdev->cal_client_ctx); dp_cal_client_timer_stop(mon_pdev->cal_client_ctx);
mon_pdev->enhanced_stats_en = 0; mon_pdev->enhanced_stats_en = 0;
pdev->enhanced_stats_en = false;
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
pdev->enhanced_stats_en = true;
if (is_ppdu_txrx_capture_enabled(pdev) && !mon_pdev->bpr_enable) { if (is_ppdu_txrx_capture_enabled(pdev) && !mon_pdev->bpr_enable) {
dp_h2t_cfg_stats_msg_send(pdev, DP_PPDU_STATS_CFG_ENH_STATS, dp_h2t_cfg_stats_msg_send(pdev, DP_PPDU_STATS_CFG_ENH_STATS,
pdev->pdev_id); pdev->pdev_id);
@@ -1720,6 +1724,9 @@ dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
mon_pdev->enhanced_stats_en = 0; mon_pdev->enhanced_stats_en = 0;
pdev->enhanced_stats_en = false; pdev->enhanced_stats_en = false;
if (wlan_cfg_get_txmon_hw_support(pdev->soc->wlan_cfg_ctx))
return QDF_STATUS_SUCCESS;
if (is_ppdu_txrx_capture_enabled(pdev) && !mon_pdev->bpr_enable) { if (is_ppdu_txrx_capture_enabled(pdev) && !mon_pdev->bpr_enable) {
dp_h2t_cfg_stats_msg_send(pdev, 0, pdev->pdev_id); dp_h2t_cfg_stats_msg_send(pdev, 0, pdev->pdev_id);
} else if (is_ppdu_txrx_capture_enabled(pdev) && mon_pdev->bpr_enable) { } else if (is_ppdu_txrx_capture_enabled(pdev) && mon_pdev->bpr_enable) {

View File

@@ -498,8 +498,10 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
#ifdef QCA_TXMON_HW_SUPPORT
if (mon_ops && mon_ops->tx_mon_filter_update) if (mon_ops && mon_ops->tx_mon_filter_update)
mon_ops->tx_mon_filter_update(pdev); mon_ops->tx_mon_filter_update(pdev);
#endif
if (mon_ops && mon_ops->rx_mon_filter_update) if (mon_ops && mon_ops->rx_mon_filter_update)
mon_ops->rx_mon_filter_update(pdev); mon_ops->rx_mon_filter_update(pdev);

View File

@@ -151,8 +151,12 @@ hal_be_get_mon_dest_status(hal_soc_handle_t hal_soc,
{ {
struct mon_destination_ring *desc = hw_desc; struct mon_destination_ring *desc = hw_desc;
status->buf_addr = ((u64)desc->stat_buf_virt_addr_31_0 | status->buf_addr = HAL_RX_GET(desc, MON_DESTINATION_RING_STAT,
((u64)desc->stat_buf_virt_addr_63_32 << 32)); BUF_VIRT_ADDR_31_0) |
(((uint64_t)HAL_RX_GET(desc,
MON_DESTINATION_RING_STAT,
BUF_VIRT_ADDR_63_32)) << 32);
status->ppdu_id = desc->ppdu_id; status->ppdu_id = desc->ppdu_id;
status->end_offset = desc->end_offset; status->end_offset = desc->end_offset;
status->end_reason = desc->end_reason; status->end_reason = desc->end_reason;
@@ -177,8 +181,8 @@ void hal_mon_buff_addr_info_set(hal_soc_handle_t hal_soc_hdl,
{ {
uint32_t paddr_lo = ((u64)phy_addr & 0x00000000ffffffff); uint32_t paddr_lo = ((u64)phy_addr & 0x00000000ffffffff);
uint32_t paddr_hi = ((u64)phy_addr & 0xffffffff00000000) >> 32; uint32_t paddr_hi = ((u64)phy_addr & 0xffffffff00000000) >> 32;
uint32_t vaddr_lo = ((u64)(uintptr_t)mon_desc_addr & 0x00000000ffffffff); uint32_t vaddr_lo = ((u64)mon_desc_addr & 0x00000000ffffffff);
uint32_t vaddr_hi = ((u64)(uintptr_t)mon_desc_addr & 0xffffffff00000000) >> 32; uint32_t vaddr_hi = ((u64)mon_desc_addr & 0xffffffff00000000) >> 32;
HAL_MON_PADDR_LO_SET(mon_entry, paddr_lo); HAL_MON_PADDR_LO_SET(mon_entry, paddr_lo);
HAL_MON_PADDR_HI_SET(mon_entry, paddr_hi); HAL_MON_PADDR_HI_SET(mon_entry, paddr_hi);

View File

@@ -3378,3 +3378,5 @@ bool wlan_cfg_get_txmon_hw_support(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {
return cfg->txmon_hw_support; return cfg->txmon_hw_support;
} }
qdf_export_symbol(wlan_cfg_get_txmon_hw_support);