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 <[email protected]> Cc: Heiner Kallweit <[email protected]> Cc: Sebastian Reichel <[email protected]> Cc: Vivien Didelot <[email protected]> Cc: Andrew Lunn <[email protected]> Cc: Florian Fainelli <[email protected]> Cc: David S. Miller <[email protected]> --- 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
