ソースを参照

qcacmn: Stop wmi sequence check during SOC stop

Skip wmi sequence check during SOC stop and enable after
initializing wmi handle. It is required to skip sequence check
during soc stop as the endpoint flush is preceding CE flush.

CRs-Fixed: 2813341

Change-Id: Ieb821483e9786471d033773dc2365ab456345f83
Balaganapathy Palanisamy 4 年 前
コミット
0d9dc04d48
3 ファイル変更24 行追加0 行削除
  1. 8 0
      wmi/inc/wmi_unified_api.h
  2. 2 0
      wmi/inc/wmi_unified_priv.h
  3. 14 0
      wmi/src/wmi_unified.c

+ 8 - 0
wmi/inc/wmi_unified_api.h

@@ -590,6 +590,14 @@ wmi_is_blocked(wmi_unified_t wmi_handle);
 void
 wmi_flush_endpoint(wmi_unified_t wmi_handle);
 
+/**
+ * API to stop wmi sequence check
+ *
+ * @param wmi_handle      : handle to WMI.
+ */
+void
+wmi_interface_sequence_stop(wmi_unified_t wmi_handle);
+
 /**
  * wmi_pdev_id_conversion_enable() - API to enable pdev_id and phy_id
  *                     conversion in WMI. By default pdev_id and

+ 2 - 0
wmi/inc/wmi_unified_priv.h

@@ -2549,6 +2549,8 @@ struct wmi_unified {
 	uint32_t *cmd_phy_id_map;
 	uint32_t *evt_phy_id_map;
 #ifdef WMI_INTERFACE_SEQUENCE_CHECK
+	/* wmi sequence stop */
+	bool wmi_sequence_stop;
 	/* wmi next transmit sequence number */
 	uint32_t wmi_sequence;
 	/* wmi completion expected sequence number */

+ 14 - 0
wmi/src/wmi_unified.c

@@ -1809,6 +1809,7 @@ static inline void wmi_interface_sequence_reset(struct wmi_unified *wmi_handle)
 {
 	wmi_handle->wmi_sequence = 0;
 	wmi_handle->wmi_exp_sequence = 0;
+	wmi_handle->wmi_sequence_stop = false;
 }
 
 static inline void wmi_interface_sequence_init(struct wmi_unified *wmi_handle)
@@ -1822,6 +1823,11 @@ static inline void wmi_interface_sequence_deinit(struct wmi_unified *wmi_handle)
 	qdf_spinlock_destroy(&wmi_handle->wmi_seq_lock);
 }
 
+void wmi_interface_sequence_stop(struct wmi_unified *wmi_handle)
+{
+	wmi_handle->wmi_sequence_stop = true;
+}
+
 static inline QDF_STATUS wmi_htc_send_pkt(struct wmi_unified *wmi_handle,
 					  HTC_PACKET *pkt,
 					  const char *func, uint32_t line)
@@ -1852,6 +1858,10 @@ static inline QDF_STATUS wmi_htc_send_pkt(struct wmi_unified *wmi_handle,
 static inline void wmi_interface_sequence_check(struct wmi_unified *wmi_handle,
 						wmi_buf_t buf)
 {
+	/* Skip sequence check when wmi sequence stop is set */
+	if (wmi_handle->wmi_sequence_stop)
+		return;
+
 	qdf_spin_lock_bh(&wmi_handle->wmi_seq_lock);
 	/* Match the completion sequence and expected sequence number */
 	if (qdf_nbuf_get_mark(buf) != wmi_handle->wmi_exp_sequence) {
@@ -1884,6 +1894,10 @@ static inline void wmi_interface_sequence_deinit(struct wmi_unified *wmi_handle)
 {
 }
 
+void wmi_interface_sequence_stop(struct wmi_unified *wmi_handle)
+{
+}
+
 static inline QDF_STATUS wmi_htc_send_pkt(struct wmi_unified *wmi_handle,
 					  HTC_PACKET *pkt,
 					  const char *func, uint32_t line)