diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_phy.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.c | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index eee23ecd118..892c48b1543 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c @@ -1381,3 +1381,25 @@ void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah)  		"==== BB update: done ====\n\n");  }  EXPORT_SYMBOL(ar9003_hw_bb_watchdog_dbg_info); + +void ar9003_hw_disable_phy_restart(struct ath_hw *ah) +{ +	u32 val; + +	/* While receiving unsupported rate frame rx state machine +	 * gets into a state 0xb and if phy_restart happens in that +	 * state, BB would go hang. If RXSM is in 0xb state after +	 * first bb panic, ensure to disable the phy_restart. +	 */ +	if (!((MS(ah->bb_watchdog_last_status, +		  AR_PHY_WATCHDOG_RX_OFDM_SM) == 0xb) || +	    ah->bb_hang_rx_ofdm)) +		return; + +	ah->bb_hang_rx_ofdm = true; +	val = REG_READ(ah, AR_PHY_RESTART); +	val &= ~AR_PHY_RESTART_ENA; + +	REG_WRITE(ah, AR_PHY_RESTART, val); +} +EXPORT_SYMBOL(ar9003_hw_disable_phy_restart);  |