]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
ath9k_hw: prevent a fast channel change after a rx DMA stuck issue
authorFelix Fietkau <nbd@openwrt.org>
Sun, 11 Jul 2010 10:48:42 +0000 (12:48 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 10 Aug 2010 18:09:17 +0000 (11:09 -0700)
commit 9cc2f3e881dcda5466c55ffe8dd0a9d1433469cb upstream.

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>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/wireless/ath/ath9k/hw.c

index 10419658d03ae78c03b3473cfdfd37e2709577cf..079b9638bef51f48bfea280f0bafa78c238497dd 100644 (file)
@@ -1233,9 +1233,11 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 
        if (!ah->chip_fullsleep) {
                ath9k_hw_abortpcurecv(ah);
-               if (!ath9k_hw_stopdmarecv(ah))
+               if (!ath9k_hw_stopdmarecv(ah)) {
                        ath_print(common, ATH_DBG_XMIT,
                                "Failed to stop receive dma\n");
+                       bChannelChange = false;
+               }
        }
 
        if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))