diff options
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/chip.c | 17 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/chip.h | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1.c | 2 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/port.c | 2 | 
4 files changed, 15 insertions, 7 deletions
| diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 8ab0be793811..03744d1c43fc 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -2834,8 +2834,8 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)  	if (err)  		return err; -	/* Port Control 2: don't force a good FCS, set the maximum frame size to -	 * 10240 bytes, disable 802.1q tags checking, don't discard tagged or +	/* Port Control 2: don't force a good FCS, set the MTU size to +	 * 10222 bytes, disable 802.1q tags checking, don't discard tagged or  	 * untagged frames on this port, do a destination address lookup on all  	 * received packets as usual, disable ARP mirroring and don't send a  	 * copy of all transmitted/received frames on this port to the CPU. @@ -2854,7 +2854,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)  		return err;  	if (chip->info->ops->port_set_jumbo_size) { -		err = chip->info->ops->port_set_jumbo_size(chip, port, 10240); +		err = chip->info->ops->port_set_jumbo_size(chip, port, 10218);  		if (err)  			return err;  	} @@ -2944,10 +2944,10 @@ static int mv88e6xxx_get_max_mtu(struct dsa_switch *ds, int port)  	struct mv88e6xxx_chip *chip = ds->priv;  	if (chip->info->ops->port_set_jumbo_size) -		return 10240; +		return 10240 - VLAN_ETH_HLEN - EDSA_HLEN - ETH_FCS_LEN;  	else if (chip->info->ops->set_max_frame_size) -		return 1632; -	return 1522; +		return 1632 - VLAN_ETH_HLEN - EDSA_HLEN - ETH_FCS_LEN; +	return 1522 - VLAN_ETH_HLEN - EDSA_HLEN - ETH_FCS_LEN;  }  static int mv88e6xxx_change_mtu(struct dsa_switch *ds, int port, int new_mtu) @@ -2955,6 +2955,9 @@ static int mv88e6xxx_change_mtu(struct dsa_switch *ds, int port, int new_mtu)  	struct mv88e6xxx_chip *chip = ds->priv;  	int ret = 0; +	if (dsa_is_dsa_port(ds, port) || dsa_is_cpu_port(ds, port)) +		new_mtu += EDSA_HLEN; +  	mv88e6xxx_reg_lock(chip);  	if (chip->info->ops->port_set_jumbo_size)  		ret = chip->info->ops->port_set_jumbo_size(chip, port, new_mtu); @@ -3725,7 +3728,6 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {  	.port_set_ucast_flood = mv88e6352_port_set_ucast_flood,  	.port_set_mcast_flood = mv88e6352_port_set_mcast_flood,  	.port_set_ether_type = mv88e6351_port_set_ether_type, -	.port_set_jumbo_size = mv88e6165_port_set_jumbo_size,  	.port_egress_rate_limiting = mv88e6097_port_egress_rate_limiting,  	.port_pause_limit = mv88e6097_port_pause_limit,  	.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit, @@ -3750,6 +3752,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {  	.avb_ops = &mv88e6165_avb_ops,  	.ptp_ops = &mv88e6165_ptp_ops,  	.phylink_validate = mv88e6185_phylink_validate, +	.set_max_frame_size = mv88e6185_g1_set_max_frame_size,  };  static const struct mv88e6xxx_ops mv88e6165_ops = { diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h index 675b1f3e43b7..59f316cc8583 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.h +++ b/drivers/net/dsa/mv88e6xxx/chip.h @@ -18,6 +18,7 @@  #include <linux/timecounter.h>  #include <net/dsa.h> +#define EDSA_HLEN		8  #define MV88E6XXX_N_FID		4096  /* PVT limits for 4-bit port and 5-bit switch */ diff --git a/drivers/net/dsa/mv88e6xxx/global1.c b/drivers/net/dsa/mv88e6xxx/global1.c index 815b0f681d69..5848112036b0 100644 --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c @@ -232,6 +232,8 @@ int mv88e6185_g1_set_max_frame_size(struct mv88e6xxx_chip *chip, int mtu)  	u16 val;  	int err; +	mtu += ETH_HLEN + ETH_FCS_LEN; +  	err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &val);  	if (err)  		return err; diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c index f77e2ee64a60..451028c57af8 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c @@ -1277,6 +1277,8 @@ int mv88e6165_port_set_jumbo_size(struct mv88e6xxx_chip *chip, int port,  	u16 reg;  	int err; +	size += VLAN_ETH_HLEN + ETH_FCS_LEN; +  	err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_CTL2, ®);  	if (err)  		return err; | 
