From 5505e8f61e586902dfff2b6c5f97de054faaadfe Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 8 Apr 2011 12:18:43 +0000 Subject: ath9k: improve the rx dma stop fix, add more debugging output in case the issue still occurs SVN-Revision: 26532 --- package/mac80211/patches/300-pending_work.patch | 45 ++++++++++++---------- .../patches/510-ath9k_intr_mitigation_tweak.patch | 2 +- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index cc2b1c2be1..cf4272d92b 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch @@ -276,32 +276,25 @@ --- a/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 - u32 saveDefAntenna; - u32 macStaId1; - u64 tsf = 0; -+ bool reset = false; - int i, r; - +@@ -1249,15 +1249,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st 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) { - ath9k_hw_abortpcurecv(ah); +- if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { +- ath9k_hw_abortpcurecv(ah); - if (!ath9k_hw_stopdmarecv(ah)) { -+ if (!ath9k_hw_stopdmarecv(ah, &reset)) { - ath_dbg(common, ATH_DBG_XMIT, - "Failed to stop receive dma\n"); - bChannelChange = false; - } -+ if (reset) -+ bChannelChange = false; - } - +- ath_dbg(common, ATH_DBG_XMIT, +- "Failed to stop receive dma\n"); +- bChannelChange = false; +- } +- } +- if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) + return -EIO; + --- a/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); @@ -339,6 +332,18 @@ 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 +++ b/drivers/net/wireless/ath/ath9k/mac.h @@ -695,7 +695,7 @@ bool ath9k_hw_setrxabort(struct ath_hw * diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch index 1c9c424507..c6a61224b5 100644 --- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch +++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1449,8 +1449,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1437,8 +1437,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st REG_WRITE(ah, AR_OBS, 8); if (ah->config.rx_intr_mitigation) { -- cgit v1.2.3