Преглед на файлове

qcacld-3.0: enable pktlog support for HL project

qcacld-2.0 to qcacld-3.0 propagation

Currently for SDIO implementation, tx comp indication is
suppressed and tx_desc is freed when htt download is done.
This leads to invalid tx_desc being referenced when pktlog
indication handler wants to collect TX-ed tx_desc information.

Fix consists of two parts:
1. When pktlog is enabled in ini, enable tx comp indication
handler just like PCIe and USB. tx_desc is still valid when
pktlog indication comes.

2. Check vdev pointer embedded in tx_desc structure. vdev
pointer is set when tx_desc is allocated and set to NULL when
tx_desc is freed. This guards against invalid tx_desc_id
from firmware.

Note that performance drops should be expected when
pktlog is enabled on HL platforms.

Change-Id: Iba9b8323b4a6e2ae17e36768bda3511f52236a2c
CRs-Fixed: 2034996
jiad преди 8 години
родител
ревизия
b20627788b
променени са 2 файла, в които са добавени 14 реда и са изтрити 1 реда
  1. 5 0
      core/bmi/src/ol_fw_common.c
  2. 9 1
      core/dp/txrx/ol_tx_desc.h

+ 5 - 0
core/bmi/src/ol_fw_common.c

@@ -43,6 +43,7 @@
 #include <net/cnss.h>
 #endif
 #include "i_bmi.h"
+#include "cds_api.h"
 
 #ifdef CONFIG_DISABLE_SLEEP_BMI_OPTION
 static inline void ol_sdio_disable_sleep(struct ol_context *ol_ctx)
@@ -174,6 +175,10 @@ QDF_STATUS ol_sdio_extra_initialization(struct ol_context *ol_ctx)
 
 	param |= SDIO_HI_ACS_FLAGS;
 
+	/* enable TX completion to collect tx_desc for pktlog */
+	if (cds_is_packet_log_enabled())
+		param &= ~HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET;
+
 	bmi_write_memory(hif_hia_item_address(target_type,
 			offsetof(struct host_interest_s,
 			hi_acs_flags)),

+ 9 - 1
core/dp/txrx/ol_tx_desc.h

@@ -144,7 +144,15 @@ ol_tx_desc_find_check(struct ol_txrx_pdev_t *pdev, u_int16_t tx_desc_id)
 static inline struct ol_tx_desc_t *
 ol_tx_desc_find_check(struct ol_txrx_pdev_t *pdev, u_int16_t tx_desc_id)
 {
-	return ol_tx_desc_find(pdev, tx_desc_id);
+	struct ol_tx_desc_t *tx_desc;
+
+	tx_desc = ol_tx_desc_find(pdev, tx_desc_id);
+
+	/* check against invalid tx_desc_id */
+	if (ol_cfg_is_high_latency(pdev->ctrl_pdev) && !tx_desc->vdev)
+		return NULL;
+
+	return tx_desc;
 }
 #endif