diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-12-15 20:23:00 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-12-15 20:23:00 +0000 |
commit | 4b03d33e31929a6d67d2245114835a57d438c3be (patch) | |
tree | f623693eb902e2899cf8b31c81e865dfcfd2edfb /package/kernel | |
parent | e49d67f1925f1582138c7fcd998c6952aa5d0909 (diff) | |
download | upstream-4b03d33e31929a6d67d2245114835a57d438c3be.tar.gz upstream-4b03d33e31929a6d67d2245114835a57d438c3be.tar.bz2 upstream-4b03d33e31929a6d67d2245114835a57d438c3be.zip |
ath9k: fix interrupt storms on AR913x
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 39062
Diffstat (limited to 'package/kernel')
-rw-r--r-- | package/kernel/mac80211/patches/300-pending_work.patch | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/package/kernel/mac80211/patches/300-pending_work.patch b/package/kernel/mac80211/patches/300-pending_work.patch index f70ac79104..ec4fd499cf 100644 --- a/package/kernel/mac80211/patches/300-pending_work.patch +++ b/package/kernel/mac80211/patches/300-pending_work.patch @@ -11856,7 +11856,18 @@ ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR); ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL); } -@@ -120,7 +139,12 @@ static bool ar9002_hw_get_isr(struct ath +@@ -114,13 +133,23 @@ static bool ar9002_hw_get_isr(struct ath + *masked |= mask2; + } + ++ if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) { ++ REG_WRITE(ah, AR_ISR, isr); ++ REG_READ(ah, AR_ISR); ++ } ++ + if (AR_SREV_9100(ah)) + return true; + if (isr & AR_ISR_GENTMR) { u32 s5_s; @@ -11870,7 +11881,7 @@ ah->intr_gen_timer_trigger = MS(s5_s, AR_ISR_S5_GENTIMER_TRIG); -@@ -133,6 +157,16 @@ static bool ar9002_hw_get_isr(struct ath +@@ -133,6 +162,11 @@ static bool ar9002_hw_get_isr(struct ath if ((s5_s & AR_ISR_S5_TIM_TIMER) && !(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) *masked |= ATH9K_INT_TIM_TIMER; @@ -11879,11 +11890,6 @@ + REG_WRITE(ah, AR_ISR_S5, s5_s); + isr &= ~AR_ISR_GENTMR; + } -+ } -+ -+ if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) { -+ REG_WRITE(ah, AR_ISR, isr); -+ REG_READ(ah, AR_ISR); } if (sync_cause) { |