forked from Minki/linux
ath9k: Fix baseband watchdog interrupts
Program the required baseband watchdog interrupt mask to ensure that the correct watchdog interrupts are raised when the BB is hung for some reason. Also, use the capability HW_BB_WATCHDOG instead of relying on other flags. Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
a7abaf7da9
commit
a6bb860be4
@ -922,11 +922,29 @@ void ath9k_hw_set_interrupts(struct ath_hw *ah)
|
||||
mask2 |= AR_IMR_S2_CST;
|
||||
}
|
||||
|
||||
if (ah->config.hw_hang_checks & HW_BB_WATCHDOG) {
|
||||
if (ints & ATH9K_INT_BB_WATCHDOG) {
|
||||
mask |= AR_IMR_BCNMISC;
|
||||
mask2 |= AR_IMR_S2_BB_WATCHDOG;
|
||||
}
|
||||
}
|
||||
|
||||
ath_dbg(common, INTERRUPT, "new IMR 0x%x\n", mask);
|
||||
REG_WRITE(ah, AR_IMR, mask);
|
||||
ah->imrs2_reg &= ~(AR_IMR_S2_TIM | AR_IMR_S2_DTIM | AR_IMR_S2_DTIMSYNC |
|
||||
AR_IMR_S2_CABEND | AR_IMR_S2_CABTO |
|
||||
AR_IMR_S2_TSFOOR | AR_IMR_S2_GTT | AR_IMR_S2_CST);
|
||||
ah->imrs2_reg &= ~(AR_IMR_S2_TIM |
|
||||
AR_IMR_S2_DTIM |
|
||||
AR_IMR_S2_DTIMSYNC |
|
||||
AR_IMR_S2_CABEND |
|
||||
AR_IMR_S2_CABTO |
|
||||
AR_IMR_S2_TSFOOR |
|
||||
AR_IMR_S2_GTT |
|
||||
AR_IMR_S2_CST);
|
||||
|
||||
if (ah->config.hw_hang_checks & HW_BB_WATCHDOG) {
|
||||
if (ints & ATH9K_INT_BB_WATCHDOG)
|
||||
ah->imrs2_reg &= ~AR_IMR_S2_BB_WATCHDOG;
|
||||
}
|
||||
|
||||
ah->imrs2_reg |= mask2;
|
||||
REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
|
||||
|
||||
|
@ -587,7 +587,7 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||
!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
|
||||
goto chip_reset;
|
||||
|
||||
if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
|
||||
if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
|
||||
(status & ATH9K_INT_BB_WATCHDOG)) {
|
||||
|
||||
spin_lock(&common->cc_lock);
|
||||
@ -726,11 +726,13 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
||||
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
||||
ah->imask |= ATH9K_INT_RXHP |
|
||||
ATH9K_INT_RXLP |
|
||||
ATH9K_INT_BB_WATCHDOG;
|
||||
ATH9K_INT_RXLP;
|
||||
else
|
||||
ah->imask |= ATH9K_INT_RX;
|
||||
|
||||
if (ah->config.hw_hang_checks & HW_BB_WATCHDOG)
|
||||
ah->imask |= ATH9K_INT_BB_WATCHDOG;
|
||||
|
||||
ah->imask |= ATH9K_INT_GTT;
|
||||
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
|
||||
|
@ -304,6 +304,7 @@
|
||||
#define AR_IMR_S2 0x00ac
|
||||
#define AR_IMR_S2_QCU_TXURN 0x000003FF
|
||||
#define AR_IMR_S2_QCU_TXURN_S 0
|
||||
#define AR_IMR_S2_BB_WATCHDOG 0x00010000
|
||||
#define AR_IMR_S2_CST 0x00400000
|
||||
#define AR_IMR_S2_GTT 0x00800000
|
||||
#define AR_IMR_S2_TIM 0x01000000
|
||||
|
Loading…
Reference in New Issue
Block a user