mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-07 23:28:55 +00:00
ath9k_hw: Disable INTR_HOST1_FATAL to avoid interrupt strom with ar9430
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
ecb1d385ad
commit
79d1d2b8a3
2 changed files with 11 additions and 5 deletions
|
@ -795,12 +795,16 @@ static void ath9k_hw_init_pll(struct ath_hw *ah,
|
||||||
static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
|
static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
|
||||||
enum nl80211_iftype opmode)
|
enum nl80211_iftype opmode)
|
||||||
{
|
{
|
||||||
|
u32 sync_default = AR_INTR_SYNC_DEFAULT;
|
||||||
u32 imr_reg = AR_IMR_TXERR |
|
u32 imr_reg = AR_IMR_TXERR |
|
||||||
AR_IMR_TXURN |
|
AR_IMR_TXURN |
|
||||||
AR_IMR_RXERR |
|
AR_IMR_RXERR |
|
||||||
AR_IMR_RXORN |
|
AR_IMR_RXORN |
|
||||||
AR_IMR_BCNMISC;
|
AR_IMR_BCNMISC;
|
||||||
|
|
||||||
|
if (AR_SREV_9340(ah))
|
||||||
|
sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
|
||||||
|
|
||||||
if (AR_SREV_9300_20_OR_LATER(ah)) {
|
if (AR_SREV_9300_20_OR_LATER(ah)) {
|
||||||
imr_reg |= AR_IMR_RXOK_HP;
|
imr_reg |= AR_IMR_RXOK_HP;
|
||||||
if (ah->config.rx_intr_mitigation)
|
if (ah->config.rx_intr_mitigation)
|
||||||
|
@ -831,7 +835,7 @@ static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah,
|
||||||
|
|
||||||
if (!AR_SREV_9100(ah)) {
|
if (!AR_SREV_9100(ah)) {
|
||||||
REG_WRITE(ah, AR_INTR_SYNC_CAUSE, 0xFFFFFFFF);
|
REG_WRITE(ah, AR_INTR_SYNC_CAUSE, 0xFFFFFFFF);
|
||||||
REG_WRITE(ah, AR_INTR_SYNC_ENABLE, AR_INTR_SYNC_DEFAULT);
|
REG_WRITE(ah, AR_INTR_SYNC_ENABLE, sync_default);
|
||||||
REG_WRITE(ah, AR_INTR_SYNC_MASK, 0);
|
REG_WRITE(ah, AR_INTR_SYNC_MASK, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -793,10 +793,14 @@ EXPORT_SYMBOL(ath9k_hw_disable_interrupts);
|
||||||
void ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
void ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
u32 sync_default = AR_INTR_SYNC_DEFAULT;
|
||||||
|
|
||||||
if (!(ah->imask & ATH9K_INT_GLOBAL))
|
if (!(ah->imask & ATH9K_INT_GLOBAL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (AR_SREV_9340(ah))
|
||||||
|
sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
|
||||||
|
|
||||||
ath_dbg(common, ATH_DBG_INTERRUPT, "enable IER\n");
|
ath_dbg(common, ATH_DBG_INTERRUPT, "enable IER\n");
|
||||||
REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
|
REG_WRITE(ah, AR_IER, AR_IER_ENABLE);
|
||||||
if (!AR_SREV_9100(ah)) {
|
if (!AR_SREV_9100(ah)) {
|
||||||
|
@ -805,10 +809,8 @@ void ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
||||||
REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
|
REG_WRITE(ah, AR_INTR_ASYNC_MASK, AR_INTR_MAC_IRQ);
|
||||||
|
|
||||||
|
|
||||||
REG_WRITE(ah, AR_INTR_SYNC_ENABLE,
|
REG_WRITE(ah, AR_INTR_SYNC_ENABLE, sync_default);
|
||||||
AR_INTR_SYNC_DEFAULT);
|
REG_WRITE(ah, AR_INTR_SYNC_MASK, sync_default);
|
||||||
REG_WRITE(ah, AR_INTR_SYNC_MASK,
|
|
||||||
AR_INTR_SYNC_DEFAULT);
|
|
||||||
}
|
}
|
||||||
ath_dbg(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
|
ath_dbg(common, ATH_DBG_INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
|
||||||
REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
|
REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
|
||||||
|
|
Loading…
Add table
Reference in a new issue