瀏覽代碼

qcacmn: Support watermark stats for TX completion srng

Support watermark stats for TX completion srng.

Change-Id: Id13bd12ec9c2723f5b5e5afffedcb939cd5e5d74
CRs-Fixed: 3635719
Jinwei Chen 1 年之前
父節點
當前提交
d047565c37
共有 4 個文件被更改,包括 29 次插入3 次删除
  1. 8 0
      dp/wifi3.0/dp_internal.h
  2. 8 2
      dp/wifi3.0/dp_main.c
  3. 11 1
      dp/wifi3.0/dp_stats.c
  4. 2 0
      dp/wifi3.0/dp_tx.c

+ 8 - 0
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

+ 8 - 2
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);

+ 11 - 1
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
 

+ 2 - 0
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);