ath9k: Do an AHB reset before doing RTC reset
authorVasanthakumar Thiagarajan <vasanth@atheros.com>
Mon, 31 Aug 2009 12:18:36 +0000 (17:48 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 31 Aug 2009 18:42:15 +0000 (14:42 -0400)
Doing an RTC reset when DMA is active may corrupt memory,
make sure no DMA is active at this moment by doing an
AHB reset.

Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/hw.c

index e340dacc6ebe7141e8aa40d32f649d0b13a01dfc..71f27f324ceacab0a3e4df2a184aaff43ae21df6 100644 (file)
@@ -1712,8 +1712,15 @@ static bool ath9k_hw_set_reset_power_on(struct ath_hw *ah)
        REG_WRITE(ah, AR_RTC_FORCE_WAKE, AR_RTC_FORCE_WAKE_EN |
                  AR_RTC_FORCE_WAKE_ON_INT);
 
+       if (!AR_SREV_9100(ah))
+               REG_WRITE(ah, AR_RC, AR_RC_AHB);
+
        REG_WRITE(ah, AR_RTC_RESET, 0);
        udelay(2);
+
+       if (!AR_SREV_9100(ah))
+               REG_WRITE(ah, AR_RC, 0);
+
        REG_WRITE(ah, AR_RTC_RESET, 1);
 
        if (!ath9k_hw_wait(ah,