ramips: support jumbo frame on mt7621 up to 2k
[openwrt/openwrt.git] / target / linux / ramips / patches-4.4 / 0501-net-next-mediatek-add-the-drivers-core-files.patch
index cc4c2a152df10fd441ad504234833eaa28b043f1..72ed2c5df10208e67197dbae082178e61e570c57 100644 (file)
@@ -600,7 +600,7 @@ Signed-off-by: Michael Lee <igvtee@gmail.com>
 +#endif
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -0,0 +1,1587 @@
+@@ -0,0 +1,1593 @@
 +/*   This program is free software; you can redistribute it and/or modify
 + *   it under the terms of the GNU General Public License as published by
 + *   the Free Software Foundation; version 2 of the License
@@ -1945,6 +1945,10 @@ Signed-off-by: Michael Lee <igvtee@gmail.com>
 +      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;
@@ -1968,15 +1972,17 @@ Signed-off-by: Michael Lee <igvtee@gmail.com>
 +              return 0;
 +
 +      fe_stop(dev);
-+      fwd_cfg = fe_r32(FE_GDMA1_FWD_CFG);
-+      if (new_mtu <= ETH_DATA_LEN) {
-+              fwd_cfg &= ~FE_GDM1_JMB_EN;
-+      } else {
-+              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;
++      if (!IS_ENABLED(CONFIG_SOC_MT7621)) {
++              fwd_cfg = fe_r32(FE_GDMA1_FWD_CFG);
++              if (new_mtu <= ETH_DATA_LEN) {
++                      fwd_cfg &= ~FE_GDM1_JMB_EN;
++              } else {
++                      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;
++              }
++              fe_w32(fwd_cfg, FE_GDMA1_FWD_CFG);
 +      }
-+      fe_w32(fwd_cfg, FE_GDMA1_FWD_CFG);
 +
 +      return fe_open(dev);
 +}