From c27dfcd8ac6ddccf2d5257eb23f921eaad7c90af Mon Sep 17 00:00:00 2001 From: Pavankumar Nandeshwar Date: Fri, 2 Jun 2023 01:46:57 -0700 Subject: [PATCH] qcacmn: Add tx desc alloc failure count for PPEDS Add tx desc alloc failure count for direct switch Change-Id: I593e5846ab4948edf1e1b955890f167f772e166b CRs-Fixed: 3526743 --- dp/wifi3.0/be/dp_be.c | 11 +++++++++++ dp/wifi3.0/be/dp_be.h | 6 ++++++ dp/wifi3.0/dp_main.c | 14 ++++++++++++++ dp/wifi3.0/dp_types.h | 2 ++ 4 files changed, 33 insertions(+) diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index d1ab59508a..f16f1bfe6d 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -97,6 +97,16 @@ static void dp_ppeds_inuse_desc(struct dp_soc *soc) DP_PRINT_STATS("PPE-DS Tx Descriptors in Use = %u num_free %u", be_soc->ppeds_tx_desc.num_allocated, be_soc->ppeds_tx_desc.num_free); + + DP_PRINT_STATS("PPE-DS Tx desc alloc failed %u", + be_soc->ppeds_stats.tx.desc_alloc_failed); +} + +static void dp_ppeds_clear_stats(struct dp_soc *soc) +{ + struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); + + be_soc->ppeds_stats.tx.desc_alloc_failed = 0; } #endif @@ -2908,6 +2918,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) arch_ops->dp_register_ppeds_interrupts = dp_register_ppeds_interrupts; arch_ops->dp_free_ppeds_interrupts = dp_free_ppeds_interrupts; arch_ops->dp_tx_ppeds_inuse_desc = dp_ppeds_inuse_desc; + arch_ops->dp_ppeds_clear_stats = dp_ppeds_clear_stats; arch_ops->dp_tx_ppeds_cfg_astidx_cache_mapping = dp_tx_ppeds_cfg_astidx_cache_mapping; #ifdef DP_UMAC_HW_RESET_SUPPORT diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index 94edf99a5b..0c3c7c8fdc 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/dp/wifi3.0/be/dp_be.h @@ -310,6 +310,7 @@ struct dp_ppeds_napi { * @num_ppe_vp_entries: Number of PPE VP entries * @num_ppe_vp_search_idx_entries: PPEDS VP search idx entries * @irq_name: PPEDS VP irq names + * @ppeds_stats: PPEDS stats * @mlo_enabled: Flag to indicate MLO is enabled or not * @mlo_chip_id: MLO chip_id * @ml_ctxt: pointer to global ml_context @@ -351,6 +352,11 @@ struct dp_soc_be { uint8_t num_ppe_vp_search_idx_entries; uint8_t num_ppe_vp_profiles; char irq_name[DP_PPE_INTR_MAX][DP_PPE_INTR_STRNG_LEN]; + struct { + struct { + uint64_t desc_alloc_failed; + } tx; + } ppeds_stats; #endif #ifdef WLAN_FEATURE_11BE_MLO #ifdef WLAN_MLO_MULTI_CHIP diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 09b87c8b82..2e1e158af9 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -6225,6 +6225,18 @@ static inline void dp_srng_clear_ring_usage_wm_stats(struct dp_soc *soc) } #endif +#ifdef WLAN_SUPPORT_PPEDS +static void dp_clear_tx_ppeds_stats(struct dp_soc *soc) +{ + if (soc->arch_ops.dp_ppeds_clear_stats) + soc->arch_ops.dp_ppeds_clear_stats(soc); +} +#else +static void dp_clear_tx_ppeds_stats(struct dp_soc *soc) +{ +} +#endif + /** * dp_txrx_host_stats_clr() - Reinitialize the txrx stats * @vdev: DP_VDEV handle @@ -6257,6 +6269,8 @@ dp_txrx_host_stats_clr(struct dp_vdev *vdev, struct dp_soc *soc) DP_STATS_CLR(vdev->pdev); DP_STATS_CLR(vdev->pdev->soc); + dp_clear_tx_ppeds_stats(soc); + hif_clear_napi_stats(vdev->pdev->soc->hif_handle); TAILQ_FOREACH(var_vdev, &vdev->pdev->vdev_list, vdev_list_elem) { diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 49e73af493..d5525636ae 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -2217,6 +2217,7 @@ enum dp_context_type { * @ipa_get_wdi_ver: Get WDI version * @dp_txrx_ppeds_rings_status: * @dp_tx_ppeds_inuse_desc: + * @dp_ppeds_clear_stats: Clear ppeds related stats * @dp_tx_ppeds_cfg_astidx_cache_mapping: * @txrx_soc_ppeds_start: * @txrx_soc_ppeds_stop: @@ -2442,6 +2443,7 @@ struct dp_arch_ops { #ifdef WLAN_SUPPORT_PPEDS void (*dp_txrx_ppeds_rings_status)(struct dp_soc *soc); void (*dp_tx_ppeds_inuse_desc)(struct dp_soc *soc); + void (*dp_ppeds_clear_stats)(struct dp_soc *soc); void (*dp_tx_ppeds_cfg_astidx_cache_mapping)(struct dp_soc *soc, struct dp_vdev *vdev, bool peer_map);