|
@@ -12689,6 +12689,42 @@ static struct cdp_sawf_ops dp_ops_sawf = {
|
|
#ifdef DP_TX_TRACKING
|
|
#ifdef DP_TX_TRACKING
|
|
|
|
|
|
#define DP_TX_COMP_MAX_LATENCY_MS 60000
|
|
#define DP_TX_COMP_MAX_LATENCY_MS 60000
|
|
|
|
+
|
|
|
|
+static bool dp_check_pending_tx(struct dp_soc *soc)
|
|
|
|
+{
|
|
|
|
+ hal_soc_handle_t hal_soc = soc->hal_soc;
|
|
|
|
+ uint32_t hp, tp, i;
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < soc->num_tcl_data_rings; i++) {
|
|
|
|
+ if (dp_ipa_is_ring_ipa_tx(soc, i))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ hal_get_sw_hptp(hal_soc, soc->tcl_data_ring[i].hal_srng,
|
|
|
|
+ &tp, &hp);
|
|
|
|
+
|
|
|
|
+ if (hp != tp) {
|
|
|
|
+ dp_info_rl("Pending transactions in TCL DATA Ring[%d] hp=0x%x, tp=0x%x",
|
|
|
|
+ i, hp, tp);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (wlan_cfg_get_wbm_ring_num_for_index(soc->wlan_cfg_ctx, i) ==
|
|
|
|
+ INVALID_WBM_RING_NUM)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ hal_get_sw_hptp(hal_soc, soc->tx_comp_ring[i].hal_srng,
|
|
|
|
+ &tp, &hp);
|
|
|
|
+
|
|
|
|
+ if (hp != tp) {
|
|
|
|
+ dp_info_rl("Pending transactions in TX comp Ring[%d] hp=0x%x, tp=0x%x",
|
|
|
|
+ i, hp, tp);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* dp_tx_comp_delay_check() - calculate time latency for tx completion per pkt
|
|
* dp_tx_comp_delay_check() - calculate time latency for tx completion per pkt
|
|
* @tx_desc: tx descriptor
|
|
* @tx_desc: tx descriptor
|
|
@@ -12742,6 +12778,9 @@ void dp_find_missing_tx_comp(struct dp_soc *soc)
|
|
struct dp_tx_desc_s *tx_desc = NULL;
|
|
struct dp_tx_desc_s *tx_desc = NULL;
|
|
struct dp_tx_desc_pool_s *tx_desc_pool = NULL;
|
|
struct dp_tx_desc_pool_s *tx_desc_pool = NULL;
|
|
|
|
|
|
|
|
+ if (dp_check_pending_tx(soc))
|
|
|
|
+ return;
|
|
|
|
+
|
|
for (i = 0; i < MAX_TXDESC_POOLS; i++) {
|
|
for (i = 0; i < MAX_TXDESC_POOLS; i++) {
|
|
tx_desc_pool = &soc->tx_desc[i];
|
|
tx_desc_pool = &soc->tx_desc[i];
|
|
if (!(tx_desc_pool->pool_size) ||
|
|
if (!(tx_desc_pool->pool_size) ||
|