Message ID | E1r6VHk-00DDLN-I7@rmk-PC.armlinux.org.uk (mailing list archive) |
---|---|
State | Accepted |
Commit | 243ad8df7a1bd24c2e01bd99d9f0bb88844dae91 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: phylink: improve PHY validation | expand |
On Fri, Nov 24, 2023 at 12:27:52PM +0000, Russell King (Oracle) wrote: > Add a possible_interfaces member to struct phy_device to indicate which > interfaces a clause 45 PHY may switch between depending on the media. > This must be populated by the PHY driver by the time the .config_init() > method completes according to the PHYs host-side configuration. > > For example, the Marvell 88x3310 PHY can switch between 10GBASE-R, > 5GBASE-R, 2500BASE-X, and SGMII on the host side depending on the media > side speed, so all these interface modes are set in the > possible_interfaces member. > > This allows phylib users (such as phylink) to know in advance which > interface modes to expect, which allows them to appropriately restrict > the advertised link modes according to the capabilities of other parts > of the link. > > Tested-by: Luo Jie <quic_luoj@quicinc.com> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 478126f6b5bc..400fb09d9cd6 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1246,6 +1246,8 @@ int phy_init_hw(struct phy_device *phydev) if (ret < 0) return ret; + phy_interface_zero(phydev->possible_interfaces); + if (phydev->drv->config_init) { ret = phydev->drv->config_init(phydev); if (ret < 0) diff --git a/include/linux/phy.h b/include/linux/phy.h index e5f1f41e399c..6e7ebcc50b85 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -605,6 +605,8 @@ struct macsec_ops; * @irq_rerun: Flag indicating interrupts occurred while PHY was suspended, * requiring a rerun of the interrupt handler after resume * @interface: enum phy_interface_t value + * @possible_interfaces: bitmap if interface modes that the attached PHY + * will switch between depending on media speed. * @skb: Netlink message for cable diagnostics * @nest: Netlink nest used for cable diagnostics * @ehdr: nNtlink header for cable diagnostics @@ -674,6 +676,7 @@ struct phy_device { u32 dev_flags; phy_interface_t interface; + DECLARE_PHY_INTERFACE_MASK(possible_interfaces); /* * forced speed & duplex (no autoneg)