|
|
@ -276,32 +276,25 @@ |
|
|
|
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
|
|
|
@@ -1244,6 +1244,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
|
|
|
@@ -1249,15 +1249,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
|
|
|
u32 saveDefAntenna;
|
|
|
|
|
|
|
|
u32 macStaId1;
|
|
|
|
|
|
|
|
u64 tsf = 0;
|
|
|
|
|
|
|
|
+ bool reset = false;
|
|
|
|
|
|
|
|
int i, r;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ah->txchainmask = common->tx_chainmask;
|
|
|
|
ah->txchainmask = common->tx_chainmask;
|
|
|
|
@@ -1251,11 +1252,13 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
|
|
|
ah->rxchainmask = common->rx_chainmask;
|
|
|
|
|
|
|
|
|
|
|
|
if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) {
|
|
|
|
- if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) {
|
|
|
|
ath9k_hw_abortpcurecv(ah);
|
|
|
|
- ath9k_hw_abortpcurecv(ah);
|
|
|
|
- if (!ath9k_hw_stopdmarecv(ah)) {
|
|
|
|
- if (!ath9k_hw_stopdmarecv(ah)) {
|
|
|
|
+ if (!ath9k_hw_stopdmarecv(ah, &reset)) {
|
|
|
|
- ath_dbg(common, ATH_DBG_XMIT,
|
|
|
|
ath_dbg(common, ATH_DBG_XMIT,
|
|
|
|
- "Failed to stop receive dma\n");
|
|
|
|
"Failed to stop receive dma\n");
|
|
|
|
- bChannelChange = false;
|
|
|
|
bChannelChange = false;
|
|
|
|
- }
|
|
|
|
}
|
|
|
|
- }
|
|
|
|
+ if (reset)
|
|
|
|
-
|
|
|
|
+ bChannelChange = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
|
|
|
|
if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
|
|
|
|
|
|
|
|
return -EIO;
|
|
|
|
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/mac.c
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/mac.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/mac.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/mac.c
|
|
|
|
@@ -710,18 +710,36 @@ void ath9k_hw_abortpcurecv(struct ath_hw
|
|
|
|
@@ -710,27 +710,46 @@ void ath9k_hw_abortpcurecv(struct ath_hw
|
|
|
|
}
|
|
|
|
}
|
|
|
|
EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
|
|
|
|
EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
|
|
|
|
|
|
|
|
|
|
|
@ -339,6 +332,18 @@ |
|
|
|
udelay(AH_TIME_QUANTUM);
|
|
|
|
udelay(AH_TIME_QUANTUM);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
|
|
|
ath_err(common,
|
|
|
|
|
|
|
|
- "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x\n",
|
|
|
|
|
|
|
|
+ "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n",
|
|
|
|
|
|
|
|
AH_RX_STOP_DMA_TIMEOUT / 1000,
|
|
|
|
|
|
|
|
REG_READ(ah, AR_CR),
|
|
|
|
|
|
|
|
- REG_READ(ah, AR_DIAG_SW));
|
|
|
|
|
|
|
|
+ REG_READ(ah, AR_DIAG_SW),
|
|
|
|
|
|
|
|
+ REG_READ(ah, AR_DMADBG_7));
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/mac.h
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/mac.h
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/mac.h
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/mac.h
|
|
|
|
@@ -695,7 +695,7 @@ bool ath9k_hw_setrxabort(struct ath_hw *
|
|
|
|
@@ -695,7 +695,7 @@ bool ath9k_hw_setrxabort(struct ath_hw *
|
|
|
|