瀏覽代碼

qcacmn: Fix rtpm_get during tx ring write index update

Add missing rtpm_put() for the corresponding rtpm_get() during
tx ring write index update.

Also, add counter to capture flush count per CE.

Change-Id: Ieeee944b63d574f62d61f0557637cbf8f3b653cd
CRs-Fixed: 3536425
Venkateswara Naralasetty 2 年之前
父節點
當前提交
f9ecb01556
共有 2 個文件被更改,包括 10 次插入0 次删除
  1. 4 0
      dp/wifi3.0/rh/dp_rh_tx.c
  2. 6 0
      hif/src/ce/ce_internal.h

+ 4 - 0
dp/wifi3.0/rh/dp_rh_tx.c

@@ -203,16 +203,19 @@ static void dp_tx_update_write_index(struct dp_soc *soc,
 			ce_tx_ring_write_idx_update_wrapper(tx_ep_info->ce_tx_hdl, false);
 			ce_ring_set_event(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring,
 					  CE_RING_FLUSH_EVENT);
+			ce_ring_inc_flush_cnt(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring);
 		} else {
 			ce_tx_ring_write_idx_update_wrapper(tx_ep_info->ce_tx_hdl,
 							    true);
 		}
+		hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_DP);
 	} else {
 		dp_runtime_get(soc);
 		ce_tx_ring_write_idx_update_wrapper(tx_ep_info->ce_tx_hdl,
 						    false);
 		ce_ring_set_event(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring,
 				  CE_RING_FLUSH_EVENT);
+		ce_ring_inc_flush_cnt(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring);
 		qdf_atomic_inc(&soc->tx_pending_rtpm);
 		dp_runtime_put(soc);
 	}
@@ -226,6 +229,7 @@ static void dp_tx_update_write_index(struct dp_soc *soc,
 						    false);
 		ce_ring_set_event(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring,
 				  CE_RING_FLUSH_EVENT);
+		ce_ring_inc_flush_cnt(((struct CE_state *)(tx_ep_info->ce_tx_hdl))->src_ring);
 	} else {
 		ce_tx_ring_write_idx_update_wrapper(tx_ep_info->ce_tx_hdl,
 						    true);

+ 6 - 0
hif/src/ce/ce_internal.h

@@ -129,6 +129,7 @@ struct CE_ring_state {
 
 	OS_DMA_MEM_CONTEXT(ce_dmacontext); /* OS Specific DMA context */
 
+	uint32_t flush_count;
 	/*ce ring event */
 	unsigned long event;
 	/* last flushed time stamp */
@@ -929,4 +930,9 @@ static inline int ce_ring_get_clear_event(struct CE_ring_state *ring, int event)
 {
 	return qdf_atomic_test_and_clear_bit(event, &ring->event);
 }
+
+static inline void ce_ring_inc_flush_cnt(struct CE_ring_state *ring)
+{
+	ring->flush_count++;
+}
 #endif /* __COPY_ENGINE_INTERNAL_H__ */