mirror of
https://github.com/torvalds/linux.git
synced 2024-11-18 10:01:43 +00:00
ath9k_hw: disable phy restart on baseband panic caused by RXSM
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. Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
a4d86d953b
commit
51ac8cbb21
@ -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);
|
||||
|
@ -1555,9 +1555,12 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
|
||||
if (ah->btcoex_hw.enabled)
|
||||
ath9k_hw_btcoex_enable(ah);
|
||||
|
||||
if (AR_SREV_9300_20_OR_LATER(ah))
|
||||
if (AR_SREV_9300_20_OR_LATER(ah)) {
|
||||
ar9003_hw_bb_watchdog_config(ah);
|
||||
|
||||
ar9003_hw_disable_phy_restart(ah);
|
||||
}
|
||||
|
||||
ath9k_hw_apply_gpio_override(ah);
|
||||
|
||||
return 0;
|
||||
|
@ -842,6 +842,7 @@ struct ath_hw {
|
||||
|
||||
u32 bb_watchdog_last_status;
|
||||
u32 bb_watchdog_timeout_ms; /* in ms, 0 to disable */
|
||||
u8 bb_hang_rx_ofdm; /* true if bb hang due to rx_ofdm */
|
||||
|
||||
unsigned int paprd_target_power;
|
||||
unsigned int paprd_training_power;
|
||||
@ -990,6 +991,7 @@ void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah);
|
||||
void ar9003_hw_bb_watchdog_config(struct ath_hw *ah);
|
||||
void ar9003_hw_bb_watchdog_read(struct ath_hw *ah);
|
||||
void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah);
|
||||
void ar9003_hw_disable_phy_restart(struct ath_hw *ah);
|
||||
void ar9003_paprd_enable(struct ath_hw *ah, bool val);
|
||||
void ar9003_paprd_populate_single_table(struct ath_hw *ah,
|
||||
struct ath9k_hw_cal_data *caldata,
|
||||
|
Loading…
Reference in New Issue
Block a user