ath9k_hw_disable_interrupts(ah);
        ath9k_hw_set_sta_beacon_timers(ah, &bs);
        ah->imask |= ATH9K_INT_BMISS;
-       ath9k_hw_set_interrupts(ah, ah->imask);
+
+       /*
+        * If the beacon config is called beacause of TSFOOR,
+        * Interrupts will be enabled back at the end of ath9k_tasklet
+        */
+       if (!(sc->ps_flags & PS_TSFOOR_SYNC))
+               ath9k_hw_set_interrupts(ah, ah->imask);
 }
 
 static void ath_beacon_config_adhoc(struct ath_softc *sc,
        ath9k_hw_disable_interrupts(ah);
        ath9k_beacon_init(sc, nexttbtt, intval);
        sc->beacon.bmisscnt = 0;
-       ath9k_hw_set_interrupts(ah, ah->imask);
+       /*
+        * If the beacon config is called beacause of TSFOOR,
+        * Interrupts will be enabled back at the end of ath9k_tasklet
+        */
+       if (!(sc->ps_flags & PS_TSFOOR_SYNC))
+               ath9k_hw_set_interrupts(ah, ah->imask);
 }
 
 static bool ath9k_allow_beacon_config(struct ath_softc *sc,
 
                 */
                ath_dbg(common, ATH_DBG_PS,
                        "TSFOOR - Sync with next Beacon\n");
-               sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC;
+               sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC |
+                               PS_TSFOOR_SYNC;
        }
 
        if (ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
 
                ath_dbg(common, ATH_DBG_PS,
                        "Reconfigure Beacon timers based on timestamp from the AP\n");
                ath_set_beacon(sc);
+               sc->ps_flags &= ~PS_TSFOOR_SYNC;
        }
 
        if (ath_beacon_dtim_pending_cab(skb)) {