diff options
Diffstat (limited to 'drivers/net/dsa')
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1.c | 5 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1.h | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/port.c | 12 | 
3 files changed, 12 insertions, 6 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/global1.c b/drivers/net/dsa/mv88e6xxx/global1.c index 120a65d3e3ef..b016cc205f81 100644 --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c @@ -360,6 +360,11 @@ int mv88e6390_g1_set_cpu_port(struct mv88e6xxx_chip *chip, int port)  {  	u16 ptr = MV88E6390_G1_MONITOR_MGMT_CTL_PTR_CPU_DEST; +	/* Use the default high priority for management frames sent to +	 * the CPU. +	 */ +	port |= MV88E6390_G1_MONITOR_MGMT_CTL_PTR_CPU_DEST_MGMTPRI; +  	return mv88e6390_g1_monitor_write(chip, ptr, port);  } diff --git a/drivers/net/dsa/mv88e6xxx/global1.h b/drivers/net/dsa/mv88e6xxx/global1.h index bc5a6b2bb1e4..5324c6f4ae90 100644 --- a/drivers/net/dsa/mv88e6xxx/global1.h +++ b/drivers/net/dsa/mv88e6xxx/global1.h @@ -211,6 +211,7 @@  #define MV88E6390_G1_MONITOR_MGMT_CTL_PTR_INGRESS_DEST		0x2000  #define MV88E6390_G1_MONITOR_MGMT_CTL_PTR_EGRESS_DEST		0x2100  #define MV88E6390_G1_MONITOR_MGMT_CTL_PTR_CPU_DEST		0x3000 +#define MV88E6390_G1_MONITOR_MGMT_CTL_PTR_CPU_DEST_MGMTPRI	0x00e0  #define MV88E6390_G1_MONITOR_MGMT_CTL_DATA_MASK			0x00ff  /* Offset 0x1C: Global Control 2 */ diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c index 7fe256c5739d..0b43c650e100 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c @@ -393,7 +393,7 @@ phy_interface_t mv88e6390x_port_max_speed_mode(int port)  }  static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip *chip, int port, -				    phy_interface_t mode) +				    phy_interface_t mode, bool force)  {  	u8 lane;  	u16 cmode; @@ -427,8 +427,8 @@ static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip *chip, int port,  		cmode = 0;  	} -	/* cmode doesn't change, nothing to do for us */ -	if (cmode == chip->ports[port].cmode) +	/* cmode doesn't change, nothing to do for us unless forced */ +	if (cmode == chip->ports[port].cmode && !force)  		return 0;  	lane = mv88e6xxx_serdes_get_lane(chip, port); @@ -484,7 +484,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,  	if (port != 9 && port != 10)  		return -EOPNOTSUPP; -	return mv88e6xxx_port_set_cmode(chip, port, mode); +	return mv88e6xxx_port_set_cmode(chip, port, mode, false);  }  int mv88e6390_port_set_cmode(struct mv88e6xxx_chip *chip, int port, @@ -504,7 +504,7 @@ int mv88e6390_port_set_cmode(struct mv88e6xxx_chip *chip, int port,  		break;  	} -	return mv88e6xxx_port_set_cmode(chip, port, mode); +	return mv88e6xxx_port_set_cmode(chip, port, mode, false);  }  static int mv88e6341_port_set_cmode_writable(struct mv88e6xxx_chip *chip, @@ -555,7 +555,7 @@ int mv88e6341_port_set_cmode(struct mv88e6xxx_chip *chip, int port,  	if (err)  		return err; -	return mv88e6xxx_port_set_cmode(chip, port, mode); +	return mv88e6xxx_port_set_cmode(chip, port, mode, true);  }  int mv88e6185_port_get_cmode(struct mv88e6xxx_chip *chip, int port, u8 *cmode)  | 
