]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: phylink: simplify phylink_parse_fixedlink()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 22 Oct 2024 14:17:07 +0000 (15:17 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 29 Oct 2024 18:56:23 +0000 (11:56 -0700)
phylink_parse_fixedlink() wants to preserve the pause, asym_pause and
autoneg bits in pl->supported. Rather than reading the bits into
separate bools, zeroing pl->supported, and then setting them if they
were previously set, use a mask and linkmode_and() to achieve the same
result.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/E1t3Fh5-000aQi-Nk@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phylink.c

index b5870f8666ace26f1a49bf69edf718bbb042355e..20c227e22993ad34d0f35f4ef3b696b9ec62a57a 100644 (file)
@@ -764,8 +764,8 @@ static int phylink_validate(struct phylink *pl, unsigned long *supported,
 static int phylink_parse_fixedlink(struct phylink *pl,
                                   const struct fwnode_handle *fwnode)
 {
+       __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
        struct fwnode_handle *fixed_node;
-       bool pause, asym_pause, autoneg;
        const struct phy_setting *s;
        struct gpio_desc *desc;
        u32 speed;
@@ -838,22 +838,15 @@ static int phylink_parse_fixedlink(struct phylink *pl,
        linkmode_copy(pl->link_config.advertising, pl->supported);
        phylink_validate(pl, pl->supported, &pl->link_config);
 
-       pause = phylink_test(pl->supported, Pause);
-       asym_pause = phylink_test(pl->supported, Asym_Pause);
-       autoneg = phylink_test(pl->supported, Autoneg);
        s = phy_lookup_setting(pl->link_config.speed, pl->link_config.duplex,
                               pl->supported, true);
-       linkmode_zero(pl->supported);
-       phylink_set(pl->supported, MII);
 
-       if (pause)
-               phylink_set(pl->supported, Pause);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mask);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, mask);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mask);
+       linkmode_and(pl->supported, pl->supported, mask);
 
-       if (asym_pause)
-               phylink_set(pl->supported, Asym_Pause);
-
-       if (autoneg)
-               phylink_set(pl->supported, Autoneg);
+       phylink_set(pl->supported, MII);
 
        if (s) {
                __set_bit(s->bit, pl->supported);