]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: ethernet: mtk_eth_soc: fix RX VLAN offload
authorFelix Fietkau <nbd@nbd.name>
Fri, 23 Apr 2021 05:20:54 +0000 (22:20 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 May 2021 08:08:24 +0000 (10:08 +0200)
[ Upstream commit 3f57d8c40fea9b20543cab4da12f4680d2ef182c ]

The VLAN ID in the rx descriptor is only valid if the RX_DMA_VTAG bit is
set. Fixes frames wrongly marked with VLAN tags.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
[Ilya: fix commit message]
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mediatek/mtk_eth_soc.h

index d01b3a1b40f4aa9e4d72c82145dd36b94d81c677..7e3806fd70b212dbbc6c4563e5f41bd097e93732 100644 (file)
@@ -1315,7 +1315,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
                skb->protocol = eth_type_trans(skb, netdev);
 
                if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
-                   RX_DMA_VID(trxd.rxd3))
+                   (trxd.rxd2 & RX_DMA_VTAG))
                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
                                               RX_DMA_VID(trxd.rxd3));
                skb_record_rx_queue(skb, 0);
index 1e787f3577aa538ca81b9286fe7a194c8513dcc9..1e9202b34d352e17535845e8890f051763179b5f 100644 (file)
 #define RX_DMA_LSO             BIT(30)
 #define RX_DMA_PLEN0(_x)       (((_x) & 0x3fff) << 16)
 #define RX_DMA_GET_PLEN0(_x)   (((_x) >> 16) & 0x3fff)
+#define RX_DMA_VTAG            BIT(15)
 
 /* QDMA descriptor rxd3 */
 #define RX_DMA_VID(_x)         ((_x) & 0xfff)