mirror of https://github.com/hak5/openwrt-owl.git
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
parent
2f3c5fe962
commit
5da2c68d00
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue