[openwrt/openwrt] kernel: fix mtk_eth_soc handling of fraglist packets without GSO_FRAGLIST

LEDE Commits lede-commits at lists.infradead.org
Wed Nov 12 03:15:31 PST 2025


nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/0ad09552142a4c155811bf1ad8f59c88592cc3a1

commit 0ad09552142a4c155811bf1ad8f59c88592cc3a1
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Wed Nov 12 11:07:17 2025 +0000

    kernel: fix mtk_eth_soc handling of fraglist packets without GSO_FRAGLIST
    
    Fixes tx hangs when disabling rx fraglist GRO
    
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 ...t-mtk_eth_soc-add-hw-dump-for-forced-rese.patch |   4 +-
 ...t-mtk_eth_soc-add-support-for-sending-fra.patch | 109 +++++++++++----------
 ...t-ethernet-mtk_eth_soc-use-napi_build_skb.patch |   4 +-
 ...ernet-mediatek-enlarge-DMA-reserve-buffer.patch |   2 +-
 ...t-mtk_eth_soc-add-paths-and-SerDes-modes-.patch |  18 ++--
 ...mtk_eth_soc-reduce-rx-ring-size-for-older.patch |  16 +--
 ...t-mtk_eth_soc-do-not-enable-page-pool-sta.patch |   4 +-
 ...t-ethernet-mtk_eth_soc-add-mt7987-support.patch |   6 +-
 ...-revise-hardware-configuration-for-mt7987.patch |   2 +-
 9 files changed, 86 insertions(+), 79 deletions(-)

diff --git a/target/linux/generic/hack-6.12/730-net-ethernet-mtk_eth_soc-add-hw-dump-for-forced-rese.patch b/target/linux/generic/hack-6.12/730-net-ethernet-mtk_eth_soc-add-hw-dump-for-forced-rese.patch
index 414b8b7d8a..4cb8c2903c 100644
--- a/target/linux/generic/hack-6.12/730-net-ethernet-mtk_eth_soc-add-hw-dump-for-forced-rese.patch
+++ b/target/linux/generic/hack-6.12/730-net-ethernet-mtk_eth_soc-add-hw-dump-for-forced-rese.patch
@@ -37,7 +37,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
  		.glo_cfg	= 0x4604,
  		.rst_idx	= 0x4608,
  		.delay_irq	= 0x460c,
