ath9k: fix beacon timer restart after a card reset
PATCH 1/1 ath9k: fix beacon timer restart after a card reset
In AP mode, ath_beacon_config_ap only restarts the timer if a TSF restart is requested. Apparently this was added, because this function unconditionally sets the flag for TSF reset.
The problem with this is, that ath9k_hw_reset() clobbers the timer registers (specified in the initvals), thus effectively disabling the SWBA interrupt whenever a card reset without TSF reset is issued (happens in a few places in the code).
This patch fixes ath_beacon_config_ap to only issue the TSF reset flag when necessary, but reinitialize the timer unconditionally. Tests show, that this is enough to keep the SWBA interrupt going after a call to ath_reset()
Signed-off-by Felix Fietkau <[email protected]>
---
drivers/net/wireless/ath/ath9k/beacon.c +3 -6
@@ -526,16 +526,13 @@ static void ath_beacon_config_ap(struct {u32 nexttbtt, intval; -/* Configure the timers only when the TSF has to be reset */ - -if (!(sc->sc_flags &SC_OP_TSF_RESET )) -return ; -/* NB: the beacon interval is kept internally in TU's */ intval = conf->beacon_interval &ATH9K_BEACON_PERIOD ; intval /=ATH_BCBUF ;/* for staggered beacons */ nexttbtt = intval; - intval |=ATH9K_BEACON_RESET_TSF ; + +if (sc->sc_flags &SC_OP_TSF_RESET ) + intval |=ATH9K_BEACON_RESET_TSF ;/* * In AP mode we enable the beacon timers and SWBA interrupts to