mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
ath9k: fix beacon timer restart after a card reset
commit d8728ee919 upstream.
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 <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
82d8cfa27f
commit
3203358238
@@ -525,16 +525,13 @@ static void ath_beacon_config_ap(struct ath_softc *sc,
|
||||
{
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user