diff --git a/package/mac80211/patches/572-ath9k_fix_tx_retry.patch b/package/mac80211/patches/572-ath9k_fix_tx_retry.patch
new file mode 100644
index 0000000000000000000000000000000000000000..755c3286e5468fc3c9aae1bfca6357377bdc7364
--- /dev/null
+++ b/package/mac80211/patches/572-ath9k_fix_tx_retry.patch
@@ -0,0 +1,11 @@
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -484,7 +484,7 @@ static void ath_tx_complete_aggr(struct 
+ 				 */
+ 				txfail = 1;
+ 			} else if (fi->retries < ATH_MAX_SW_RETRIES) {
+-				if (!(ts->ts_status & ATH9K_TXERR_FILT) ||
++				if (!(ts->ts_status & ATH9K_TXERR_FILT) &&
+ 				    !an->sleeping)
+ 					ath_tx_set_retry(sc, txq, bf->bf_mpdu,
+ 							 retries);
diff --git a/package/mac80211/patches/573-ath9k_fix_tx_flush_bar.patch b/package/mac80211/patches/573-ath9k_fix_tx_flush_bar.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c13f93b0fcec26de7b8e44e955a4ef23eb7e4754
--- /dev/null
+++ b/package/mac80211/patches/573-ath9k_fix_tx_flush_bar.patch
@@ -0,0 +1,51 @@
+--- a/drivers/net/wireless/ath/ath9k/mac.h
++++ b/drivers/net/wireless/ath/ath9k/mac.h
+@@ -75,9 +75,10 @@
+ #define ATH9K_TXERR_XTXOP          0x08
+ #define ATH9K_TXERR_TIMER_EXPIRED  0x10
+ #define ATH9K_TX_ACKED		   0x20
++#define ATH9K_TX_FLUSH		   0x40
+ #define ATH9K_TXERR_MASK						\
+ 	(ATH9K_TXERR_XRETRY | ATH9K_TXERR_FILT | ATH9K_TXERR_FIFO |	\
+-	 ATH9K_TXERR_XTXOP | ATH9K_TXERR_TIMER_EXPIRED)
++	 ATH9K_TXERR_XTXOP | ATH9K_TXERR_TIMER_EXPIRED | ATH9K_TX_FLUSH)
+ 
+ #define ATH9K_TX_BA                0x01
+ #define ATH9K_TX_PWRMGMT           0x02
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -389,6 +389,7 @@ static void ath_tx_complete_aggr(struct 
+ 	u8 tidno;
+ 	bool clear_filter;
+ 	int i, retries;
++	bool flush = !!(ts->ts_status & ATH9K_TX_FLUSH);
+ 
+ 	skb = bf->bf_mpdu;
+ 	hdr = (struct ieee80211_hdr *)skb->data;
+@@ -483,6 +484,8 @@ static void ath_tx_complete_aggr(struct 
+ 				 * the un-acked sub-frames
+ 				 */
+ 				txfail = 1;
++			} else if (flush) {
++				txpending = 1;
+ 			} else if (fi->retries < ATH_MAX_SW_RETRIES) {
+ 				if (!(ts->ts_status & ATH9K_TXERR_FILT) &&
+ 				    !an->sleeping)
+@@ -543,7 +546,8 @@ static void ath_tx_complete_aggr(struct 
+ 
+ 						ath_tx_complete_buf(sc, bf, txq,
+ 								    &bf_head,
+-								    ts, 0, 1,
++								    ts, 0,
++								    !flush,
+ 								    sta);
+ 						break;
+ 					}
+@@ -1447,6 +1451,7 @@ static void ath_drain_txq_list(struct at
+ 	struct ath_tx_status ts;
+ 
+ 	memset(&ts, 0, sizeof(ts));
++	ts.ts_status = ATH9K_TX_FLUSH;
+ 	INIT_LIST_HEAD(&bf_head);
+ 
+ 	while (!list_empty(list)) {
diff --git a/package/mac80211/patches/580-ath9k_cleanup_set_interrupt.patch b/package/mac80211/patches/580-ath9k_cleanup_set_interrupt.patch
index 8723e504109d59e10524a9395d6d27a7c6dd9673..cdf375b4956d5f60446d82802599b882b7511db2 100644
--- a/package/mac80211/patches/580-ath9k_cleanup_set_interrupt.patch
+++ b/package/mac80211/patches/580-ath9k_cleanup_set_interrupt.patch
@@ -144,7 +144,7 @@
  	mask2 = 0;
 --- a/drivers/net/wireless/ath/ath9k/mac.h
 +++ b/drivers/net/wireless/ath/ath9k/mac.h
-@@ -734,7 +734,7 @@ int ath9k_hw_beaconq_setup(struct ath_hw
+@@ -735,7 +735,7 @@ int ath9k_hw_beaconq_setup(struct ath_hw
  
  /* Interrupt Handling */
  bool ath9k_hw_intrpend(struct ath_hw *ah);