struct ath_buf *bf = NULL;
        struct ieee80211_vif *vif;
        struct ath_tx_status ts;
+       bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
        int slot;
        u32 bfaddr, bc = 0;
 
        if (bfaddr != 0) {
                /* NB: cabq traffic should already be queued and primed */
                ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bfaddr);
-               ath9k_hw_txstart(ah, sc->beacon.beaconq);
+
+               if (!edma)
+                       ath9k_hw_txstart(ah, sc->beacon.beaconq);
 
                sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */
-               if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
+               if (edma) {
                        spin_lock_bh(&sc->sc_pcu_lock);
                        ath9k_hw_txprocdesc(ah, bf->bf_desc, (void *)&ts);
                        spin_unlock_bh(&sc->sc_pcu_lock);