From d047565c3797851da0a8d99800444df1e80373ed Mon Sep 17 00:00:00 2001 From: Jinwei Chen Date: Mon, 9 Oct 2023 20:23:24 -0700 Subject: [PATCH] qcacmn: Support watermark stats for TX completion srng Support watermark stats for TX completion srng. Change-Id: Id13bd12ec9c2723f5b5e5afffedcb939cd5e5d74 CRs-Fixed: 3635719 --- dp/wifi3.0/dp_internal.h | 8 ++++++++ dp/wifi3.0/dp_main.c | 10 ++++++++-- dp/wifi3.0/dp_stats.c | 12 +++++++++++- dp/wifi3.0/dp_tx.c | 2 ++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 2d95fce45f..579a2df0f7 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -3505,6 +3505,14 @@ void dp_print_soc_interrupt_stats(struct dp_soc *soc); */ void dp_print_tx_ppeds_stats(struct dp_soc *soc); + +/* REO destination ring's watermark mask */ +#define DP_SRNG_WM_MASK_REO_DST BIT(REO_DST) +/* TX completion ring's watermark mask */ +#define DP_SRNG_WM_MASK_TX_COMP BIT(WBM2SW_RELEASE) +/* All srng's watermark mask */ +#define DP_SRNG_WM_MASK_ALL 0xFFFFFFFF + #ifdef WLAN_DP_SRNG_USAGE_WM_TRACKING /** * dp_dump_srng_high_wm_stats() - Print the ring usage high watermark stats diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index e047276f53..0f5a5f18e0 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -7206,6 +7206,10 @@ static inline void dp_srng_clear_ring_usage_wm_stats(struct dp_soc *soc) for (ring = 0; ring < soc->num_reo_dest_rings; ring++) hal_srng_clear_ring_usage_wm_locked(soc->hal_soc, soc->reo_dest_ring[ring].hal_srng); + + for (ring = 0; ring < soc->num_tx_comp_rings; ring++) + hal_srng_clear_ring_usage_wm_locked(soc->hal_soc, + soc->tx_comp_ring[ring].hal_srng); } #else static inline void dp_srng_clear_ring_usage_wm_stats(struct dp_soc *soc) @@ -7812,7 +7816,7 @@ dp_print_host_stats(struct dp_vdev *vdev, break; case TXRX_SRNG_USAGE_WM_STATS: /* Dump usage watermark stats for all SRNGs */ - dp_dump_srng_high_wm_stats(soc, 0xFF); + dp_dump_srng_high_wm_stats(soc, DP_SRNG_WM_MASK_ALL); break; case TXRX_PEER_STATS: dp_print_per_link_stats((struct cdp_soc_t *)pdev->soc, @@ -10154,7 +10158,9 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value, dp_print_reg_write_stats(soc); dp_pdev_print_tx_delay_stats(soc); /* Dump usage watermark stats for core TX/RX SRNGs */ - dp_dump_srng_high_wm_stats(soc, (1 << REO_DST)); + dp_dump_srng_high_wm_stats(soc, + DP_SRNG_WM_MASK_REO_DST | + DP_SRNG_WM_MASK_TX_COMP); if (soc->cdp_soc.ol_ops->dp_print_fisa_stats) soc->cdp_soc.ol_ops->dp_print_fisa_stats( CDP_FISA_STATS_ID_ERR_STATS); diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index aa5444f03e..236379be94 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -8363,7 +8363,7 @@ void dp_dump_srng_high_wm_stats(struct dp_soc *soc, uint64_t srng_mask) "ring_id", "high_wm", "time", "<50", "50-60", "60-70", "70-80", "80-90", "90-100"); - if (srng_mask & (1 << REO_DST)) { + if (srng_mask & DP_SRNG_WM_MASK_REO_DST) { for (ring = 0; ring < soc->num_reo_dest_rings; ring++) { pos = 0; pos += hal_dump_srng_high_wm_stats(soc->hal_soc, @@ -8372,6 +8372,16 @@ void dp_dump_srng_high_wm_stats(struct dp_soc *soc, uint64_t srng_mask) dp_info("%s", srng_high_wm_str); } } + + if (srng_mask & DP_SRNG_WM_MASK_TX_COMP) { + for (ring = 0; ring < soc->num_tx_comp_rings; ring++) { + pos = 0; + pos += hal_dump_srng_high_wm_stats(soc->hal_soc, + soc->tx_comp_ring[ring].hal_srng, + buf, buf_len, pos); + dp_info("%s", srng_high_wm_str); + } + } } #endif diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index f5c6818ba3..f6bf3612e5 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -6637,6 +6637,8 @@ more_data: return 0; } + hal_srng_update_ring_usage_wm_no_lock(soc->hal_soc, hal_ring_hdl); + if (!num_avail_for_reap) num_avail_for_reap = hal_srng_dst_num_valid(hal_soc, hal_ring_hdl, 0);