* @IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID: Hardware supports multi BSSID
  *     only for HE APs. Applies if @IEEE80211_HW_SUPPORTS_MULTI_BSSID is set.
  *
+ * @IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT: The card and driver is only
+ *     aggregating MPDUs with the same keyid, allowing mac80211 to keep Tx
+ *     A-MPDU sessions active while rekeying with Extended Key ID.
+ *
  * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
  */
 enum ieee80211_hw_flags {
        IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN,
        IEEE80211_HW_SUPPORTS_MULTI_BSSID,
        IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID,
+       IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT,
 
        /* keep last, obviously */
        NUM_IEEE80211_HW_FLAGS
 
        FLAG(TX_STATUS_NO_AMPDU_LEN),
        FLAG(SUPPORTS_MULTI_BSSID),
        FLAG(SUPPORTS_ONLY_HE_MULTI_BSSID),
+       FLAG(AMPDU_KEYBORDER_SUPPORT),
 #undef FLAG
 };
 
 
 
        sta->ptk_idx = key->conf.keyidx;
 
-       clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
+       if (!ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT))
+               clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
        ieee80211_check_fast_xmit(sta);
 
        return 0;
        if (new->conf.flags & IEEE80211_KEY_FLAG_NO_AUTO_TX) {
                /* Extended Key ID key install, initial one or rekey */
 
-               if (sta->ptk_idx != INVALID_PTK_KEYIDX) {
+               if (sta->ptk_idx != INVALID_PTK_KEYIDX &&
+                   !ieee80211_hw_check(&local->hw, AMPDU_KEYBORDER_SUPPORT)) {
                        /* Aggregation Sessions with Extended Key ID must not
                         * mix MPDUs with different keyIDs within one A-MPDU.
                         * Tear down running Tx aggregation sessions and block
                         * new Rx/Tx aggregation requests during rekey to
-                        * ensure there are no A-MPDUs for the driver to
-                        * aggregate. (Blocking Tx only would be sufficient but
-                        * WLAN_STA_BLOCK_BA gets the job done for the few ms
-                        * we need it.)
+                        * ensure there are no A-MPDUs when the driver is not
+                        * supporting A-MPDU key borders. (Blocking Tx only
+                        * would be sufficient but WLAN_STA_BLOCK_BA gets the
+                        * job done for the few ms we need it.)
                         */
                        set_sta_flag(sta, WLAN_STA_BLOCK_BA);
                        mutex_lock(&sta->ampdu_mlme.mtx);