aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-02-23 22:43:05 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-02-26 16:59:11 -0500
commit7bfbae10dc10a5c94a780d117a57e875d77e8e5a (patch)
tree8abe95187e482f18b813db2b1c57124d7e699975
parenta040d532b912b5dd7d88692b580cff9c88b987e3 (diff)
ath9k: disable RIFS search for AR91xx based chips
While ath9k does not support RIFS yet, the ability to receive RIFS frames is currently enabled for most chipsets in the initvals. This is causing baseband related issues on AR9160 and AR9130 based chipsets, which can lock up under certain conditions. This patch fixes these issues by overriding the initvals, effectively disabling RIFS for all affected chipsets. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Cc: stable@kernel.org Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c10
-rw-r--r--drivers/net/wireless/ath/ath9k/phy.h3
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index f00f5c744f48..2e767cf22f1e 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1310,6 +1310,16 @@ static void ath9k_hw_override_ini(struct ath_hw *ah,
1310 * Necessary to avoid issues on AR5416 2.0 1310 * Necessary to avoid issues on AR5416 2.0
1311 */ 1311 */
1312 REG_WRITE(ah, 0x9800 + (651 << 2), 0x11); 1312 REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
1313
1314 /*
1315 * Disable RIFS search on some chips to avoid baseband
1316 * hang issues.
1317 */
1318 if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
1319 val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
1320 val &= ~AR_PHY_RIFS_INIT_DELAY;
1321 REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
1322 }
1313} 1323}
1314 1324
1315static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah, 1325static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah,
diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h
index 31de27dc0c4a..0999a495fd46 100644
--- a/drivers/net/wireless/ath/ath9k/phy.h
+++ b/drivers/net/wireless/ath/ath9k/phy.h
@@ -384,6 +384,9 @@ bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
384 384
385#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0 385#define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0
386 386
387#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC
388#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000
389
387#define AR_PHY_M_SLEEP 0x99f0 390#define AR_PHY_M_SLEEP 0x99f0
388#define AR_PHY_REFCLKDLY 0x99f4 391#define AR_PHY_REFCLKDLY 0x99f4
389#define AR_PHY_REFCLKPD 0x99f8 392#define AR_PHY_REFCLKPD 0x99f8