Pārlūkot izejas kodu

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
Amir Patel 3 gadi atpakaļ
vecāks
revīzija
8e96dd29e8

+ 24 - 13
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -173,6 +173,16 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
 
 	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
 	 */
@@ -185,6 +195,7 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
 
 		if (!num_alloc_desc) {
 			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;
 		}
 
@@ -194,16 +205,7 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
 		num_req_buffers = num_alloc_desc;
 	}
 
-	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;
-	}
-
-	while (count <= num_req_buffers - 1) {
+	while (count < num_req_buffers - 1) {
 		ret = dp_mon_frag_alloc_and_map(dp_soc,
 						&mon_desc,
 						mon_desc_pool);
@@ -440,10 +442,11 @@ dp_set_bpr_enable_2_0(struct dp_pdev *pdev, int val)
 static
 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_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
-
-	QDF_STATUS status;
+#endif
 
 	hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng, 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;
 	}
 
+#ifdef QCA_TXMON_HW_SUPPORT
 	hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng, 0);
 	status = htt_srng_setup(soc->htt_handle, 0,
 				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");
 		return status;
 	}
+#endif
 
 	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_for_pdev)
 {
+#ifdef QCA_TXMON_HW_SUPPORT
 	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);
+#endif
 	QDF_STATUS status;
 
 	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;
 	}
 
+#ifdef QCA_TXMON_HW_SUPPORT
 	status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
 				mon_soc_be->tx_mon_dst_ring[mac_id].hal_srng,
 				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");
 		return status;
 	}
+#endif
 
 	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;
 
 	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 =
 			dp_tx_mon_refill_buf_ring_2_0,
+#endif
 	mon_soc->mon_rx_process = dp_rx_mon_process_2_0;
 }
 

+ 8 - 4
dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c

@@ -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 =
-			  (void *)hal_srng_dst_get_next(hal_soc, mon_dst_srng))
+			  (void *)hal_srng_dst_peek(hal_soc, mon_dst_srng))
 				&& quota--)) {
 		struct hal_mon_desc hal_mon_rx_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);
 		dp_mon_add_to_free_desc_list(&desc_list, &tail, mon_desc);
 		work_done++;
+		hal_srng_dst_get_next(hal_soc, mon_dst_srng);
 	}
 	dp_srng_access_end(int_ctx, soc, mon_dst_srng);
 
-	if (desc_list)
-		dp_mon_add_desc_list_to_free_list(soc, &desc_list,
-						  &tail, rx_mon_desc_pool);
+	if (desc_list) {
+		dp_mon_buffers_replenish(soc, &soc->rxdma_mon_buf_ring[0],
+					 rx_mon_desc_pool,
+					 work_done,
+					 &desc_list, &tail);
+	}
 	qdf_spin_unlock_bh(&mon_pdev->mon_lock);
 	dp_mon_info("mac_id: %d, work_done:%d", mac_id, work_done);
 	return work_done;

+ 0 - 2
dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c

@@ -78,9 +78,7 @@ dp_tx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
 				&& quota--)) {
 		struct hal_mon_desc hal_mon_tx_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,
 					   tx_mon_dst_ring_desc,
 					   &hal_mon_tx_desc);

+ 8 - 1
dp/wifi3.0/monitor/dp_mon.c

@@ -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);
 
 	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);
 	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_cal_client_timer_stop(mon_pdev->cal_client_ctx);
 		mon_pdev->enhanced_stats_en = 0;
+		pdev->enhanced_stats_en = false;
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	pdev->enhanced_stats_en = true;
 	if (is_ppdu_txrx_capture_enabled(pdev) && !mon_pdev->bpr_enable) {
 		dp_h2t_cfg_stats_msg_send(pdev, DP_PPDU_STATS_CFG_ENH_STATS,
 					  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;
 	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) {
 		dp_h2t_cfg_stats_msg_send(pdev, 0, pdev->pdev_id);
 	} else if (is_ppdu_txrx_capture_enabled(pdev) && mon_pdev->bpr_enable) {

+ 2 - 0
dp/wifi3.0/monitor/dp_mon_filter.c

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

+ 8 - 4
hal/wifi3.0/be/hal_be_api_mon.h

@@ -151,8 +151,12 @@ hal_be_get_mon_dest_status(hal_soc_handle_t hal_soc,
 {
 	struct mon_destination_ring *desc = hw_desc;
 
-	status->buf_addr = ((u64)desc->stat_buf_virt_addr_31_0 |
-				((u64)desc->stat_buf_virt_addr_63_32 << 32));
+	status->buf_addr = HAL_RX_GET(desc, MON_DESTINATION_RING_STAT,
+				      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->end_offset = desc->end_offset;
 	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_hi = ((u64)phy_addr & 0xffffffff00000000) >> 32;
-	uint32_t vaddr_lo = ((u64)(uintptr_t)mon_desc_addr & 0x00000000ffffffff);
-	uint32_t vaddr_hi = ((u64)(uintptr_t)mon_desc_addr & 0xffffffff00000000) >> 32;
+	uint32_t vaddr_lo = ((u64)mon_desc_addr & 0x00000000ffffffff);
+	uint32_t vaddr_hi = ((u64)mon_desc_addr & 0xffffffff00000000) >> 32;
 
 	HAL_MON_PADDR_LO_SET(mon_entry, paddr_lo);
 	HAL_MON_PADDR_HI_SET(mon_entry, paddr_hi);

+ 2 - 0
wlan_cfg/wlan_cfg.c

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