> Subject: [PATCH RFC net-next 13/13] net: phylink: add interface to configure > clause 22 PCS PHY > > Signed-off-by: Russell King <rmk+ker...@armlinux.org.uk> > ---
Reviewed-by: Ioana Ciornei <ioana.cior...@nxp.com> > drivers/net/phy/phylink.c | 37 +++++++++++++++++++++++++++++++++++++ > include/linux/phylink.h | 3 +++ > 2 files changed, 40 insertions(+) > > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index > fbc8591b474b..d6c5e900a2f1 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -2435,6 +2435,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. > diff --git a/include/linux/phylink.h b/include/linux/phylink.h index > 057f78263a46..1aad2aea4610 100644 > --- a/include/linux/phylink.h > +++ b/include/linux/phylink.h > @@ -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, > -- > 2.20.1