]> 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:29:35 +0000 (10:29 +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 6d2d60675ffd7d293a6a7f7f8283f6a08342fd38..d930fcda9c3b63d4f2ecfcd71541cf804a75b075 100644 (file)
@@ -1319,7 +1319,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 454cfcd465fdafae17e4c5340d5b432431d6a6d5..73ce1f0f307a4ac18008f413cc9023335e05cd70 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)