mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-21 08:40:56 +07:00
net: phylink: add interface to configure clause 22 PCS PHY
Add an interface to configure the advertisement for a clause 22 PCS PHY, and set the AN enable flag in the BMCR appropriately. Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7137e18f6f
commit
93eaceb0fc
@ -2442,6 +2442,43 @@ int phylink_mii_c22_pcs_set_advertisement(struct mdio_device *pcs,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_mii_c22_pcs_set_advertisement);
|
||||
|
||||
/**
|
||||
* phylink_mii_c22_pcs_config() - configure clause 22 PCS
|
||||
* @pcs: a pointer to a &struct mdio_device.
|
||||
* @mode: link autonegotiation mode
|
||||
* @interface: the PHY interface mode being configured
|
||||
* @advertising: the ethtool advertisement mask
|
||||
*
|
||||
* Configure a Clause 22 PCS PHY with the appropriate negotiation
|
||||
* parameters for the @mode, @interface and @advertising parameters.
|
||||
* Returns negative error number on failure, zero if the advertisement
|
||||
* has not changed, or positive if there is a change.
|
||||
*/
|
||||
int phylink_mii_c22_pcs_config(struct mdio_device *pcs, unsigned int mode,
|
||||
phy_interface_t interface,
|
||||
const unsigned long *advertising)
|
||||
{
|
||||
bool changed;
|
||||
u16 bmcr;
|
||||
int ret;
|
||||
|
||||
ret = phylink_mii_c22_pcs_set_advertisement(pcs, interface,
|
||||
advertising);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
changed = ret > 0;
|
||||
|
||||
bmcr = mode == MLO_AN_INBAND ? BMCR_ANENABLE : 0;
|
||||
ret = mdiobus_modify(pcs->bus, pcs->addr, MII_BMCR,
|
||||
BMCR_ANENABLE, bmcr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return changed ? 1 : 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_mii_c22_pcs_config);
|
||||
|
||||
/**
|
||||
* phylink_mii_c22_pcs_an_restart() - restart 802.3z autonegotiation
|
||||
* @pcs: a pointer to a &struct mdio_device.
|
||||
|
@ -478,6 +478,9 @@ void phylink_mii_c22_pcs_get_state(struct mdio_device *pcs,
|
||||
int phylink_mii_c22_pcs_set_advertisement(struct mdio_device *pcs,
|
||||
phy_interface_t interface,
|
||||
const unsigned long *advertising);
|
||||
int phylink_mii_c22_pcs_config(struct mdio_device *pcs, unsigned int mode,
|
||||
phy_interface_t interface,
|
||||
const unsigned long *advertising);
|
||||
void phylink_mii_c22_pcs_an_restart(struct mdio_device *pcs);
|
||||
|
||||
void phylink_mii_c45_pcs_get_state(struct mdio_device *pcs,
|
||||
|
Loading…
Reference in New Issue
Block a user