net: phylink: add phylink_expects_phy() method

[ Upstream commit 653a180957 ]

Provide phylink_expects_phy() to allow MAC drivers to check if it
is expecting a PHY to attach to. Since fixed-linked setups do not
need to attach to a PHY.

Provides a boolean value as to if the MAC should expect a PHY.
Returns true if a PHY is expected.

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: fe2cfbc968 ("net: stmmac: check if MAC needs to attach to a PHY")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Michael Sit Wei Hong 2023-03-30 17:14:02 +08:00 committed by Greg Kroah-Hartman
parent aa95efa187
commit 2b15feabc9
2 changed files with 20 additions and 0 deletions

View File

@ -1552,6 +1552,25 @@ void phylink_destroy(struct phylink *pl)
} }
EXPORT_SYMBOL_GPL(phylink_destroy); EXPORT_SYMBOL_GPL(phylink_destroy);
/**
* phylink_expects_phy() - Determine if phylink expects a phy to be attached
* @pl: a pointer to a &struct phylink returned from phylink_create()
*
* When using fixed-link mode, or in-band mode with 1000base-X or 2500base-X,
* no PHY is needed.
*
* Returns true if phylink will be expecting a PHY.
*/
bool phylink_expects_phy(struct phylink *pl)
{
if (pl->cfg_link_an_mode == MLO_AN_FIXED ||
(pl->cfg_link_an_mode == MLO_AN_INBAND &&
phy_interface_mode_is_8023z(pl->link_config.interface)))
return false;
return true;
}
EXPORT_SYMBOL_GPL(phylink_expects_phy);
static void phylink_phy_change(struct phy_device *phydev, bool up) static void phylink_phy_change(struct phy_device *phydev, bool up)
{ {
struct phylink *pl = phydev->phylink; struct phylink *pl = phydev->phylink;

View File

@ -566,6 +566,7 @@ struct phylink *phylink_create(struct phylink_config *, struct fwnode_handle *,
phy_interface_t iface, phy_interface_t iface,
const struct phylink_mac_ops *mac_ops); const struct phylink_mac_ops *mac_ops);
void phylink_destroy(struct phylink *); void phylink_destroy(struct phylink *);
bool phylink_expects_phy(struct phylink *pl);
int phylink_connect_phy(struct phylink *, struct phy_device *); int phylink_connect_phy(struct phylink *, struct phy_device *);
int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags); int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags);