kernel: bump 6.6 to 6.6.105

removed upstreamed patches:
generic/backport-6.6/621-proc-fix-missing-pde_set_flags.patch [1]
generic/pending-6.6/742-net-ethernet-mtk_eth_soc-fix-tx-vlan-tag-for-llc-pac.patch [2]

all other patches autorefreshed.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.105&id=698abcf08818cb7bafb978f4c9f6674d6a825d10
[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.105&id=61b80fbdc0726317f72f9074e10126e0eb0e49c5

Signed-off-by: Goetz Goerisch <ggoerisch@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20013
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Goetz Goerisch 2025-09-11 07:18:34 +02:00 committed by Hauke Mehrtens
parent 7d37cb0986
commit 67c5ec7092
19 changed files with 134 additions and 294 deletions

View File

@ -1,121 +0,0 @@
From: wangzijie <wangzijie1@honor.com>
To: <akpm@linux-foundation.org>, <brauner@kernel.org>,
<viro@zeniv.linux.org.uk>, <adobriyan@gmail.com>,
<rick.p.edgecombe@intel.com>, <ast@kernel.org>,
<k.shutemov@gmail.com>, <jirislaby@kernel.org>,
<linux-fsdevel@vger.kernel.org>
Cc: <polynomial-c@gmx.de>, <gregkh@linuxfoundation.org>,
<stable@vger.kernel.org>, <regressions@lists.linux.dev>,
wangzijie <wangzijie1@honor.com>
Subject: [PATCH v3] proc: fix missing pde_set_flags() for net proc files
Date: Thu, 21 Aug 2025 18:58:06 +0800 [thread overview]
Message-ID: <20250821105806.1453833-1-wangzijie1@honor.com> (raw)
To avoid potential UAF issues during module removal races, we use pde_set_flags()
to save proc_ops flags in PDE itself before proc_register(), and then use
pde_has_proc_*() helpers instead of directly dereferencing pde->proc_ops->*.
However, the pde_set_flags() call was missing when creating net related proc files.
This omission caused incorrect behavior which FMODE_LSEEK was being cleared
inappropriately in proc_reg_open() for net proc files. Lars reported it in this link[1].
Fix this by ensuring pde_set_flags() is called when register proc entry, and add
NULL check for proc_ops in pde_set_flags().
[1]: https://lore.kernel.org/all/20250815195616.64497967@chagall.paradoxon.rec/
Fixes: ff7ec8dc1b64 ("proc: use the same treatment to check proc_lseek as ones for proc_read_iter et.al")
Cc: stable@vger.kernel.org
Reported-by: Lars Wendler <polynomial-c@gmx.de>
Signed-off-by: wangzijie <wangzijie1@honor.com>
---
v3:
- followed by Christian's suggestion to stash pde->proc_ops in a local const variable
v2:
- followed by Jiri's suggestion to refractor code and reformat commit message
---
fs/proc/generic.c | 38 +++++++++++++++++++++-----------------
1 file changed, 21 insertions(+), 17 deletions(-)
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -362,6 +362,25 @@ static const struct inode_operations pro
.setattr = proc_notify_change,
};
+static void pde_set_flags(struct proc_dir_entry *pde)
+{
+ const struct proc_ops *proc_ops = pde->proc_ops;
+
+ if (!proc_ops)
+ return;
+
+ if (proc_ops->proc_flags & PROC_ENTRY_PERMANENT)
+ pde->flags |= PROC_ENTRY_PERMANENT;
+ if (proc_ops->proc_read_iter)
+ pde->flags |= PROC_ENTRY_proc_read_iter;
+#ifdef CONFIG_COMPAT
+ if (proc_ops->proc_compat_ioctl)
+ pde->flags |= PROC_ENTRY_proc_compat_ioctl;
+#endif
+ if (proc_ops->proc_lseek)
+ pde->flags |= PROC_ENTRY_proc_lseek;
+}
+
/* returns the registered entry, or frees dp and returns NULL on failure */
struct proc_dir_entry *proc_register(struct proc_dir_entry *dir,
struct proc_dir_entry *dp)
@@ -369,6 +388,8 @@ struct proc_dir_entry *proc_register(str
if (proc_alloc_inum(&dp->low_ino))
goto out_free_entry;
+ pde_set_flags(dp);
+
write_lock(&proc_subdir_lock);
dp->parent = dir;
if (pde_subdir_insert(dir, dp) == false) {
@@ -557,20 +578,6 @@ struct proc_dir_entry *proc_create_reg(c
return p;
}
-static void pde_set_flags(struct proc_dir_entry *pde)
-{
- if (pde->proc_ops->proc_flags & PROC_ENTRY_PERMANENT)
- pde->flags |= PROC_ENTRY_PERMANENT;
- if (pde->proc_ops->proc_read_iter)
- pde->flags |= PROC_ENTRY_proc_read_iter;
-#ifdef CONFIG_COMPAT
- if (pde->proc_ops->proc_compat_ioctl)
- pde->flags |= PROC_ENTRY_proc_compat_ioctl;
-#endif
- if (pde->proc_ops->proc_lseek)
- pde->flags |= PROC_ENTRY_proc_lseek;
-}
-
struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
struct proc_dir_entry *parent,
const struct proc_ops *proc_ops, void *data)
@@ -581,7 +588,6 @@ struct proc_dir_entry *proc_create_data(
if (!p)
return NULL;
p->proc_ops = proc_ops;
- pde_set_flags(p);
return proc_register(parent, p);
}
EXPORT_SYMBOL(proc_create_data);
@@ -632,7 +638,6 @@ struct proc_dir_entry *proc_create_seq_p
p->proc_ops = &proc_seq_ops;
p->seq_ops = ops;
p->state_size = state_size;
- pde_set_flags(p);
return proc_register(parent, p);
}
EXPORT_SYMBOL(proc_create_seq_private);
@@ -663,7 +668,6 @@ struct proc_dir_entry *proc_create_singl
return NULL;
p->proc_ops = &proc_single_ops;
p->single_show = show;
- pde_set_flags(p);
return proc_register(parent, p);
}
EXPORT_SYMBOL(proc_create_single_data);