-@@ -4053,6 +4056,56 @@ static void mtk_set_mcr_max_rx(struct mt
+@@ -4060,6 +4063,56 @@ static void mtk_set_mcr_max_rx(struct mt
  		mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
  }
  
@@ -94,7 +94,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
  static void mtk_hw_reset(struct mtk_eth *eth)
  {
  	u32 val;
-@@ -4532,6 +4585,8 @@ static void mtk_pending_work(struct work
+@@ -4539,6 +4592,8 @@ static void mtk_pending_work(struct work
  	rtnl_lock();
  	set_bit(MTK_RESETTING, &eth->state);
  
diff --git a/target/linux/generic/pending-6.12/732-05-net-ethernet-mtk_eth_soc-add-support-for-sending-fra.patch b/target/linux/generic/pending-6.12/732-05-net-ethernet-mtk_eth_soc-add-support-for-sending-fra.patch
index 43a8841427..c62c547443 100644
--- a/target/linux/generic/pending-6.12/732-05-net-ethernet-mtk_eth_soc-add-support-for-sending-fra.patch
+++ b/target/linux/generic/pending-6.12/732-05-net-ethernet-mtk_eth_soc-add-support-for-sending-fra.patch
@@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  #include <net/page_pool/helpers.h>
  
  #include "mtk_eth_soc.h"
-@@ -1404,119 +1407,244 @@ static void mtk_tx_set_dma_desc(struct n
+@@ -1404,119 +1407,251 @@ static void mtk_tx_set_dma_desc(struct n
  		mtk_tx_set_dma_desc_v1(dev, txd, info);
  }
  
@@ -148,9 +148,9 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +	struct sk_buff *cur_skb, *next_skb;
  	int queue = skb_get_queue_mapping(skb);
 -	int k = 0;
++	int i, frag_size = skb_headlen(skb);
++	bool gso_v4, gso_fraglist;
 +	int offset = 0;
-+	int i, frag_size;
-+	bool gso_v4;
  
  	txq = netdev_get_tx_queue(dev, queue);
  	itxd = ring->next_free;
@@ -164,6 +164,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +	next_skb = skb_shinfo(skb)->frag_list;
 +	mtk_tx_map_set_txd(&state, ring, soc, itxd);
 +	gso_v4 = skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4;
++	gso_fraglist = skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST;
  
 -	txd_info.addr = dma_map_single(eth->dma_dev, skb->data, txd_info.size,
 -				       DMA_TO_DEVICE);
@@ -180,17 +181,35 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +	};
  
 -	mtk_tx_set_dma_desc(dev, itxd, &txd_info);
-+	offset = 0;
-+	frag_size = skb_headlen(cur_skb);
 +	if (cur_skb != skb) {
 +		struct tcphdr *th, *th2;
-+
+ 
+-	itx_buf->mac_id = mac->id;
+-	setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
+-		     k++);
+-
+-	/* TX SG offload */
+-	txd = itxd;
+-	txd_pdma = qdma_to_pdma(ring, txd);
+-
+-	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
+-		skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
+-		unsigned int offset = 0;
+-		int frag_size = skb_frag_size(frag);
 +		if (skb_cow_head(cur_skb, header_len))
 +			goto err_dma;
-+
+ 
+-		while (frag_size) {
+-			bool new_desc = true;
 +		memcpy(cur_skb->data - header_len, skb->data,
 +		       skb_network_offset(skb));
-+
+ 
+-			if (MTK_HAS_CAPS(soc->caps, MTK_QDMA) ||
+-			    (i & 0x1)) {
+-				txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
+-				txd_pdma = qdma_to_pdma(ring, txd);
+-				if (txd == ring->last_free)
+-					goto err_dma;
 +		th = tcp_hdr(cur_skb);
 +		th2 = tcp_hdr(skb);
 +		if (gso_v4) {
@@ -205,47 +224,28 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +			struct ipv6hdr *iph = ipv6_hdr(cur_skb);
 +			struct ipv6hdr *iph2 = ipv6_hdr(skb);
  
--	itx_buf->mac_id = mac->id;
--	setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
--		     k++);
--
--	/* TX SG offload */
--	txd = itxd;
--	txd_pdma = qdma_to_pdma(ring, txd);
--
--	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
--		skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
--		unsigned int offset = 0;
--		int frag_size = skb_frag_size(frag);
+-				n_desc++;
+-			} else {
+-				new_desc = false;
+-			}
 +			mtk_tx_update_ip6addr(skb, iph, th, &iph->saddr,
 +					      &iph2->saddr);
 +			mtk_tx_update_ip6addr(skb, iph, th, &iph->daddr,
 +					      &iph2->daddr);
 +		}
- 
--		while (frag_size) {
--			bool new_desc = true;
++
 +		mtk_tx_update_port(skb, th, &th->source, th2->source);
 +		mtk_tx_update_port(skb, th, &th->dest, th2->dest);
- 
--			if (MTK_HAS_CAPS(soc->caps, MTK_QDMA) ||
--			    (i & 0x1)) {
--				txd = mtk_qdma_phys_to_virt(ring, txd->txd2);
--				txd_pdma = qdma_to_pdma(ring, txd);
--				if (txd == ring->last_free)
--					goto err_dma;
++
 +		offset = -header_len;
 +		frag_size += header_len;
-+	} else if (next_skb) {
++	} else if (next_skb && gso_fraglist) {
 +		unsigned int ip_len = skb_pagelen(skb) - skb_network_offset(skb);
 +		if (gso_v4) {
 +			struct iphdr *iph = ip_hdr(cur_skb);
 +			__be16 ip_len_val = cpu_to_be16(ip_len);
  
--				n_desc++;
--			} else {
--				new_desc = false;
--			}
+-			memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
 +			csum_replace2(&iph->check, iph->tot_len, ip_len_val);
 +			iph->tot_len = ip_len_val;
 +		} else {
@@ -255,8 +255,8 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +			iph->payload_len = ip_len_val;
 +		}
 +	}
- 
--			memset(&txd_info, 0, sizeof(struct mtk_tx_dma_desc_info));
++
++next_frag:
 +	while (frag_size) {
 +		txd_info.size = min_t(unsigned int, frag_size,
 +				      soc->tx.dma_max_len);
@@ -267,7 +267,8 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +
 +		frag_size -= txd_info.size;
 +		offset += txd_info.size;
-+		txd_info.last = !frag_size && !skb_shinfo(cur_skb)->nr_frags;
++		txd_info.last = !frag_size && !skb_shinfo(cur_skb)->nr_frags &&
++				(gso_fraglist || !next_skb);
 +		if (mtk_tx_map_info(eth, ring, dev, &state, &txd_info) < 0)
 +			goto err_dma;
 +	}
@@ -308,7 +309,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  			frag_size -= txd_info.size;
  			offset += txd_info.size;
 +			txd_info.last = i == skb_shinfo(cur_skb)->nr_frags - 1 &&
-+					!frag_size;
++					!frag_size && (gso_fraglist || !next_skb);
 +			if (mtk_tx_map_info(eth, ring, dev, &state, &txd_info) < 0)
 +				goto err_dma;
  		}
@@ -317,12 +318,8 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 -	/* store skb to cleanup */
 -	itx_buf->type = MTK_TYPE_SKB;
 -	itx_buf->data = skb;
--
- 	if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
--		if (k & 0x1)
--			txd_pdma->txd2 |= TX_DMA_LS0;
--		else
--			txd_pdma->txd2 |= TX_DMA_LS1;
++	if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA) &&
++	    (gso_fraglist || !next_skb)) {
 +		if (state.nbuf & 0x1) {
 +			state.txd_pdma->txd2 |= TX_DMA_LS0;
 +			state.nbuf++;
@@ -334,6 +331,16 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 +	if (next_skb) {
 +		cur_skb = next_skb;
 +		next_skb = cur_skb->next;
++		offset = 0;
++		frag_size = skb_headlen(cur_skb);
++		if (!gso_fraglist)
++			goto next_frag;
+ 
+-	if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
+-		if (k & 0x1)
+-			txd_pdma->txd2 |= TX_DMA_LS0;
+-		else
+-			txd_pdma->txd2 |= TX_DMA_LS1;
 +		goto next;
  	}
  
@@ -351,7 +358,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  
  	/* make sure that all changes to the dma ring are flushed before we
  	 * continue
-@@ -1525,11 +1653,11 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1525,11 +1660,11 @@ static int mtk_tx_map(struct sk_buff *sk
  
  	if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
  		if (netif_xmit_stopped(txq) || !netdev_xmit_more())
@@ -365,7 +372,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  					 ring->dma_size);
  		mtk_w32(eth, next_idx, MT7628_TX_CTX_IDX0);
  	}
-@@ -1538,18 +1666,20 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1538,18 +1673,20 @@ static int mtk_tx_map(struct sk_buff *sk
  
  err_dma:
  	do {
@@ -390,7 +397,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  
  	return -ENOMEM;
  }
-@@ -1569,6 +1699,9 @@ static int mtk_cal_txd_req(struct mtk_et
+@@ -1569,6 +1706,9 @@ static int mtk_cal_txd_req(struct mtk_et
  		nfrags += skb_shinfo(skb)->nr_frags;
  	}
  
@@ -400,7 +407,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	return nfrags;
  }
  
-@@ -1609,9 +1742,29 @@ static bool mtk_skb_has_small_frag(struc
+@@ -1609,9 +1749,29 @@ static bool mtk_skb_has_small_frag(struc
  		if (skb_frag_size(&skb_shinfo(skb)->frags[i]) < min_size)
  			return true;
  
@@ -430,7 +437,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
  {
  	struct mtk_mac *mac = netdev_priv(dev);
-@@ -1619,6 +1772,7 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1619,6 +1779,7 @@ static netdev_tx_t mtk_start_xmit(struct
  	struct mtk_tx_ring *ring = &eth->tx_ring;
  	struct net_device_stats *stats = &dev->stats;
  	struct sk_buff *segs, *next;
@@ -438,7 +445,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	bool gso = false;
  	int tx_num;
  
-@@ -1647,37 +1801,42 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1647,37 +1808,42 @@ static netdev_tx_t mtk_start_xmit(struct
  		return NETDEV_TX_BUSY;
  	}
  
diff --git a/target/linux/generic/pending-6.12/733-01-net-ethernet-mtk_eth_soc-use-napi_build_skb.patch b/target/linux/generic/pending-6.12/733-01-net-ethernet-mtk_eth_soc-use-napi_build_skb.patch
index 4ce808c913..f87315ac95 100644
--- a/target/linux/generic/pending-6.12/733-01-net-ethernet-mtk_eth_soc-use-napi_build_skb.patch
+++ b/target/linux/generic/pending-6.12/733-01-net-ethernet-mtk_eth_soc-use-napi_build_skb.patch
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2305,7 +2305,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -2312,7 +2312,7 @@ static int mtk_poll_rx(struct napi_struc
  			if (ret != XDP_PASS)
  				goto skip_rx;
  
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  			if (unlikely(!skb)) {
  				page_pool_put_full_page(ring->page_pool,
  							page, true);
-@@ -2343,7 +2343,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -2350,7 +2350,7 @@ static int mtk_poll_rx(struct napi_struc
  			dma_unmap_single(eth->dma_dev, ((u64)trxd.rxd1 | addr64),
  					 ring->buf_size, DMA_FROM_DEVICE);
  
diff --git a/target/linux/generic/pending-6.12/734-net-ethernet-mediatek-enlarge-DMA-reserve-buffer.patch b/target/linux/generic/pending-6.12/734-net-ethernet-mediatek-enlarge-DMA-reserve-buffer.patch
index 6783ad8b00..8d0f0b9802 100644
--- a/target/linux/generic/pending-6.12/734-net-ethernet-mediatek-enlarge-DMA-reserve-buffer.patch
+++ b/target/linux/generic/pending-6.12/734-net-ethernet-mediatek-enlarge-DMA-reserve-buffer.patch
@@ -25,7 +25,7 @@ Signed-off-by: Chad Monroe <chad at monroe.io>
  /* QDMA Flow Control Register */
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3476,12 +3476,14 @@ static int mtk_start_dma(struct mtk_eth
+@@ -3483,12 +3483,14 @@ static int mtk_start_dma(struct mtk_eth
  		       MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
  		       MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
  
diff --git a/target/linux/generic/pending-6.12/737-net-ethernet-mtk_eth_soc-add-paths-and-SerDes-modes-.patch b/target/linux/generic/pending-6.12/737-net-ethernet-mtk_eth_soc-add-paths-and-SerDes-modes-.patch
index 46ad32a9da..b9371835a6 100644
--- a/target/linux/generic/pending-6.12/737-net-ethernet-mtk_eth_soc-add-paths-and-SerDes-modes-.patch
+++ b/target/linux/generic/pending-6.12/737-net-ethernet-mtk_eth_soc-add-paths-and-SerDes-modes-.patch
@@ -477,7 +477,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	.mac_finish = mtk_mac_finish,
  	.mac_link_down = mtk_mac_link_down,
  	.mac_link_up = mtk_mac_link_up,
-@@ -3584,6 +3729,9 @@ static int mtk_open(struct net_device *d
+@@ -3591,6 +3736,9 @@ static int mtk_open(struct net_device *d
  
  	ppe_num = eth->soc->ppe_num;
  
@@ -487,7 +487,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
  	if (err) {
  		netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
-@@ -3731,6 +3879,9 @@ static int mtk_stop(struct net_device *d
+@@ -3738,6 +3886,9 @@ static int mtk_stop(struct net_device *d
  	for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
  		mtk_ppe_stop(eth->ppe[i]);
  
@@ -497,7 +497,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	return 0;
  }
  
-@@ -4821,6 +4972,7 @@ static const struct net_device_ops mtk_n
+@@ -4828,6 +4979,7 @@ static const struct net_device_ops mtk_n
  static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
  {
  	const __be32 *_id = of_get_property(np, "reg", NULL);
@@ -505,7 +505,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	phy_interface_t phy_mode;
  	struct phylink *phylink;
  	struct mtk_mac *mac;
-@@ -4859,16 +5011,41 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4866,16 +5018,41 @@ static int mtk_add_mac(struct mtk_eth *e
  	mac->id = id;
  	mac->hw = eth;
  	mac->of_node = np;
@@ -555,7 +555,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	}
  
  	memset(mac->hwlro_ip, 0, sizeof(mac->hwlro_ip));
-@@ -4951,8 +5128,21 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4958,8 +5135,21 @@ static int mtk_add_mac(struct mtk_eth *e
  		phy_interface_zero(mac->phylink_config.supported_interfaces);
  		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
  			  mac->phylink_config.supported_interfaces);
@@ -577,7 +577,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	phylink = phylink_create(&mac->phylink_config,
  				 of_fwnode_handle(mac->of_node),
  				 phy_mode, &mtk_phylink_ops);
-@@ -5003,6 +5193,26 @@ free_netdev:
+@@ -5010,6 +5200,26 @@ free_netdev:
  	return err;
  }
  
@@ -604,7 +604,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev)
  {
  	struct net_device *dev, *tmp;
-@@ -5149,7 +5359,8 @@ static int mtk_probe(struct platform_dev
+@@ -5156,7 +5366,8 @@ static int mtk_probe(struct platform_dev
  			regmap_write(cci, 0, 3);
  	}
  
@@ -614,7 +614,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  		err = mtk_sgmii_init(eth);
  
  		if (err)
-@@ -5260,6 +5471,24 @@ static int mtk_probe(struct platform_dev
+@@ -5267,6 +5478,24 @@ static int mtk_probe(struct platform_dev
  		}
  	}
  
@@ -639,7 +639,7 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
  	if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT)) {
  		err = devm_request_irq(eth->dev, eth->irq[0],
  				       mtk_handle_irq, 0,
-@@ -5370,6 +5599,11 @@ static void mtk_remove(struct platform_d
+@@ -5377,6 +5606,11 @@ static void mtk_remove(struct platform_d
  		mtk_stop(eth->netdev[i]);
  		mac = netdev_priv(eth->netdev[i]);
  		phylink_disconnect_phy(mac->phylink);
diff --git a/target/linux/generic/pending-6.12/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch b/target/linux/generic/pending-6.12/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch
index 5c8c24ddeb..af5b901ab5 100644
--- a/target/linux/generic/pending-6.12/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch
+++ b/target/linux/generic/pending-6.12/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch
@@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -5637,7 +5637,7 @@ static const struct mtk_soc_data mt2701_
+@@ -5644,7 +5644,7 @@ static const struct mtk_soc_data mt2701_
  		DESC_SIZE(struct mtk_rx_dma),
  		.irq_done_mask = MTK_RX_DONE_INT,
  		.dma_l4_valid = RX_DMA_L4_VALID,
@@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
  	},
-@@ -5665,7 +5665,7 @@ static const struct mtk_soc_data mt7621_
+@@ -5672,7 +5672,7 @@ static const struct mtk_soc_data mt7621_
  		DESC_SIZE(struct mtk_rx_dma),
  		.irq_done_mask = MTK_RX_DONE_INT,
  		.dma_l4_valid = RX_DMA_L4_VALID,
@@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
  	},
-@@ -5695,7 +5695,7 @@ static const struct mtk_soc_data mt7622_
+@@ -5702,7 +5702,7 @@ static const struct mtk_soc_data mt7622_
  		DESC_SIZE(struct mtk_rx_dma),
  		.irq_done_mask = MTK_RX_DONE_INT,
  		.dma_l4_valid = RX_DMA_L4_VALID,
@@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
  	},
-@@ -5724,7 +5724,7 @@ static const struct mtk_soc_data mt7623_
+@@ -5731,7 +5731,7 @@ static const struct mtk_soc_data mt7623_
  		DESC_SIZE(struct mtk_rx_dma),
  		.irq_done_mask = MTK_RX_DONE_INT,
  		.dma_l4_valid = RX_DMA_L4_VALID,
@@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
  	},
-@@ -5750,7 +5750,7 @@ static const struct mtk_soc_data mt7629_
+@@ -5757,7 +5757,7 @@ static const struct mtk_soc_data mt7629_
  		DESC_SIZE(struct mtk_rx_dma),
  		.irq_done_mask = MTK_RX_DONE_INT,
  		.dma_l4_valid = RX_DMA_L4_VALID,
@@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
  	},
-@@ -5782,7 +5782,7 @@ static const struct mtk_soc_data mt7981_
+@@ -5789,7 +5789,7 @@ static const struct mtk_soc_data mt7981_
  		.dma_l4_valid = RX_DMA_L4_VALID_V2,
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
@@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	},
  };
  
-@@ -5812,7 +5812,7 @@ static const struct mtk_soc_data mt7986_
+@@ -5819,7 +5819,7 @@ static const struct mtk_soc_data mt7986_
  		.dma_l4_valid = RX_DMA_L4_VALID_V2,
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
@@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	},
  };
  
-@@ -5865,7 +5865,7 @@ static const struct mtk_soc_data rt5350_
+@@ -5872,7 +5872,7 @@ static const struct mtk_soc_data rt5350_
  		.dma_l4_valid = RX_DMA_L4_VALID_PDMA,
  		.dma_max_len = MTK_TX_DMA_BUF_LEN,
  		.dma_len_offset = 16,
diff --git a/target/linux/generic/pending-6.12/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch b/target/linux/generic/pending-6.12/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch
index f2e7fe88b4..10712eb4fa 100644
--- a/target/linux/generic/pending-6.12/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch
+++ b/target/linux/generic/pending-6.12/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch
@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	help
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4740,6 +4740,7 @@ static int mtk_get_sset_count(struct net
+@@ -4747,6 +4747,7 @@ static int mtk_get_sset_count(struct net
  
  static void mtk_ethtool_pp_stats(struct mtk_eth *eth, u64 *data)
  {
@@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
  	struct page_pool_stats stats = {};
  	int i;
  
-@@ -4752,6 +4753,7 @@ static void mtk_ethtool_pp_stats(struct
+@@ -4759,6 +4760,7 @@ static void mtk_ethtool_pp_stats(struct
  		page_pool_get_stats(ring->page_pool, &stats);
  	}
  	page_pool_ethtool_stats_get(data, &stats);
diff --git a/target/linux/mediatek/patches-6.12/750-net-ethernet-mtk_eth_soc-add-mt7987-support.patch b/target/linux/mediatek/patches-6.12/750-net-ethernet-mtk_eth_soc-add-mt7987-support.patch
index 238e7a76bd..bef5e40d21 100644
--- a/target/linux/mediatek/patches-6.12/750-net-ethernet-mtk_eth_soc-add-mt7987-support.patch
+++ b/target/linux/mediatek/patches-6.12/750-net-ethernet-mtk_eth_soc-add-mt7987-support.patch
@@ -106,7 +106,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
  	mdelay(20);
  	mtk_m32(mac->hw, XMAC_GLB_CNTCLR, XMAC_GLB_CNTCLR, MTK_XMAC_CNT_CTRL(mac->id));
  
-@@ -2901,10 +2931,16 @@ static int mtk_tx_alloc(struct mtk_eth *
+@@ -2908,10 +2938,16 @@ static int mtk_tx_alloc(struct mtk_eth *
  			mtk_w32(eth, val, soc->reg_map->qdma.qtx_cfg + ofs);
  
  			val = MTK_QTX_SCH_MIN_RATE_EN |
@@ -126,7 +126,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
  			if (mtk_is_netsys_v1(eth))
  				val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
  			mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
-@@ -5873,6 +5909,36 @@ static const struct mtk_soc_data mt7986_
+@@ -5880,6 +5916,36 @@ static const struct mtk_soc_data mt7986_
  	},
  };
  
@@ -163,7 +163,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
  static const struct mtk_soc_data mt7988_data = {
  	.reg_map = &mt7988_reg_map,
  	.ana_rgc3 = 0x128,
-@@ -5934,6 +6000,7 @@ const struct of_device_id of_mtk_match[]
+@@ -5941,6 +6007,7 @@ const struct of_device_id of_mtk_match[]
  	{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
  	{ .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
  	{ .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
diff --git a/target/linux/mediatek/patches-6.12/751-net-ethernet-mtk_eth_soc-revise-hardware-configuration-for-mt7987.patch b/target/linux/mediatek/patches-6.12/751-net-ethernet-mtk_eth_soc-revise-hardware-configuration-for-mt7987.patch
index 56dd3257c6..3510ee529e 100644
--- a/target/linux/mediatek/patches-6.12/751-net-ethernet-mtk_eth_soc-revise-hardware-configuration-for-mt7987.patch
+++ b/target/linux/mediatek/patches-6.12/751-net-ethernet-mtk_eth_soc-revise-hardware-configuration-for-mt7987.patch
@@ -15,7 +15,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen at mediatek.com>
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4445,27 +4445,40 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -4452,27 +4452,40 @@ static int mtk_hw_init(struct mtk_eth *e
  		mtk_w32(eth, PSE_DUMMY_WORK_GDM(1) | PSE_DUMMY_WORK_GDM(2) |
  			PSE_DUMMY_WORK_GDM(3) | DUMMY_PAGE_THR, PSE_DUMY_REQ);
  




More information about the lede-commits mailing list