aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2017-06-01 12:29:40 +0200
committerJohn Crispin <john@phrozen.org>2017-06-01 12:30:17 +0200
commit7f9143168faef445effceead08d77ecc7c3e9dc6 (patch)
tree2271c4e239611b7ca9faf488778bd57ab6f57926 /target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c
parent9bc9457b85beedc718cadea22d5bdf7f807e758f (diff)
downloadupstream-7f9143168faef445effceead08d77ecc7c3e9dc6.tar.gz
upstream-7f9143168faef445effceead08d77ecc7c3e9dc6.tar.bz2
upstream-7f9143168faef445effceead08d77ecc7c3e9dc6.zip
ramips: add jumbo frame support for v4.9
Signed-off-by: John Crispin <john@phrozen.org>
Diffstat (limited to 'target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c')
-rw-r--r--target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c b/target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c
index 3e8768f63a..5f4afade06 100644
--- a/target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c
+++ b/target/linux/ramips/files-4.9/drivers/net/ethernet/mtk/mtk_eth_soc.c
@@ -1350,6 +1350,10 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
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;
@@ -1373,15 +1377,17 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
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);
}