View File

@ -104,7 +104,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
} else {
nfrags += skb_shinfo(skb)->nr_frags;
@@ -1650,7 +1650,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1658,7 +1658,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
ring = &eth->rx_ring[i];
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -113,7 +113,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (rxd->rxd2 & RX_DMA_DONE) {
ring->calc_idx_update = true;
return ring;
@@ -1818,7 +1818,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1826,7 +1826,7 @@ static int mtk_xdp_submit_frame(struct m
}
htxd = txd;
@ -122,7 +122,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
memset(tx_buf, 0, sizeof(*tx_buf));
htx_buf = tx_buf;
@@ -1837,7 +1837,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1845,7 +1845,7 @@ static int mtk_xdp_submit_frame(struct m
goto unmap;
tx_buf = mtk_desc_to_tx_buf(ring, txd,
@ -131,7 +131,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
memset(tx_buf, 0, sizeof(*tx_buf));
n_desc++;
}
@@ -1875,7 +1875,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1883,7 +1883,7 @@ static int mtk_xdp_submit_frame(struct m
} else {
int idx;
@ -140,7 +140,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mtk_w32(eth, NEXT_DESP_IDX(idx, ring->dma_size),
MT7628_TX_CTX_IDX0);
}
@@ -1886,7 +1886,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1894,7 +1894,7 @@ static int mtk_xdp_submit_frame(struct m
unmap:
while (htxd != txd) {
@ -149,7 +149,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mtk_tx_unmap(eth, tx_buf, NULL, false);
htxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
@@ -2017,7 +2017,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2025,7 +2025,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -158,7 +158,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
data = ring->data[idx];
if (!mtk_rx_get_desc(eth, &trxd, rxd))
@@ -2152,7 +2152,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2160,7 +2160,7 @@ static int mtk_poll_rx(struct napi_struc
rxdcsum = &trxd.rxd4;
}
@ -167,7 +167,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
skb->ip_summed = CHECKSUM_UNNECESSARY;
else
skb_checksum_none_assert(skb);
@@ -2280,7 +2280,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -2288,7 +2288,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
break;
tx_buf = mtk_desc_to_tx_buf(ring, desc,
@ -176,7 +176,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (!tx_buf->data)
break;
@@ -2331,7 +2331,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -2339,7 +2339,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
}
mtk_tx_unmap(eth, tx_buf, &bq, true);
@ -185,7 +185,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
ring->last_free = desc;
atomic_inc(&ring->free_count);
@@ -2421,7 +2421,7 @@ static int mtk_napi_rx(struct napi_struc
@@ -2429,7 +2429,7 @@ static int mtk_napi_rx(struct napi_struc
do {
int rx_done;
@ -194,7 +194,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
reg_map->pdma.irq_status);
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
rx_done_total += rx_done;
@@ -2437,10 +2437,10 @@ static int mtk_napi_rx(struct napi_struc
@@ -2445,10 +2445,10 @@ static int mtk_napi_rx(struct napi_struc
return budget;
} while (mtk_r32(eth, reg_map->pdma.irq_status) &
@ -207,7 +207,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
return rx_done_total;
}
@@ -2449,7 +2449,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2457,7 +2457,7 @@ static int mtk_tx_alloc(struct mtk_eth *
{
const struct mtk_soc_data *soc = eth->soc;
struct mtk_tx_ring *ring = &eth->tx_ring;
@ -216,7 +216,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
struct mtk_tx_dma_v2 *txd;
int ring_size;
u32 ofs, val;
@@ -2572,14 +2572,14 @@ static void mtk_tx_clean(struct mtk_eth
@@ -2580,14 +2580,14 @@ static void mtk_tx_clean(struct mtk_eth
}
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && ring->dma) {
dma_free_coherent(eth->dma_dev,
@ -233,7 +233,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
ring->dma_pdma, ring->phys_pdma);
ring->dma_pdma = NULL;
}
@@ -2634,15 +2634,15 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2642,15 +2642,15 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM) ||
rx_flag != MTK_RX_FLAGS_NORMAL) {
ring->dma = dma_alloc_coherent(eth->dma_dev,
@ -253,7 +253,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
if (!ring->dma)
@@ -2653,7 +2653,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2661,7 +2661,7 @@ static int mtk_rx_alloc(struct mtk_eth *
dma_addr_t dma_addr;
void *data;
@ -262,7 +262,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (ring->page_pool) {
data = mtk_page_pool_get_buff(ring->page_pool,
&dma_addr, GFP_KERNEL);
@@ -2744,7 +2744,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2752,7 +2752,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!ring->data[i])
continue;
@ -271,7 +271,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (!rxd->rxd1)
continue;
@@ -2761,7 +2761,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2769,7 +2769,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!in_sram && ring->dma) {
dma_free_coherent(eth->dma_dev,
@ -280,7 +280,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
ring->dma, ring->phys);
ring->dma = NULL;
}
@@ -3132,7 +3132,7 @@ static void mtk_dma_free(struct mtk_eth
@@ -3140,7 +3140,7 @@ static void mtk_dma_free(struct mtk_eth
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
dma_free_coherent(eth->dma_dev,
@ -289,7 +289,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
eth->scratch_ring, eth->phy_scratch_ring);
eth->scratch_ring = NULL;
eth->phy_scratch_ring = 0;
@@ -3182,7 +3182,7 @@ static irqreturn_t mtk_handle_irq_rx(int
@@ -3190,7 +3190,7 @@ static irqreturn_t mtk_handle_irq_rx(int
eth->rx_events++;
if (likely(napi_schedule_prep(&eth->rx_napi))) {
@ -298,7 +298,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
__napi_schedule(&eth->rx_napi);
}
@@ -3208,9 +3208,9 @@ static irqreturn_t mtk_handle_irq(int ir
@@ -3216,9 +3216,9 @@ static irqreturn_t mtk_handle_irq(int ir
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
if (mtk_r32(eth, reg_map->pdma.irq_mask) &
@ -310,7 +310,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mtk_handle_irq_rx(irq, _eth);
}
if (mtk_r32(eth, reg_map->tx_irq_mask) & MTK_TX_DONE_INT) {
@@ -3228,10 +3228,10 @@ static void mtk_poll_controller(struct n
@@ -3236,10 +3236,10 @@ static void mtk_poll_controller(struct n
struct mtk_eth *eth = mac->hw;
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
@ -323,7 +323,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
#endif
@@ -3395,7 +3395,7 @@ static int mtk_open(struct net_device *d
@@ -3403,7 +3403,7 @@ static int mtk_open(struct net_device *d
napi_enable(&eth->tx_napi);
napi_enable(&eth->rx_napi);
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
@ -332,7 +332,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
refcount_set(&eth->dma_refcnt, 1);
}
else
@@ -3479,7 +3479,7 @@ static int mtk_stop(struct net_device *d
@@ -3487,7 +3487,7 @@ static int mtk_stop(struct net_device *d
mtk_gdm_config(eth, MTK_GDMA_DROP_ALL);
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
@ -341,7 +341,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
napi_disable(&eth->tx_napi);
napi_disable(&eth->rx_napi);
@@ -3955,9 +3955,9 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -3963,9 +3963,9 @@ static int mtk_hw_init(struct mtk_eth *e
/* FE int grouping */
mtk_w32(eth, MTK_TX_DONE_INT, reg_map->pdma.int_grp);
@ -353,7 +353,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
if (mtk_is_netsys_v3_or_greater(eth)) {
@@ -5065,11 +5065,15 @@ static const struct mtk_soc_data mt2701_
@@ -5073,11 +5073,15 @@ static const struct mtk_soc_data mt2701_
.required_clks = MT7623_CLKS_BITMAP,
.required_pctl = true,
.version = 1,
@ -374,7 +374,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5085,11 +5089,15 @@ static const struct mtk_soc_data mt7621_
@@ -5093,11 +5097,15 @@ static const struct mtk_soc_data mt7621_
.offload_version = 1,
.hash_offset = 2,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
@ -395,7 +395,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5107,11 +5115,15 @@ static const struct mtk_soc_data mt7622_
@@ -5115,11 +5123,15 @@ static const struct mtk_soc_data mt7622_
.hash_offset = 2,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
@ -416,7 +416,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5128,11 +5140,15 @@ static const struct mtk_soc_data mt7623_
@@ -5136,11 +5148,15 @@ static const struct mtk_soc_data mt7623_
.hash_offset = 2,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.disable_pll_modes = true,
@ -437,7 +437,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5147,11 +5163,15 @@ static const struct mtk_soc_data mt7629_
@@ -5155,11 +5171,15 @@ static const struct mtk_soc_data mt7629_
.required_pctl = false,
.has_accounting = true,
.version = 1,
@ -458,7 +458,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5169,11 +5189,15 @@ static const struct mtk_soc_data mt7981_
@@ -5177,11 +5197,15 @@ static const struct mtk_soc_data mt7981_
.hash_offset = 4,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
@ -479,7 +479,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
},
@@ -5191,11 +5215,15 @@ static const struct mtk_soc_data mt7986_
@@ -5199,11 +5223,15 @@ static const struct mtk_soc_data mt7986_
.hash_offset = 4,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
@ -500,7 +500,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
},
@@ -5213,11 +5241,15 @@ static const struct mtk_soc_data mt7988_
@@ -5221,11 +5249,15 @@ static const struct mtk_soc_data mt7988_
.hash_offset = 4,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
@ -521,7 +521,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
},
@@ -5230,11 +5262,15 @@ static const struct mtk_soc_data rt5350_
@@ -5238,11 +5270,15 @@ static const struct mtk_soc_data rt5350_
.required_clks = MT7628_CLKS_BITMAP,
.required_pctl = false,
.version = 1,

View File

@ -58,7 +58,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
}
@@ -2024,7 +2024,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2032,7 +2032,7 @@ static int mtk_poll_rx(struct napi_struc
break;
/* find out which mac the packet come from. values start at 1 */
@ -67,7 +67,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
u32 val = RX_DMA_GET_SPORT_V2(trxd.rxd5);
switch (val) {
@@ -2136,7 +2136,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2144,7 +2144,7 @@ static int mtk_poll_rx(struct napi_struc
skb->dev = netdev;
bytes += skb->len;
@ -76,7 +76,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
if (hash != MTK_RXD5_FOE_ENTRY)
@@ -2690,7 +2690,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2698,7 +2698,7 @@ static int mtk_rx_alloc(struct mtk_eth *
rxd->rxd3 = 0;
rxd->rxd4 = 0;
@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
rxd->rxd5 = 0;
rxd->rxd6 = 0;
rxd->rxd7 = 0;
@@ -3901,7 +3901,7 @@ static int mtk_hw_init(struct mtk_eth *e
@@ -3909,7 +3909,7 @@ static int mtk_hw_init(struct mtk_eth *e
else
mtk_hw_reset(eth);
@ -94,7 +94,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
/* Set FE to PDMAv2 if necessary */
val = mtk_r32(eth, MTK_FE_GLO_MISC);
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
@@ -5195,11 +5195,11 @@ static const struct mtk_soc_data mt7981_
@@ -5203,11 +5203,11 @@ static const struct mtk_soc_data mt7981_
.dma_len_offset = 8,
},
.rx = {
@ -110,7 +110,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
},
};
@@ -5221,11 +5221,11 @@ static const struct mtk_soc_data mt7986_
@@ -5229,11 +5229,11 @@ static const struct mtk_soc_data mt7986_
.dma_len_offset = 8,
},
.rx = {

View File

@ -123,7 +123,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
}
@@ -2461,7 +2467,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2469,7 +2475,7 @@ static int mtk_tx_alloc(struct mtk_eth *
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA))
ring_size = MTK_QDMA_RING_SIZE;
else
@ -132,7 +132,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
ring->buf = kcalloc(ring_size, sizeof(*ring->buf),
GFP_KERNEL);
@@ -2469,8 +2475,8 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2477,8 +2483,8 @@ static int mtk_tx_alloc(struct mtk_eth *
goto no_tx_mem;
if (MTK_HAS_CAPS(soc->caps, MTK_SRAM)) {
@ -143,7 +143,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
} else {
ring->dma = dma_alloc_coherent(eth->dma_dev, ring_size * sz,
&ring->phys, GFP_KERNEL);
@@ -2592,6 +2598,7 @@ static void mtk_tx_clean(struct mtk_eth
@@ -2600,6 +2606,7 @@ static void mtk_tx_clean(struct mtk_eth
static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag)
{
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
@ -151,7 +151,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
struct mtk_rx_ring *ring;
int rx_data_len, rx_dma_size, tx_ring_size;
int i;
@@ -2599,7 +2606,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2607,7 +2614,7 @@ static int mtk_rx_alloc(struct mtk_eth *
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
tx_ring_size = MTK_QDMA_RING_SIZE;
else
@ -160,7 +160,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (rx_flag == MTK_RX_FLAGS_QDMA) {
if (ring_no)
@@ -2614,7 +2621,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2622,7 +2629,7 @@ static int mtk_rx_alloc(struct mtk_eth *
rx_dma_size = MTK_HW_LRO_DMA_SIZE;
} else {
rx_data_len = ETH_DATA_LEN;
@ -169,7 +169,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
ring->frag_size = mtk_max_frag_size(rx_data_len);
@@ -3151,7 +3158,10 @@ static void mtk_dma_free(struct mtk_eth
@@ -3159,7 +3166,10 @@ static void mtk_dma_free(struct mtk_eth
mtk_rx_clean(eth, &eth->rx_ring[i], false);
}
@ -181,7 +181,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
}
static bool mtk_hw_reset_check(struct mtk_eth *eth)
@@ -5073,11 +5083,14 @@ static const struct mtk_soc_data mt2701_
@@ -5081,11 +5091,14 @@ static const struct mtk_soc_data mt2701_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -196,7 +196,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5097,11 +5110,14 @@ static const struct mtk_soc_data mt7621_
@@ -5105,11 +5118,14 @@ static const struct mtk_soc_data mt7621_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -211,7 +211,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5123,11 +5139,14 @@ static const struct mtk_soc_data mt7622_
@@ -5131,11 +5147,14 @@ static const struct mtk_soc_data mt7622_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -226,7 +226,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5148,11 +5167,14 @@ static const struct mtk_soc_data mt7623_
@@ -5156,11 +5175,14 @@ static const struct mtk_soc_data mt7623_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -241,7 +241,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5171,11 +5193,14 @@ static const struct mtk_soc_data mt7629_
@@ -5179,11 +5201,14 @@ static const struct mtk_soc_data mt7629_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -256,7 +256,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5197,6 +5222,8 @@ static const struct mtk_soc_data mt7981_
@@ -5205,6 +5230,8 @@ static const struct mtk_soc_data mt7981_
.desc_size = sizeof(struct mtk_tx_dma_v2),
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
@ -265,7 +265,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
.rx = {
.desc_size = sizeof(struct mtk_rx_dma),
@@ -5204,6 +5231,7 @@ static const struct mtk_soc_data mt7981_
@@ -5212,6 +5239,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,
@ -273,7 +273,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -5223,6 +5251,8 @@ static const struct mtk_soc_data mt7986_
@@ -5231,6 +5259,8 @@ static const struct mtk_soc_data mt7986_
.desc_size = sizeof(struct mtk_tx_dma_v2),
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
@ -282,7 +282,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
.rx = {
.desc_size = sizeof(struct mtk_rx_dma),
@@ -5230,6 +5260,7 @@ static const struct mtk_soc_data mt7986_
@@ -5238,6 +5268,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,
@ -290,7 +290,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -5249,6 +5280,8 @@ static const struct mtk_soc_data mt7988_
@@ -5257,6 +5288,8 @@ static const struct mtk_soc_data mt7988_
.desc_size = sizeof(struct mtk_tx_dma_v2),
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
@ -299,7 +299,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
.rx = {
.desc_size = sizeof(struct mtk_rx_dma_v2),
@@ -5256,6 +5289,7 @@ static const struct mtk_soc_data mt7988_
@@ -5264,6 +5297,7 @@ static const struct mtk_soc_data mt7988_
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
.dma_len_offset = 8,
@ -307,7 +307,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
};
@@ -5270,6 +5304,7 @@ static const struct mtk_soc_data rt5350_
@@ -5278,6 +5312,7 @@ static const struct mtk_soc_data rt5350_
.desc_size = sizeof(struct mtk_tx_dma),
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
@ -315,7 +315,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
},
.rx = {
.desc_size = sizeof(struct mtk_rx_dma),
@@ -5277,6 +5312,7 @@ static const struct mtk_soc_data rt5350_
@@ -5285,6 +5320,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,

View File

@ -60,7 +60,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.ppe_base = 0x2000,
.wdma_base = {
[0] = 0x4800,
@@ -2015,6 +2024,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2023,6 +2032,7 @@ static int mtk_poll_rx(struct napi_struc
struct mtk_rx_dma_v2 *rxd, trxd;
int done = 0, bytes = 0;
dma_addr_t dma_addr = DMA_MAPPING_ERROR;
@ -68,7 +68,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
while (done < budget) {
unsigned int pktlen, *rxdcsum;
@@ -2058,6 +2068,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2066,6 +2076,7 @@ static int mtk_poll_rx(struct napi_struc
goto release_desc;
netdev = eth->netdev[mac];
@ -76,7 +76,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))
goto release_desc;
@@ -2181,7 +2192,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2189,7 +2200,7 @@ static int mtk_poll_rx(struct napi_struc
}
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
skb_record_rx_queue(skb, 0);
napi_gro_receive(napi, skb);
@@ -3288,37 +3299,27 @@ static int mtk_start_dma(struct mtk_eth
@@ -3296,37 +3307,27 @@ static int mtk_start_dma(struct mtk_eth
return 0;
}
@ -134,7 +134,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
@@ -3378,7 +3379,10 @@ static int mtk_open(struct net_device *d
@@ -3386,7 +3387,10 @@ static int mtk_open(struct net_device *d
{
struct mtk_mac *mac = netdev_priv(dev);
struct mtk_eth *eth = mac->hw;
@ -146,7 +146,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
if (err) {
@@ -3402,18 +3406,38 @@ static int mtk_open(struct net_device *d
@@ -3410,18 +3414,38 @@ static int mtk_open(struct net_device *d
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
mtk_ppe_start(eth->ppe[i]);
@ -190,7 +190,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
phylink_start(mac->phylink);
netif_tx_start_all_queues(dev);
@@ -3490,7 +3514,8 @@ static int mtk_stop(struct net_device *d
@@ -3498,7 +3522,8 @@ static int mtk_stop(struct net_device *d
if (!refcount_dec_and_test(&eth->dma_refcnt))
return 0;
@ -200,7 +200,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
mtk_rx_irq_disable(eth, eth->soc->rx.irq_done_mask);
@@ -4985,23 +5010,24 @@ static int mtk_probe(struct platform_dev
@@ -4993,23 +5018,24 @@ static int mtk_probe(struct platform_dev
}
if (eth->soc->offload_version) {
@ -233,7 +233,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
}
for (i = 0; i < MTK_MAX_DEVS; i++) {
@@ -5104,6 +5130,7 @@ static const struct mtk_soc_data mt7621_
@@ -5112,6 +5138,7 @@ static const struct mtk_soc_data mt7621_
.required_pctl = false,
.version = 1,
.offload_version = 1,
@ -241,7 +241,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.hash_offset = 2,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.tx = {
@@ -5132,6 +5159,7 @@ static const struct mtk_soc_data mt7622_
@@ -5140,6 +5167,7 @@ static const struct mtk_soc_data mt7622_
.required_pctl = false,
.version = 1,
.offload_version = 2,
@ -249,7 +249,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.hash_offset = 2,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
@@ -5160,6 +5188,7 @@ static const struct mtk_soc_data mt7623_
@@ -5168,6 +5196,7 @@ static const struct mtk_soc_data mt7623_
.required_pctl = true,
.version = 1,
.offload_version = 1,
@ -257,7 +257,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.hash_offset = 2,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.disable_pll_modes = true,
@@ -5215,6 +5244,7 @@ static const struct mtk_soc_data mt7981_
@@ -5223,6 +5252,7 @@ static const struct mtk_soc_data mt7981_
.required_pctl = false,
.version = 2,
.offload_version = 2,
@ -265,7 +265,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.hash_offset = 4,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
@@ -5244,6 +5274,7 @@ static const struct mtk_soc_data mt7986_
@@ -5252,6 +5282,7 @@ static const struct mtk_soc_data mt7986_
.required_pctl = false,
.version = 2,
.offload_version = 2,
@ -273,7 +273,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
.hash_offset = 4,
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
@@ -5273,6 +5304,7 @@ static const struct mtk_soc_data mt7988_
@@ -5281,6 +5312,7 @@ static const struct mtk_soc_data mt7988_
.required_pctl = false,
.version = 3,
.offload_version = 2,

View File

@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3408,7 +3408,7 @@ static int mtk_open(struct net_device *d
@@ -3416,7 +3416,7 @@ static int mtk_open(struct net_device *d
for (i = 0; i < MTK_MAX_DEVS; i++) {
if (!eth->netdev[i])

View File

@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -4490,6 +4490,20 @@ static int mtk_set_rxnfc(struct net_devi
@@ -4498,6 +4498,20 @@ static int mtk_set_rxnfc(struct net_devi
return ret;
}
@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
static u16 mtk_select_queue(struct net_device *dev, struct sk_buff *skb,
struct net_device *sb_dev)
{
@@ -4518,8 +4532,10 @@ static const struct ethtool_ops mtk_etht
@@ -4526,8 +4540,10 @@ static const struct ethtool_ops mtk_etht
.get_strings = mtk_get_strings,
.get_sset_count = mtk_get_sset_count,
.get_ethtool_stats = mtk_get_ethtool_stats,

View File

@ -39,7 +39,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
mcr |= MAC_MCR_TX_EN | MAC_MCR_RX_EN | MAC_MCR_FORCE_LINK;
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
}
@@ -4504,6 +4514,61 @@ static int mtk_set_pauseparam(struct net
@@ -4512,6 +4522,61 @@ static int mtk_set_pauseparam(struct net
return phylink_ethtool_set_pauseparam(mac->phylink, pause);
}
@ -101,7 +101,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
static u16 mtk_select_queue(struct net_device *dev, struct sk_buff *skb,
struct net_device *sb_dev)
{
@@ -4536,6 +4601,8 @@ static const struct ethtool_ops mtk_etht
@@ -4544,6 +4609,8 @@ static const struct ethtool_ops mtk_etht
.set_pauseparam = mtk_set_pauseparam,
.get_rxnfc = mtk_get_rxnfc,
.set_rxnfc = mtk_set_rxnfc,
@ -110,7 +110,7 @@ Signed-off-by: Qingfang Deng <dqfext@gmail.com>
};
static const struct net_device_ops mtk_netdev_ops = {
@@ -4596,6 +4663,8 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -4604,6 +4671,8 @@ static int mtk_add_mac(struct mtk_eth *e
}
mac = netdev_priv(eth->netdev[id]);
eth->mac[id] = mac;

View File

@ -1,2 +1,2 @@
LINUX_VERSION-6.6 = .104
LINUX_KERNEL_HASH-6.6.104 = 2a772f9d661afabaaddcdfd1116239acb2d943377aceab9e0baed2b7a915e36a
LINUX_VERSION-6.6 = .105
LINUX_KERNEL_HASH-6.6.105 = 3f916e664f1872980b436614cba1d8b10246033435e0312ea0d8cc16599e1a1d

View File

@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -5133,6 +5133,8 @@ static int mtk_probe(struct platform_dev
@@ -5141,6 +5141,8 @@ static int mtk_probe(struct platform_dev
* for NAPI to work
*/
init_dummy_netdev(&eth->dummy_dev);

View File

@ -53,7 +53,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
bool gso = false;
int tx_num;
@@ -1633,6 +1650,18 @@ static netdev_tx_t mtk_start_xmit(struct
@@ -1640,6 +1657,18 @@ static netdev_tx_t mtk_start_xmit(struct
return NETDEV_TX_BUSY;
}
@ -72,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* TSO: fill MSS info in tcp checksum field */
if (skb_is_gso(skb)) {
if (skb_cow_head(skb, 0)) {
@@ -1648,8 +1677,14 @@ static netdev_tx_t mtk_start_xmit(struct
@@ -1655,8 +1684,14 @@ static netdev_tx_t mtk_start_xmit(struct
}
}

View File

@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* unmap dma */
mtk_tx_unmap(eth, tx_buf, NULL, false);
@@ -1714,7 +1719,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
@@ -1722,7 +1727,7 @@ static struct mtk_rx_ring *mtk_get_rx_ri
ring = &eth->rx_ring[i];
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -123,7 +123,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (rxd->rxd2 & RX_DMA_DONE) {
ring->calc_idx_update = true;
return ring;
@@ -1882,7 +1887,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1890,7 +1895,7 @@ static int mtk_xdp_submit_frame(struct m
}
htxd = txd;
@ -132,7 +132,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
memset(tx_buf, 0, sizeof(*tx_buf));
htx_buf = tx_buf;
@@ -1901,7 +1906,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1909,7 +1914,7 @@ static int mtk_xdp_submit_frame(struct m
goto unmap;
tx_buf = mtk_desc_to_tx_buf(ring, txd,
@ -141,7 +141,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
memset(tx_buf, 0, sizeof(*tx_buf));
n_desc++;
}
@@ -1939,7 +1944,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1947,7 +1952,7 @@ static int mtk_xdp_submit_frame(struct m
} else {
int idx;
@ -150,7 +150,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
mtk_w32(eth, NEXT_DESP_IDX(idx, ring->dma_size),
MT7628_TX_CTX_IDX0);
}
@@ -1950,7 +1955,7 @@ static int mtk_xdp_submit_frame(struct m
@@ -1958,7 +1963,7 @@ static int mtk_xdp_submit_frame(struct m
unmap:
while (htxd != txd) {
@ -159,7 +159,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
mtk_tx_unmap(eth, tx_buf, NULL, false);
htxd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
@@ -2082,7 +2087,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2090,7 +2095,7 @@ static int mtk_poll_rx(struct napi_struc
goto rx_done;
idx = NEXT_DESP_IDX(ring->calc_idx, ring->dma_size);
@ -168,7 +168,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
data = ring->data[idx];
if (!mtk_rx_get_desc(eth, &trxd, rxd))
@@ -2346,7 +2351,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
@@ -2354,7 +2359,7 @@ static int mtk_poll_tx_qdma(struct mtk_e
break;
tx_buf = mtk_desc_to_tx_buf(ring, desc,
@ -177,7 +177,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!tx_buf->data)
break;
@@ -2397,7 +2402,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
@@ -2405,7 +2410,7 @@ static int mtk_poll_tx_pdma(struct mtk_e
}
mtk_tx_unmap(eth, tx_buf, &bq, true);
@ -186,7 +186,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->last_free = desc;
atomic_inc(&ring->free_count);
@@ -2515,7 +2520,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2523,7 +2528,7 @@ static int mtk_tx_alloc(struct mtk_eth *
{
const struct mtk_soc_data *soc = eth->soc;
struct mtk_tx_ring *ring = &eth->tx_ring;
@ -195,7 +195,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct mtk_tx_dma_v2 *txd;
int ring_size;
u32 ofs, val;
@@ -2562,7 +2567,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2570,7 +2575,7 @@ static int mtk_tx_alloc(struct mtk_eth *
* descriptors in ring->dma_pdma.
*/
if (!MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
@ -204,7 +204,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
&ring->phys_pdma, GFP_KERNEL);
if (!ring->dma_pdma)
goto no_tx_mem;
@@ -2577,7 +2582,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2585,7 +2590,7 @@ static int mtk_tx_alloc(struct mtk_eth *
atomic_set(&ring->free_count, ring_size - 2);
ring->next_free = ring->dma;
ring->last_free = (void *)txd;
@ -213,7 +213,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->thresh = MAX_SKB_FRAGS;
/* make sure that all changes to the dma ring are flushed before we
@@ -2589,7 +2594,7 @@ static int mtk_tx_alloc(struct mtk_eth *
@@ -2597,7 +2602,7 @@ static int mtk_tx_alloc(struct mtk_eth *
mtk_w32(eth, ring->phys, soc->reg_map->qdma.ctx_ptr);
mtk_w32(eth, ring->phys, soc->reg_map->qdma.dtx_ptr);
mtk_w32(eth,
@ -222,7 +222,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
soc->reg_map->qdma.crx_ptr);
mtk_w32(eth, ring->last_free_ptr, soc->reg_map->qdma.drx_ptr);
@@ -2638,14 +2643,14 @@ static void mtk_tx_clean(struct mtk_eth
@@ -2646,14 +2651,14 @@ static void mtk_tx_clean(struct mtk_eth
}
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && ring->dma) {
dma_free_coherent(eth->dma_dev,
@ -239,7 +239,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma_pdma, ring->phys_pdma);
ring->dma_pdma = NULL;
}
@@ -2701,15 +2706,13 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2709,15 +2714,13 @@ static int mtk_rx_alloc(struct mtk_eth *
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM) ||
rx_flag != MTK_RX_FLAGS_NORMAL) {
ring->dma = dma_alloc_coherent(eth->dma_dev,
@ -258,7 +258,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
}
if (!ring->dma)
@@ -2720,7 +2723,7 @@ static int mtk_rx_alloc(struct mtk_eth *
@@ -2728,7 +2731,7 @@ static int mtk_rx_alloc(struct mtk_eth *
dma_addr_t dma_addr;
void *data;
@ -267,7 +267,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (ring->page_pool) {
data = mtk_page_pool_get_buff(ring->page_pool,
&dma_addr, GFP_KERNEL);
@@ -2811,7 +2814,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2819,7 +2822,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!ring->data[i])
continue;
@ -276,7 +276,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!rxd->rxd1)
continue;
@@ -2828,7 +2831,7 @@ static void mtk_rx_clean(struct mtk_eth
@@ -2836,7 +2839,7 @@ static void mtk_rx_clean(struct mtk_eth
if (!in_sram && ring->dma) {
dma_free_coherent(eth->dma_dev,
@ -285,7 +285,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ring->dma, ring->phys);
ring->dma = NULL;
}
@@ -3199,7 +3202,7 @@ static void mtk_dma_free(struct mtk_eth
@@ -3207,7 +3210,7 @@ static void mtk_dma_free(struct mtk_eth
if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
dma_free_coherent(eth->dma_dev,
@ -294,7 +294,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
eth->scratch_ring, eth->phy_scratch_ring);
eth->scratch_ring = NULL;
eth->phy_scratch_ring = 0;
@@ -5220,6 +5223,9 @@ static int mtk_remove(struct platform_de
@@ -5228,6 +5231,9 @@ static int mtk_remove(struct platform_de
return 0;
}
@ -304,7 +304,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static const struct mtk_soc_data mt2701_data = {
.reg_map = &mtk_reg_map,
.caps = MT7623_CAPS | MTK_HWLRO,
@@ -5228,14 +5234,14 @@ static const struct mtk_soc_data mt2701_
@@ -5236,14 +5242,14 @@ static const struct mtk_soc_data mt2701_
.required_pctl = true,
.version = 1,
.tx = {
@ -321,7 +321,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_size = MTK_DMA_SIZE(2K),
@@ -5256,14 +5262,14 @@ static const struct mtk_soc_data mt7621_
@@ -5264,14 +5270,14 @@ static const struct mtk_soc_data mt7621_
.hash_offset = 2,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.tx = {
@ -338,7 +338,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_size = MTK_DMA_SIZE(2K),
@@ -5286,14 +5292,14 @@ static const struct mtk_soc_data mt7622_
@@ -5294,14 +5300,14 @@ static const struct mtk_soc_data mt7622_
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.tx = {
@ -355,7 +355,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_size = MTK_DMA_SIZE(2K),
@@ -5315,14 +5321,14 @@ static const struct mtk_soc_data mt7623_
@@ -5323,14 +5329,14 @@ static const struct mtk_soc_data mt7623_
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
.disable_pll_modes = true,
.tx = {
@ -372,7 +372,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_size = MTK_DMA_SIZE(2K),
@@ -5341,14 +5347,14 @@ static const struct mtk_soc_data mt7629_
@@ -5349,14 +5355,14 @@ static const struct mtk_soc_data mt7629_
.has_accounting = true,
.version = 1,
.tx = {
@ -389,7 +389,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_size = MTK_DMA_SIZE(2K),
@@ -5371,14 +5377,14 @@ static const struct mtk_soc_data mt7981_
@@ -5379,14 +5385,14 @@ static const struct mtk_soc_data mt7981_
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
.tx = {
@ -406,7 +406,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
@@ -5401,14 +5407,14 @@ static const struct mtk_soc_data mt7986_
@@ -5409,14 +5415,14 @@ static const struct mtk_soc_data mt7986_
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
.tx = {
@ -423,7 +423,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
@@ -5431,14 +5437,14 @@ static const struct mtk_soc_data mt7988_
@@ -5439,14 +5445,14 @@ static const struct mtk_soc_data mt7988_
.has_accounting = true,
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
.tx = {
@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.irq_done_mask = MTK_RX_DONE_INT_V2,
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
@@ -5455,13 +5461,13 @@ static const struct mtk_soc_data rt5350_
@@ -5463,13 +5469,13 @@ static const struct mtk_soc_data rt5350_
.required_pctl = false,
.version = 1,
.tx = {

View File

@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
tx_buf->mac_id = mac->id;
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
@@ -1830,8 +1814,6 @@ static int mtk_xdp_frame_map(struct mtk_
@@ -1838,8 +1822,6 @@ static int mtk_xdp_frame_map(struct mtk_
txd_info->size, DMA_TO_DEVICE);
if (unlikely(dma_mapping_error(eth->dma_dev, txd_info->addr)))
return -ENOMEM;

View File

@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2180,7 +2180,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2188,7 +2188,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@nbd.name>
if (unlikely(!skb)) {
page_pool_put_full_page(ring->page_pool,
page, true);
@@ -2218,7 +2218,7 @@ static int mtk_poll_rx(struct napi_struc
@@ -2226,7 +2226,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);

View File

@ -25,7 +25,7 @@ Signed-off-by: Chad Monroe <chad@monroe.io>
/* QDMA Flow Control Register */
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3351,12 +3351,14 @@ static int mtk_start_dma(struct mtk_eth
@@ -3359,12 +3359,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;

View File

@ -490,7 +490,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
.mac_finish = mtk_mac_finish,
.mac_link_down = mtk_mac_link_down,
.mac_link_up = mtk_mac_link_up,
@@ -3459,6 +3600,9 @@ static int mtk_open(struct net_device *d
@@ -3467,6 +3608,9 @@ static int mtk_open(struct net_device *d
ppe_num = eth->soc->ppe_num;
@ -500,7 +500,7 @@ Signed-off-by: Daniel Golle <daniel@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__,
@@ -3609,6 +3753,9 @@ static int mtk_stop(struct net_device *d
@@ -3617,6 +3761,9 @@ static int mtk_stop(struct net_device *d
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
mtk_ppe_stop(eth->ppe[i]);
@ -510,7 +510,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
return 0;
}
@@ -4695,6 +4842,7 @@ static const struct net_device_ops mtk_n
@@ -4703,6 +4850,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);
@ -518,7 +518,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
phy_interface_t phy_mode;
struct phylink *phylink;
struct mtk_mac *mac;
@@ -4733,16 +4881,41 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -4741,16 +4889,41 @@ static int mtk_add_mac(struct mtk_eth *e
mac->id = id;
mac->hw = eth;
mac->of_node = np;
@ -568,7 +568,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
}
memset(mac->hwlro_ip, 0, sizeof(mac->hwlro_ip));
@@ -4825,8 +4998,21 @@ static int mtk_add_mac(struct mtk_eth *e
@@ -4833,8 +5006,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);
@ -590,7 +590,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
phylink = phylink_create(&mac->phylink_config,
of_fwnode_handle(mac->of_node),
phy_mode, &mtk_phylink_ops);
@@ -4877,6 +5063,26 @@ free_netdev:
@@ -4885,6 +5071,26 @@ free_netdev:
return err;
}
@ -617,7 +617,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev)
{
struct net_device *dev, *tmp;
@@ -5023,7 +5229,8 @@ static int mtk_probe(struct platform_dev
@@ -5031,7 +5237,8 @@ static int mtk_probe(struct platform_dev
regmap_write(cci, 0, 3);
}
@ -627,7 +627,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
err = mtk_sgmii_init(eth);
if (err)
@@ -5134,6 +5341,24 @@ static int mtk_probe(struct platform_dev
@@ -5142,6 +5349,24 @@ static int mtk_probe(struct platform_dev
}
}
@ -652,7 +652,7 @@ Signed-off-by: Daniel Golle <daniel@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,
@@ -5237,6 +5462,11 @@ static int mtk_remove(struct platform_de
@@ -5245,6 +5470,11 @@ static int mtk_remove(struct platform_de
mtk_stop(eth->netdev[i]);
mac = netdev_priv(eth->netdev[i]);
phylink_disconnect_phy(mac->phylink);

View File

@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -5501,7 +5501,7 @@ static const struct mtk_soc_data mt2701_
@@ -5509,7 +5509,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@nbd.name>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5529,7 +5529,7 @@ static const struct mtk_soc_data mt7621_
@@ -5537,7 +5537,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@nbd.name>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5559,7 +5559,7 @@ static const struct mtk_soc_data mt7622_
@@ -5567,7 +5567,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@nbd.name>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5588,7 +5588,7 @@ static const struct mtk_soc_data mt7623_
@@ -5596,7 +5596,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@nbd.name>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5614,7 +5614,7 @@ static const struct mtk_soc_data mt7629_
@@ -5622,7 +5622,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@nbd.name>
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
@@ -5646,7 +5646,7 @@ static const struct mtk_soc_data mt7981_
@@ -5654,7 +5654,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@nbd.name>
},
};
@@ -5676,7 +5676,7 @@ static const struct mtk_soc_data mt7986_
@@ -5684,7 +5684,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@nbd.name>
},
};
@@ -5729,7 +5729,7 @@ static const struct mtk_soc_data rt5350_
@@ -5737,7 +5737,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,

View File

@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
help
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -4610,6 +4610,7 @@ static int mtk_get_sset_count(struct net
@@ -4618,6 +4618,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@nbd.name>
struct page_pool_stats stats = {};
int i;
@@ -4622,6 +4623,7 @@ static void mtk_ethtool_pp_stats(struct
@@ -4630,6 +4631,7 @@ static void mtk_ethtool_pp_stats(struct
page_pool_get_stats(ring->page_pool, &stats);
}
page_pool_ethtool_stats_get(data, &stats);

View File

@ -1,39 +0,0 @@
From: Felix Fietkau <nbd@nbd.name>
Date: Sun, 31 Aug 2025 20:05:13 +0200
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix tx vlan tag for llc packets
When sending llc packets with vlan tx offload, the hardware fails to
actually add the tag. Deal with this by fixing it up in software.
Fixes: 656e705243fd ("net-next: mediatek: add support for MT7623 ethernet")
Reported-by: Thibaut VARENE <hacks@slashdirt.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1805,6 +1805,13 @@ static netdev_tx_t mtk_start_xmit(struct
bool gso = false;
int tx_num;
+ if (skb_vlan_tag_present(skb) &&
+ !eth_proto_is_802_3(eth_hdr(skb)->h_proto)) {
+ skb = __vlan_hwaccel_push_inside(skb);
+ if (!skb)
+ goto dropped;
+ }
+
/* normally we can rely on the stack not calling this more than once,
* however we have 2 queues running on the same ring so we need to lock
* the ring access
@@ -1868,8 +1875,9 @@ static netdev_tx_t mtk_start_xmit(struct
drop:
spin_unlock(&eth->page_lock);
- stats->tx_dropped++;
dev_kfree_skb_any(skb);
+dropped:
+ stats->tx_dropped++;
return NETDEV_TX_OK;
}