REGWRITE_BUFFER_FLUSH(ah);
 
+       ath9k_hw_gen_timer_start_tsf2(ah);
+
        ath9k_hw_init_desc(ah);
 
        if (ath9k_hw_btcoex_is_enabled(ah))
 }
 EXPORT_SYMBOL(ath9k_hw_gettsf32);
 
+void ath9k_hw_gen_timer_start_tsf2(struct ath_hw *ah)
+{
+       struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
+
+       if (timer_table->tsf2_enabled) {
+               REG_SET_BIT(ah, AR_DIRECT_CONNECT, AR_DC_AP_STA_EN);
+               REG_SET_BIT(ah, AR_RESET_TSF, AR_RESET_TSF2_ONCE);
+       }
+}
+
 struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
                                          void (*trigger)(void *),
                                          void (*overflow)(void *),
        struct ath_gen_timer *timer;
 
        if ((timer_index < AR_FIRST_NDP_TIMER) ||
-               (timer_index >= ATH_MAX_GEN_TIMER))
+           (timer_index >= ATH_MAX_GEN_TIMER))
+               return NULL;
+
+       if ((timer_index > AR_FIRST_NDP_TIMER) &&
+           !AR_SREV_9300_20_OR_LATER(ah))
                return NULL;
 
        timer = kzalloc(sizeof(struct ath_gen_timer), GFP_KERNEL);
        timer->overflow = overflow;
        timer->arg = arg;
 
+       if ((timer_index > AR_FIRST_NDP_TIMER) && !timer_table->tsf2_enabled) {
+               timer_table->tsf2_enabled = true;
+               ath9k_hw_gen_timer_start_tsf2(ah);
+       }
+
        return timer;
 }
 EXPORT_SYMBOL(ath_gen_timer_alloc);
 
 struct ath_gen_timer_table {
        struct ath_gen_timer *timers[ATH_MAX_GEN_TIMER];
        u16 timer_mask;
+       bool tsf2_enabled;
 };
 
 struct ath_hw_antcomb_conf {
                              struct ath_gen_timer *timer,
                              u32 timer_next,
                              u32 timer_period);
+void ath9k_hw_gen_timer_start_tsf2(struct ath_hw *ah);
 void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer);
 
 void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer);
 
 
 #define AR_RESET_TSF        0x8020
 #define AR_RESET_TSF_ONCE   0x01000000
+#define AR_RESET_TSF2_ONCE  0x02000000
 
 #define AR_MAX_CFP_DUR      0x8038
 #define AR_CFP_VAL          0x0000FFFF
 #define AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET          0x80000000
 #define AR_MAC_PCU_GEN_TIMER_TSF_SEL                   0x83d8
 
+#define AR_DIRECT_CONNECT                              0x83a0
+#define AR_DC_AP_STA_EN                                0x00000001
 
 #define AR_AES_MUTE_MASK0       0x805c
 #define AR_AES_MUTE_MASK0_FC    0x0000FFFF