Commit e0e91849 authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: phylink: simplify phylink_parse_fixedlink()



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: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/E1t3Fh5-000aQi-Nk@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6c9c5791
Loading
Loading
Loading
Loading
+6 −13
Original line number Diff line number Diff line
@@ -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);

	if (asym_pause)
		phylink_set(pl->supported, Asym_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 (autoneg)
		phylink_set(pl->supported, Autoneg);
	phylink_set(pl->supported, MII);

	if (s) {
		__set_bit(s->bit, pl->supported);