ramips: mt7621: fix mtu setting with kernel 4.14
[openwrt/staging/wigyori.git] / target / linux / ramips / files-4.14 / drivers / net / ethernet / mediatek / mtk_eth_soc.c
index c806e289b55d5af8051e155028e894af956226b0..d298fa9a97071717093478519e15cdeda7dcab80 100644 (file)
@@ -1373,20 +1373,12 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
        int frag_size, old_mtu;
        u32 fwd_cfg;
 
-       if (!(priv->flags & FE_FLAG_JUMBO_FRAME))
-               return eth_change_mtu(dev, new_mtu);
-
-       if (IS_ENABLED(CONFIG_SOC_MT7621))
-               if (new_mtu > 2048)
-                       return -EINVAL;
-
-       frag_size = fe_max_frag_size(new_mtu);
-       if (new_mtu < 68 || frag_size > PAGE_SIZE)
-               return -EINVAL;
-
        old_mtu = dev->mtu;
        dev->mtu = new_mtu;
 
+       if (!(priv->flags & FE_FLAG_JUMBO_FRAME))
+               return 0;
+
        /* return early if the buffer sizes will not change */
        if (old_mtu <= ETH_DATA_LEN && new_mtu <= ETH_DATA_LEN)
                return 0;
@@ -1408,6 +1400,7 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
                if (new_mtu <= ETH_DATA_LEN) {
                        fwd_cfg &= ~FE_GDM1_JMB_EN;
                } else {
+                       frag_size = fe_max_frag_size(new_mtu);
                        fwd_cfg &= ~(FE_GDM1_JMB_LEN_MASK << FE_GDM1_JMB_LEN_SHIFT);
                        fwd_cfg |= (DIV_ROUND_UP(frag_size, 1024) <<
                        FE_GDM1_JMB_LEN_SHIFT) | FE_GDM1_JMB_EN;
@@ -1541,6 +1534,9 @@ static int fe_probe(struct platform_device *pdev)
        netdev->vlan_features = netdev->hw_features & ~NETIF_F_HW_VLAN_CTAG_TX;
        netdev->features |= netdev->hw_features;
 
+       if (IS_ENABLED(CONFIG_SOC_MT7621))
+               netdev->max_mtu = 2048;
+
        /* fake rx vlan filter func. to support tx vlan offload func */
        if (fe_reg_table[FE_REG_FE_DMA_VID_BASE])
                netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;