diff options
Diffstat (limited to 'target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c')
-rw-r--r-- | target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c index e0bc0ab818..10d9fd7a3e 100644 --- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -933,6 +933,11 @@ static int fe_poll_rx(struct napi_struct *napi, int budget, skb_checksum_none_assert(skb); skb->protocol = eth_type_trans(skb, netdev); + if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX && + RX_DMA_VID(trxd.rxd3)) + __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), + RX_DMA_VID(trxd.rxd3)); + #ifdef CONFIG_NET_MEDIATEK_OFFLOAD if (mtk_offload_check_rx(priv, skb, trxd.rxd4) == 0) { #endif @@ -1585,7 +1590,9 @@ static int fe_probe(struct platform_device *pdev) if (soc->init_data) soc->init_data(soc, netdev); - netdev->vlan_features = netdev->hw_features & ~NETIF_F_HW_VLAN_CTAG_TX; + netdev->vlan_features = netdev->hw_features & + ~(NETIF_F_HW_VLAN_CTAG_TX | + NETIF_F_HW_VLAN_CTAG_RX); netdev->features |= netdev->hw_features; if (IS_ENABLED(CONFIG_SOC_MT7621)) |