ramips: mt7621: fix mtu setting with kernel 4.14

Since kernel 4.10 commit 61e84623ace3 ("net: centralize net_device
min/max MTU checking"), the range of mtu is [min_mtu, max_mtu], which
is [68, 1500] by default.

It's necessary to set a max_mtu if a mtu > 1500 is supported.

Signed-off-by: Mathias Kresin <dev@kresin.me>
master
Mathias Kresin 2018-02-18 22:48:44 +01:00
parent 2f3c5fe962
commit 5da2c68d00
1 changed files with 7 additions and 11 deletions

View File

@ -1373,20 +1373,12 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
int frag_size, old_mtu; int frag_size, old_mtu;
u32 fwd_cfg; 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; old_mtu = dev->mtu;
dev->mtu = new_mtu; dev->mtu = new_mtu;
if (!(priv->flags & FE_FLAG_JUMBO_FRAME))
return 0;
/* return early if the buffer sizes will not change */ /* return early if the buffer sizes will not change */
if (old_mtu <= ETH_DATA_LEN && new_mtu <= ETH_DATA_LEN) if (old_mtu <= ETH_DATA_LEN && new_mtu <= ETH_DATA_LEN)
return 0; return 0;
@ -1408,6 +1400,7 @@ static int fe_change_mtu(struct net_device *dev, int new_mtu)
if (new_mtu <= ETH_DATA_LEN) { if (new_mtu <= ETH_DATA_LEN) {
fwd_cfg &= ~FE_GDM1_JMB_EN; fwd_cfg &= ~FE_GDM1_JMB_EN;
} else { } else {
frag_size = fe_max_frag_size(new_mtu);
fwd_cfg &= ~(FE_GDM1_JMB_LEN_MASK << FE_GDM1_JMB_LEN_SHIFT); fwd_cfg &= ~(FE_GDM1_JMB_LEN_MASK << FE_GDM1_JMB_LEN_SHIFT);
fwd_cfg |= (DIV_ROUND_UP(frag_size, 1024) << fwd_cfg |= (DIV_ROUND_UP(frag_size, 1024) <<
FE_GDM1_JMB_LEN_SHIFT) | FE_GDM1_JMB_EN; 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->vlan_features = netdev->hw_features & ~NETIF_F_HW_VLAN_CTAG_TX;
netdev->features |= netdev->hw_features; 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 */ /* fake rx vlan filter func. to support tx vlan offload func */
if (fe_reg_table[FE_REG_FE_DMA_VID_BASE]) if (fe_reg_table[FE_REG_FE_DMA_VID_BASE])
netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;