aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-11 06:48:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-12 16:05:38 -0400
commit9cc2f3e881dcda5466c55ffe8dd0a9d1433469cb (patch)
tree0e896791d624aec7cd519bda0540911282548601 /drivers
parent03b4776c408d2f4bf3a5d204e223724d154716d1 (diff)
ath9k_hw: prevent a fast channel change after a rx DMA stuck issue
If the receive path gets stuck, a full hardware reset is necessary to recover from it. If this happens during a scan, the whole scan might fail, as each channel change bypasses the full reset sequence. Fix this by resetting the fast channel change flag if stopping the receive path fails. This will reduce the number of error messages that look like this: ath: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x40000020 Signed-off-by: Felix Fietkau <nbd@openwrt.org> Cc: stable@kernel.org Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 2acd79985599..2f83f975b891 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1232,9 +1232,11 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
1232 1232
1233 if (!ah->chip_fullsleep) { 1233 if (!ah->chip_fullsleep) {
1234 ath9k_hw_abortpcurecv(ah); 1234 ath9k_hw_abortpcurecv(ah);
1235 if (!ath9k_hw_stopdmarecv(ah)) 1235 if (!ath9k_hw_stopdmarecv(ah)) {
1236 ath_print(common, ATH_DBG_XMIT, 1236 ath_print(common, ATH_DBG_XMIT,
1237 "Failed to stop receive dma\n"); 1237 "Failed to stop receive dma\n");
1238 bChannelChange = false;
1239 }
1238 } 1240 }
1239 1241
1240 if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 1242 if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))