diff --git a/patches/openwrt/0008-mac80211-add-AQL-support-for-broadcast-multicast-packets.patch b/patches/openwrt/0008-mac80211-add-AQL-support-for-broadcast-multicast-packets.patch
deleted file mode 100644
index eb2f9f9c35a9b167b9b8edbb914e75ee76db861a..0000000000000000000000000000000000000000
--- a/patches/openwrt/0008-mac80211-add-AQL-support-for-broadcast-multicast-packets.patch
+++ /dev/null
@@ -1,241 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Fri, 9 Feb 2024 20:47:39 +0100
-Subject: mac80211: add AQL support for broadcast/multicast packets
-
-Should improve performance/reliability with lots of mcast packets
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-(cherry picked from commit 95e633efbd1b4ffbbfc2d8abba2b05291f6e9903)
-
-diff --git a/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch
-new file mode 100644
-index 0000000000000000000000000000000000000000..9095f4916f1a80fee004bbef4d37c26899969f5a
---- /dev/null
-+++ b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch
-@@ -0,0 +1,226 @@
-+From: Felix Fietkau <nbd@nbd.name>
-+Date: Fri, 9 Feb 2024 19:43:40 +0100
-+Subject: [PATCH] mac80211: add AQL support for broadcast packets
-+
-+Excessive broadcast traffic with little competing unicast traffic can easily
-+flood hardware queues, leading to throughput issues. Additionally, filling
-+the hardware queues with too many packets breaks FQ for broadcast data.
-+Fix this by enabling AQL for broadcast packets.
-+
-+Signed-off-by: Felix Fietkau <nbd@nbd.name>
-+---
-+
-+--- a/include/net/cfg80211.h
-++++ b/include/net/cfg80211.h
-+@@ -3158,6 +3158,7 @@ enum wiphy_params_flags {
-+ /* The per TXQ device queue limit in airtime */
-+ #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L	5000
-+ #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H	12000
-++#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC	50000
-+ 
-+ /* The per interface airtime threshold to switch to lower queue limit */
-+ #define IEEE80211_AQL_THRESHOLD			24000
-+--- a/net/mac80211/debugfs.c
-++++ b/net/mac80211/debugfs.c
-+@@ -215,11 +215,13 @@ static ssize_t aql_pending_read(struct f
-+ 			"VI     %u us\n"
-+ 			"BE     %u us\n"
-+ 			"BK     %u us\n"
-++			"BC/MC  %u us\n"
-+ 			"total  %u us\n",
-+ 			atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VO]),
-+ 			atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VI]),
-+ 			atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BE]),
-+ 			atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BK]),
-++			atomic_read(&local->aql_bc_pending_airtime),
-+ 			atomic_read(&local->aql_total_pending_airtime));
-+ 	return simple_read_from_buffer(user_buf, count, ppos,
-+ 				       buf, len);
-+@@ -245,7 +247,8 @@ static ssize_t aql_txq_limit_read(struct
-+ 			"VO	%u		%u\n"
-+ 			"VI	%u		%u\n"
-+ 			"BE	%u		%u\n"
-+-			"BK	%u		%u\n",
-++			"BK	%u		%u\n"
-++			"BC/MC	%u\n",
-+ 			local->aql_txq_limit_low[IEEE80211_AC_VO],
-+ 			local->aql_txq_limit_high[IEEE80211_AC_VO],
-+ 			local->aql_txq_limit_low[IEEE80211_AC_VI],
-+@@ -253,7 +256,8 @@ static ssize_t aql_txq_limit_read(struct
-+ 			local->aql_txq_limit_low[IEEE80211_AC_BE],
-+ 			local->aql_txq_limit_high[IEEE80211_AC_BE],
-+ 			local->aql_txq_limit_low[IEEE80211_AC_BK],
-+-			local->aql_txq_limit_high[IEEE80211_AC_BK]);
-++			local->aql_txq_limit_high[IEEE80211_AC_BK],
-++			local->aql_txq_limit_bc);
-+ 	return simple_read_from_buffer(user_buf, count, ppos,
-+ 				       buf, len);
-+ }
-+@@ -279,6 +283,11 @@ static ssize_t aql_txq_limit_write(struc
-+ 	else
-+ 		buf[count] = '\0';
-+ 
-++	if (sscanf(buf, "mcast %u", &q_limit_low) == 1) {
-++		local->aql_txq_limit_bc = q_limit_low;
-++		return count;
-++	}
-++
-+ 	if (sscanf(buf, "%u %u %u", &ac, &q_limit_low, &q_limit_high) != 3)
-+ 		return -EINVAL;
-+ 
-+--- a/net/mac80211/ieee80211_i.h
-++++ b/net/mac80211/ieee80211_i.h
-+@@ -1300,10 +1300,12 @@ struct ieee80211_local {
-+ 	u16 schedule_round[IEEE80211_NUM_ACS];
-+ 
-+ 	u16 airtime_flags;
-++	u32 aql_txq_limit_bc;
-+ 	u32 aql_txq_limit_low[IEEE80211_NUM_ACS];
-+ 	u32 aql_txq_limit_high[IEEE80211_NUM_ACS];
-+ 	u32 aql_threshold;
-+ 	atomic_t aql_total_pending_airtime;
-++	atomic_t aql_bc_pending_airtime;
-+ 	atomic_t aql_ac_pending_airtime[IEEE80211_NUM_ACS];
-+ 
-+ 	const struct ieee80211_ops *ops;
-+--- a/net/mac80211/main.c
-++++ b/net/mac80211/main.c
-+@@ -789,6 +789,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
-+ 	spin_lock_init(&local->rx_path_lock);
-+ 	spin_lock_init(&local->queue_stop_reason_lock);
-+ 
-++	local->aql_txq_limit_bc = IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC;
-+ 	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-+ 		INIT_LIST_HEAD(&local->active_txqs[i]);
-+ 		spin_lock_init(&local->active_txq_lock[i]);
-+--- a/net/mac80211/sta_info.c
-++++ b/net/mac80211/sta_info.c
-+@@ -2166,28 +2166,27 @@ void ieee80211_sta_update_pending_airtim
-+ 					  struct sta_info *sta, u8 ac,
-+ 					  u16 tx_airtime, bool tx_completed)
-+ {
-++	atomic_t *counter;
-+ 	int tx_pending;
-+ 
-+ 	if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
-+ 		return;
-+ 
-+-	if (!tx_completed) {
-+-		if (sta)
-+-			atomic_add(tx_airtime,
-+-				   &sta->airtime[ac].aql_tx_pending);
-++	if (sta)
-++		counter = &sta->airtime[ac].aql_tx_pending;
-++	else
-++		counter = &local->aql_bc_pending_airtime;
-+ 
-++	if (!tx_completed) {
-++		atomic_add(tx_airtime, counter);
-+ 		atomic_add(tx_airtime, &local->aql_total_pending_airtime);
-+ 		atomic_add(tx_airtime, &local->aql_ac_pending_airtime[ac]);
-+ 		return;
-+ 	}
-+ 
-+-	if (sta) {
-+-		tx_pending = atomic_sub_return(tx_airtime,
-+-					       &sta->airtime[ac].aql_tx_pending);
-+-		if (tx_pending < 0)
-+-			atomic_cmpxchg(&sta->airtime[ac].aql_tx_pending,
-+-				       tx_pending, 0);
-+-	}
-++	tx_pending = atomic_sub_return(tx_airtime, counter);
-++	if (tx_pending < 0)
-++		atomic_cmpxchg(counter, tx_pending, 0);
-+ 
-+ 	atomic_sub(tx_airtime, &local->aql_total_pending_airtime);
-+ 	tx_pending = atomic_sub_return(tx_airtime,
-+--- a/net/mac80211/tx.c
-++++ b/net/mac80211/tx.c
-+@@ -3957,9 +3957,8 @@ begin:
-+ encap_out:
-+ 	IEEE80211_SKB_CB(skb)->control.vif = vif;
-+ 
-+-	if (tx.sta &&
-+-	    wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
-+-		bool ampdu = txq->ac != IEEE80211_AC_VO;
-++	if (wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
-++		bool ampdu = txq->sta && txq->ac != IEEE80211_AC_VO;
-+ 		u32 airtime;
-+ 
-+ 		airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta,
-+@@ -4025,6 +4024,7 @@ struct ieee80211_txq *ieee80211_next_txq
-+ 	struct ieee80211_txq *ret = NULL;
-+ 	struct txq_info *txqi = NULL, *head = NULL;
-+ 	bool found_eligible_txq = false;
-++	bool aql_check;
-+ 
-+ 	spin_lock_bh(&local->active_txq_lock[ac]);
-+ 
-+@@ -4048,26 +4048,26 @@ struct ieee80211_txq *ieee80211_next_txq
-+ 	if (!head)
-+ 		head = txqi;
-+ 
-++	aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
-++	if (aql_check)
-++		found_eligible_txq = true;
-++
-+ 	if (txqi->txq.sta) {
-+ 		struct sta_info *sta = container_of(txqi->txq.sta,
-+ 						    struct sta_info, sta);
-+-		bool aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
-+-		s32 deficit = ieee80211_sta_deficit(sta, txqi->txq.ac);
-+-
-+-		if (aql_check)
-+-			found_eligible_txq = true;
-+-
-+-		if (deficit < 0)
-++		if (ieee80211_sta_deficit(sta, txqi->txq.ac) < 0) {
-+ 			sta->airtime[txqi->txq.ac].deficit +=
-+ 				sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
-+-
-+-		if (deficit < 0 || !aql_check) {
-+-			list_move_tail(&txqi->schedule_order,
-+-				       &local->active_txqs[txqi->txq.ac]);
-+-			goto begin;
-++			aql_check = false;
-+ 		}
-+ 	}
-+ 
-++	if (!aql_check) {
-++		list_move_tail(&txqi->schedule_order,
-++				   &local->active_txqs[txqi->txq.ac]);
-++		goto begin;
-++	}
-++
-+ 	if (txqi->schedule_round == local->schedule_round[ac])
-+ 		goto out;
-+ 
-+@@ -4132,7 +4132,8 @@ bool ieee80211_txq_airtime_check(struct
-+ 		return true;
-+ 
-+ 	if (!txq->sta)
-+-		return true;
-++		return atomic_read(&local->aql_bc_pending_airtime) <
-++		       local->aql_txq_limit_bc;
-+ 
-+ 	if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
-+ 		return true;
-+@@ -4181,15 +4182,15 @@ bool ieee80211_txq_may_transmit(struct i
-+ 
-+ 	spin_lock_bh(&local->active_txq_lock[ac]);
-+ 
-+-	if (!txqi->txq.sta)
-+-		goto out;
-+-
-+ 	if (list_empty(&txqi->schedule_order))
-+ 		goto out;
-+ 
-+ 	if (!ieee80211_txq_schedule_airtime_check(local, ac))
-+ 		goto out;
-+ 
-++	if (!txqi->txq.sta)
-++		goto out;
-++
-+ 	list_for_each_entry_safe(iter, tmp, &local->active_txqs[ac],
-+ 				 schedule_order) {
-+ 		if (iter == txqi)