aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/ar9003_mci.c
diff options
context:
space:
mode:
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>2012-10-15 05:59:50 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-10-29 15:19:29 -0400
commit2097fdd7ebdb1674aaf7343b7a1d6cc2758c1dff (patch)
treec1d05e894ffbc45b4cb1aa69485228b2dc716701 /drivers/net/wireless/ath/ath9k/ar9003_mci.c
parente9f9fd8cdc5fcb718e2ce778cb5e0eea27e2fdc8 (diff)
ath9k_hw: Fix frequent BT rx recovery
While resuming from S3, BT host issues HCI reset command and it causes BT firmware to busy with security key calculation. At this movement, WLAN detects MCI hardware error of MCI_CONT_INFO_TIMEOUT and then it starts the recovery sequence repeatedly. Too many recovery sequences would exhaust the BT kernel message pool. This patch imposes a duration between consecutive BT recovery procedure. Thus it solves BT firmware panic issue reported in AR9565. Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_mci.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_mci.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mci.c b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
index 87d9c348e598..b04fa4622822 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
@@ -1203,7 +1203,7 @@ EXPORT_SYMBOL(ar9003_mci_cleanup);
1203u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type) 1203u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type)
1204{ 1204{
1205 struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; 1205 struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci;
1206 u32 value = 0; 1206 u32 value = 0, tsf;
1207 u8 query_type; 1207 u8 query_type;
1208 1208
1209 switch (state_type) { 1209 switch (state_type) {
@@ -1261,6 +1261,14 @@ u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type)
1261 ar9003_mci_send_coex_bt_status_query(ah, true, query_type); 1261 ar9003_mci_send_coex_bt_status_query(ah, true, query_type);
1262 break; 1262 break;
1263 case MCI_STATE_RECOVER_RX: 1263 case MCI_STATE_RECOVER_RX:
1264 tsf = ath9k_hw_gettsf32(ah);
1265 if ((tsf - mci->last_recovery) <= MCI_RECOVERY_DUR_TSF) {
1266 ath_dbg(ath9k_hw_common(ah), MCI,
1267 "(MCI) ignore Rx recovery\n");
1268 break;
1269 }
1270 ath_dbg(ath9k_hw_common(ah), MCI, "(MCI) RECOVER RX\n");
1271 mci->last_recovery = tsf;
1264 ar9003_mci_prep_interface(ah); 1272 ar9003_mci_prep_interface(ah);
1265 mci->query_bt = true; 1273 mci->query_bt = true;
1266 mci->need_flush_btinfo = true; 1274 mci->need_flush_btinfo = true;