]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: phylink: always do a major config when attaching a SFP PHY
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 17 Jan 2025 08:44:25 +0000 (08:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 Jan 2025 12:17:35 +0000 (12:17 +0000)
Background: https://lore.kernel.org/r/20250107123615.161095-1-ericwouds@gmail.com

Since adding negotiation of in-band capabilities, it is no longer
sufficient to just look at the MLO_AN_xxx mode and PHY interface to
decide whether to do a major configuration, since the result now
depends on the capabilities of the attaching PHY.

Always trigger a major configuration in this case.

Testing log: https://lore.kernel.org/r/f20c9744-3953-40e7-a9c9-5534b25d2e2a@gmail.com

Reported-by: Eric Woudstra <ericwouds@gmail.com>
Tested-by: Eric Woudstra <ericwouds@gmail.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phylink.c

index 66eea3f963d36aa4edf084a59f1b868fc155f062..d130634d3bc71a0d2355fd7e0889affe94e94ac1 100644 (file)
@@ -3541,12 +3541,11 @@ static phy_interface_t phylink_choose_sfp_interface(struct phylink *pl,
        return interface;
 }
 
-static void phylink_sfp_set_config(struct phylink *pl,
-                                  unsigned long *supported,
-                                  struct phylink_link_state *state)
+static void phylink_sfp_set_config(struct phylink *pl, unsigned long *supported,
+                                  struct phylink_link_state *state,
+                                  bool changed)
 {
        u8 mode = MLO_AN_INBAND;
-       bool changed = false;
 
        phylink_dbg(pl, "requesting link mode %s/%s with support %*pb\n",
                    phylink_an_mode_str(mode), phy_modes(state->interface),
@@ -3623,7 +3622,7 @@ static int phylink_sfp_config_phy(struct phylink *pl, struct phy_device *phy)
 
        pl->link_port = pl->sfp_port;
 
-       phylink_sfp_set_config(pl, support, &config);
+       phylink_sfp_set_config(pl, support, &config, true);
 
        return 0;
 }
@@ -3698,7 +3697,7 @@ static int phylink_sfp_config_optical(struct phylink *pl)
 
        pl->link_port = pl->sfp_port;
 
-       phylink_sfp_set_config(pl, pl->sfp_support, &config);
+       phylink_sfp_set_config(pl, pl->sfp_support, &config, false);
 
        return 0;
 }