The mv88e6xxx_port_setup_mac looks if one of the {link, speed, duplex} parameters is being changed from the current setting, and if not, does not do anything. This test is wrong in some situations: this method also has the mode argument, which can also be changed.
For example on Turris Omnia, the mode is PHY_INTERFACE_MODE_RGMII_ID, which has to be set byt the ->port_set_rgmii_delay method. The test does not look if mode is being changed (in fact there is currently no method to determine port mode as phy_interface_t type). The simplest solution seems to be to drop this test altogether and simply do the setup when requested. Signed-off-by: Marek Behún <marek.be...@nic.cz> Cc: Heiner Kallweit <hkallwe...@gmail.com> Cc: Sebastian Reichel <sebastian.reic...@collabora.co.uk> Cc: Vivien Didelot <vivien.dide...@gmail.com> Cc: Andrew Lunn <and...@lunn.ch> Cc: Florian Fainelli <f.faine...@gmail.com> Cc: David S. Miller <da...@davemloft.net> --- drivers/net/dsa/mv88e6xxx/chip.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 2e8b1ab2c6f7..aae63f6515b3 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -420,15 +420,6 @@ int mv88e6xxx_port_setup_mac(struct mv88e6xxx_chip *chip, int port, int link, if (err) return err; - /* Has anything actually changed? We don't expect the - * interface mode to change without one of the other - * parameters also changing - */ - if (state.link == link && - state.speed == speed && - state.duplex == duplex) - return 0; - /* Port's MAC control must not be changed unless the link is down */ err = chip->info->ops->port_set_link(chip, port, 0); if (err) -- 2.21.0