diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
old mode 100755
new mode 100644
index 5da593d..8af3142
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
@@ -8,7 +8,7 @@
  arch/arm64/boot/dts/mediatek/mt7986a.dtsi     |  42 +-
  arch/arm64/boot/dts/mediatek/mt7986b.dtsi     |  42 +-
  drivers/net/ethernet/mediatek/Makefile        |   2 +-
- drivers/net/ethernet/mediatek/mtk_wed.c       | 627 ++++++++++++++++--
+ drivers/net/ethernet/mediatek/mtk_wed.c       | 631 ++++++++++++++++--
  drivers/net/ethernet/mediatek/mtk_wed.h       |  51 ++
  drivers/net/ethernet/mediatek/mtk_wed_ccif.c  | 133 ++++
  drivers/net/ethernet/mediatek/mtk_wed_ccif.h  |  45 ++
@@ -16,8 +16,8 @@
  drivers/net/ethernet/mediatek/mtk_wed_mcu.c   | 586 ++++++++++++++++
  drivers/net/ethernet/mediatek/mtk_wed_mcu.h   | 125 ++++
  drivers/net/ethernet/mediatek/mtk_wed_regs.h  | 145 +++-
- drivers/net/ethernet/mediatek/mtk_wed_wo.c    | 581 ++++++++++++++++
- drivers/net/ethernet/mediatek/mtk_wed_wo.h    | 327 +++++++++
+ drivers/net/ethernet/mediatek/mtk_wed_wo.c    | 573 ++++++++++++++++
+ drivers/net/ethernet/mediatek/mtk_wed_wo.h    | 336 ++++++++++
  include/linux/soc/mediatek/mtk_wed.h          |  75 ++-
  14 files changed, 2796 insertions(+), 75 deletions(-)
  create mode 100644 drivers/net/ethernet/mediatek/mtk_wed_ccif.c
@@ -324,10 +324,11 @@
  	int i;
  
  	if (!page_list)
-@@ -187,6 +291,13 @@ mtk_wed_free_buffer(struct mtk_wed_device *dev)
+@@ -187,7 +291,14 @@ mtk_wed_free_buffer(struct mtk_wed_device *dev)
  	if (!desc)
  		goto free_pagelist;
  
+-	for (i = 0, page_idx = 0; i < dev->buf_ring.size; i += MTK_WED_BUF_PER_PAGE) {
 +	if (dev->ver == MTK_WED_V1) {
 +		ring_size = dev->wlan.nbuf & ~(MTK_WED_BUF_PER_PAGE - 1);
 +	} else {
@@ -335,10 +336,19 @@
 +			    MTK_WED_WDMA_RING_SIZE * 2;
 +	}
 +
- 	for (i = 0, page_idx = 0; i < dev->buf_ring.size; i += MTK_WED_BUF_PER_PAGE) {
++	for (i = 0, page_idx = 0; i < ring_size; i += MTK_WED_BUF_PER_PAGE) {
  		void *page = page_list[page_idx++];
  
-@@ -205,6 +316,42 @@ mtk_wed_free_buffer(struct mtk_wed_device *dev)
+ 		if (!page)
+@@ -198,13 +309,49 @@ mtk_wed_free_buffer(struct mtk_wed_device *dev)
+ 		__free_page(page);
+ 	}
+ 
+-	dma_free_coherent(dev->hw->dev, dev->buf_ring.size * sizeof(*desc),
++	dma_free_coherent(dev->hw->dev, ring_size * sizeof(*desc),
+ 			  desc, dev->buf_ring.desc_phys);
+ 
+ free_pagelist:
  	kfree(page_list);
  }
  
@@ -2552,7 +2562,7 @@
 index 000000000..67dcffb26
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
-@@ -0,0 +1,581 @@
+@@ -0,0 +1,573 @@
 +// SPDX-License-Identifier: GPL-2.0-only
 +
 +#include <linux/kernel.h>
@@ -2602,8 +2612,6 @@
 +	woccif_w32(wo, q->regs->desc_base, q->desc_dma);
 +	woccif_w32(wo, q->regs->ring_size, q->ndesc);
 +
-+	/* wo fw start from 1 */
-+	q->tail = q->head = 1;
 +}
 +
 +static void
@@ -2653,6 +2661,9 @@
 +		}
 +		dma_sync_single_for_cpu(wo->hw->dev, addr, len,
 +					DMA_TO_DEVICE);
++
++		q->head = (q->head + 1) % q->ndesc;
++
 +		desc = &q->desc[q->head];
 +		entry = &q->entry[q->head];
 +
@@ -2669,7 +2680,6 @@
 +		q->queued++;
 +		q->entry[q->head].buf = buf;
 +
-+		q->head = (q->head + 1) % q->ndesc;
 +		frames++;
 +	}
 +
@@ -2754,18 +2764,16 @@
 +	if (flush)
 +		last = -1;
 +	else
-+		last = readl(&q->regs->dma_idx);
++		last = woccif_r32(wo, q->regs->dma_idx);
 +
 +	while (q->queued > 0 && q->tail != last) {
 +		struct wed_wo_queue_entry *e;
 +
-+		e = &q->entry[q->tail];
++		e = &q->entry[q->tail + 1];
 +
 +		dma_unmap_single(wo->hw->dev, e->dma_addr, e->dma_len,
 +				 DMA_TO_DEVICE);
 +
-+		if (e->skb)
-+			dev_kfree_skb(e->skb);
 +
 +		memset(e, 0, sizeof(*e));
 +
@@ -2774,8 +2782,6 @@
 +		q->queued--;
 +		spin_unlock_bh(&q->lock);
 +
-+		if (!flush && q->tail == last)
-+			last = readl(&q->regs->dma_idx);
 +	}
 +	spin_unlock_bh(&q->cleanup_lock);
 +
@@ -2794,7 +2800,7 @@
 +	int buf_len = SKB_WITH_OVERHEAD(q->buf_size);
 +	struct wed_wo_queue_entry *e;
 +	struct wed_wo_desc *desc;
-+	int idx = q->tail;
++	int idx = (q->tail + 1) % q->ndesc;;
 +	void *buf;
 +
 +	*more = false;
@@ -2806,7 +2812,7 @@
 +	else if (!(q->desc[idx].ctrl & cpu_to_le32(WED_CTL_DMA_DONE)))
 +		return NULL;
 +
-+	q->tail = (q->tail + 1) % q->ndesc;
++	q->tail = idx;
 +	q->queued--;
 +
 +	desc = &q->desc[idx];
@@ -2911,19 +2917,16 @@
 +		goto error;
 +
 +	/* packet tx, force trigger tx clean. */
-+	if (q->queued + MTK_WED_WO_TXQ_FREE_THR >= q->ndesc - 1)
 +		woif_q_tx_clean(wo, q, false);
 +
-+	if (q->queued + 1 >= q->ndesc - 1) {
++	if (q->queued >= q->ndesc) {
 +		ret = -ENOMEM;
 +		goto error;
 +	}
 +
 +	spin_lock_bh(&q->lock);
 +
-+	dma_sync_single_for_device(wo->hw->dev, addr, len,
-+					   DMA_TO_DEVICE);
-+
++	q->head = (q->head + 1) % q->ndesc;
 +	idx = q->head;
 +
 +	desc = &q->desc[idx];
@@ -2945,7 +2948,6 @@
 +	woif_q_kick(wo, q, 0);
 +	wo->drv_ops->kickout(wo);
 +
-+	q->head = (q->head + 1) % q->ndesc;
 +	spin_unlock_bh(&q->lock);
 +	return 0;
 +
