Hi Ramon Il dom 5 giu 2022, 02:44 Ramon Fried <rfried....@gmail.com> ha scritto:
> The convinience functions are not that small and they caused > bloated text segments because of their usage. > There was no need to inline them in the first place, as > they're not part of a fastpath. > Please give numbers here in commit message ;) Otherwise Reviewed-by: Michael Trimarchi <mich...@amarulasolutions.com> Michael > > Signed-off-by: Ramon Fried <rfried....@gmail.com> > --- > drivers/net/phy/phy.c | 174 ++++++++++++++++++++++++++++++++++++++ > include/phy.h | 189 ++---------------------------------------- > 2 files changed, 183 insertions(+), 180 deletions(-) > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c > index 1121b99abf..e6e1755518 100644 > --- a/drivers/net/phy/phy.c > +++ b/drivers/net/phy/phy.c > @@ -1101,3 +1101,177 @@ int phy_modify(struct phy_device *phydev, int > devad, int regnum, u16 mask, > > return phy_write(phydev, devad, regnum, (ret & ~mask) | set); > } > + > +/** > + * phy_read - Convenience function for reading a given PHY register > + * @phydev: the phy_device struct > + * @devad: The MMD to read from > + * @regnum: register number to read > + * @return: value for success or negative errno for failure > + */ > +int phy_read(struct phy_device *phydev, int devad, int regnum) > +{ > + struct mii_dev *bus = phydev->bus; > + > + if (!bus || !bus->read) { > + debug("%s: No bus configured\n", __func__); > + return -1; > + } > + > + return bus->read(bus, phydev->addr, devad, regnum); > +} > + > +/** > + * phy_write - Convenience function for writing a given PHY register > + * @phydev: the phy_device struct > + * @devad: The MMD to read from > + * @regnum: register number to write > + * @val: value to write to @regnum > + * @return: 0 for success or negative errno for failure > + */ > +int phy_write(struct phy_device *phydev, int devad, int regnum, u16 val) > +{ > + struct mii_dev *bus = phydev->bus; > + > + if (!bus || !bus->write) { > + debug("%s: No bus configured\n", __func__); > + return -1; > + } > + > + return bus->write(bus, phydev->addr, devad, regnum, val); > +} > + > +/** > + * phy_mmd_start_indirect - Convenience function for writing MMD registers > + * @phydev: the phy_device struct > + * @devad: The MMD to read from > + * @regnum: register number to write > + * @return: None > + */ > +void phy_mmd_start_indirect(struct phy_device *phydev, int devad, int > regnum) > +{ > + /* Write the desired MMD Devad */ > + phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_CTRL, devad); > + > + /* Write the desired MMD register address */ > + phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, regnum); > + > + /* Select the Function : DATA with no post increment */ > + phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_CTRL, > + (devad | MII_MMD_CTRL_NOINCR)); > +} > + > +/** > + * phy_read_mmd - Convenience function for reading a register > + * from an MMD on a given PHY. > + * @phydev: The phy_device struct > + * @devad: The MMD to read from > + * @regnum: The register on the MMD to read > + * @return: Value for success or negative errno for failure > + */ > +int phy_read_mmd(struct phy_device *phydev, int devad, int regnum) > +{ > + struct phy_driver *drv = phydev->drv; > + > + if (regnum > (u16)~0 || devad > 32) > + return -EINVAL; > + > + /* driver-specific access */ > + if (drv->read_mmd) > + return drv->read_mmd(phydev, devad, regnum); > + > + /* direct C45 / C22 access */ > + if ((drv->features & PHY_10G_FEATURES) == PHY_10G_FEATURES || > + devad == MDIO_DEVAD_NONE || !devad) > + return phy_read(phydev, devad, regnum); > + > + /* indirect C22 access */ > + phy_mmd_start_indirect(phydev, devad, regnum); > + > + /* Read the content of the MMD's selected register */ > + return phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA); > +} > + > +/** > + * phy_write_mmd - Convenience function for writing a register > + * on an MMD on a given PHY. > + * @phydev: The phy_device struct > + * @devad: The MMD to read from > + * @regnum: The register on the MMD to read > + * @val: value to write to @regnum > + * @return: 0 for success or negative errno for failure > + */ > +int phy_write_mmd(struct phy_device *phydev, int devad, int regnum, u16 > val) > +{ > + struct phy_driver *drv = phydev->drv; > + > + if (regnum > (u16)~0 || devad > 32) > + return -EINVAL; > + > + /* driver-specific access */ > + if (drv->write_mmd) > + return drv->write_mmd(phydev, devad, regnum, val); > + > + /* direct C45 / C22 access */ > + if ((drv->features & PHY_10G_FEATURES) == PHY_10G_FEATURES || > + devad == MDIO_DEVAD_NONE || !devad) > + return phy_write(phydev, devad, regnum, val); > + > + /* indirect C22 access */ > + phy_mmd_start_indirect(phydev, devad, regnum); > + > + /* Write the data into MMD's selected register */ > + return phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, val); > +} > + > +/** > + * phy_set_bits_mmd - Convenience function for setting bits in a register > + * on MMD > + * @phydev: the phy_device struct > + * @devad: the MMD containing register to modify > + * @regnum: register number to modify > + * @val: bits to set > + * @return: 0 for success or negative errno for failure > + */ > +int phy_set_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, > u16 val) > +{ > + int value, ret; > + > + value = phy_read_mmd(phydev, devad, regnum); > + if (value < 0) > + return value; > + > + value |= val; > + > + ret = phy_write_mmd(phydev, devad, regnum, value); > + if (ret < 0) > + return ret; > + > + return 0; > +} > + > +/** > + * phy_clear_bits_mmd - Convenience function for clearing bits in a > register > + * on MMD > + * @phydev: the phy_device struct > + * @devad: the MMD containing register to modify > + * @regnum: register number to modify > + * @val: bits to clear > + * @return: 0 for success or negative errno for failure > + */ > +int phy_clear_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, > u16 val) > +{ > + int value, ret; > + > + value = phy_read_mmd(phydev, devad, regnum); > + if (value < 0) > + return value; > + > + value &= ~val; > + > + ret = phy_write_mmd(phydev, devad, regnum, value); > + if (ret < 0) > + return ret; > + > + return 0; > +} > diff --git a/include/phy.h b/include/phy.h > index b329595710..ad2096ca84 100644 > --- a/include/phy.h > +++ b/include/phy.h > @@ -177,186 +177,6 @@ struct fixed_link { > int asym_pause; > }; > > -/** > - * phy_read - Convenience function for reading a given PHY register > - * @phydev: the phy_device struct > - * @devad: The MMD to read from > - * @regnum: register number to read > - * @return: value for success or negative errno for failure > - */ > -static inline int phy_read(struct phy_device *phydev, int devad, int > regnum) > -{ > - struct mii_dev *bus = phydev->bus; > - > - if (!bus || !bus->read) { > - debug("%s: No bus configured\n", __func__); > - return -1; > - } > - > - return bus->read(bus, phydev->addr, devad, regnum); > -} > - > -/** > - * phy_write - Convenience function for writing a given PHY register > - * @phydev: the phy_device struct > - * @devad: The MMD to read from > - * @regnum: register number to write > - * @val: value to write to @regnum > - * @return: 0 for success or negative errno for failure > - */ > -static inline int phy_write(struct phy_device *phydev, int devad, int > regnum, > - u16 val) > -{ > - struct mii_dev *bus = phydev->bus; > - > - if (!bus || !bus->write) { > - debug("%s: No bus configured\n", __func__); > - return -1; > - } > - > - return bus->write(bus, phydev->addr, devad, regnum, val); > -} > - > -/** > - * phy_mmd_start_indirect - Convenience function for writing MMD registers > - * @phydev: the phy_device struct > - * @devad: The MMD to read from > - * @regnum: register number to write > - * @return: None > - */ > -static inline void phy_mmd_start_indirect(struct phy_device *phydev, int > devad, > - int regnum) > -{ > - /* Write the desired MMD Devad */ > - phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_CTRL, devad); > - > - /* Write the desired MMD register address */ > - phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, regnum); > - > - /* Select the Function : DATA with no post increment */ > - phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_CTRL, > - (devad | MII_MMD_CTRL_NOINCR)); > -} > - > -/** > - * phy_read_mmd - Convenience function for reading a register > - * from an MMD on a given PHY. > - * @phydev: The phy_device struct > - * @devad: The MMD to read from > - * @regnum: The register on the MMD to read > - * @return: Value for success or negative errno for failure > - */ > -static inline int phy_read_mmd(struct phy_device *phydev, int devad, > - int regnum) > -{ > - struct phy_driver *drv = phydev->drv; > - > - if (regnum > (u16)~0 || devad > 32) > - return -EINVAL; > - > - /* driver-specific access */ > - if (drv->read_mmd) > - return drv->read_mmd(phydev, devad, regnum); > - > - /* direct C45 / C22 access */ > - if ((drv->features & PHY_10G_FEATURES) == PHY_10G_FEATURES || > - devad == MDIO_DEVAD_NONE || !devad) > - return phy_read(phydev, devad, regnum); > - > - /* indirect C22 access */ > - phy_mmd_start_indirect(phydev, devad, regnum); > - > - /* Read the content of the MMD's selected register */ > - return phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA); > -} > - > -/** > - * phy_write_mmd - Convenience function for writing a register > - * on an MMD on a given PHY. > - * @phydev: The phy_device struct > - * @devad: The MMD to read from > - * @regnum: The register on the MMD to read > - * @val: value to write to @regnum > - * @return: 0 for success or negative errno for failure > - */ > -static inline int phy_write_mmd(struct phy_device *phydev, int devad, > - int regnum, u16 val) > -{ > - struct phy_driver *drv = phydev->drv; > - > - if (regnum > (u16)~0 || devad > 32) > - return -EINVAL; > - > - /* driver-specific access */ > - if (drv->write_mmd) > - return drv->write_mmd(phydev, devad, regnum, val); > - > - /* direct C45 / C22 access */ > - if ((drv->features & PHY_10G_FEATURES) == PHY_10G_FEATURES || > - devad == MDIO_DEVAD_NONE || !devad) > - return phy_write(phydev, devad, regnum, val); > - > - /* indirect C22 access */ > - phy_mmd_start_indirect(phydev, devad, regnum); > - > - /* Write the data into MMD's selected register */ > - return phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, val); > -} > - > -/** > - * phy_set_bits_mmd - Convenience function for setting bits in a register > - * on MMD > - * @phydev: the phy_device struct > - * @devad: the MMD containing register to modify > - * @regnum: register number to modify > - * @val: bits to set > - * @return: 0 for success or negative errno for failure > - */ > -static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad, > - u32 regnum, u16 val) > -{ > - int value, ret; > - > - value = phy_read_mmd(phydev, devad, regnum); > - if (value < 0) > - return value; > - > - value |= val; > - > - ret = phy_write_mmd(phydev, devad, regnum, value); > - if (ret < 0) > - return ret; > - > - return 0; > -} > - > -/** > - * phy_clear_bits_mmd - Convenience function for clearing bits in a > register > - * on MMD > - * @phydev: the phy_device struct > - * @devad: the MMD containing register to modify > - * @regnum: register number to modify > - * @val: bits to clear > - * @return: 0 for success or negative errno for failure > - */ > -static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad, > - u32 regnum, u16 val) > -{ > - int value, ret; > - > - value = phy_read_mmd(phydev, devad, regnum); > - if (value < 0) > - return value; > - > - value &= ~val; > - > - ret = phy_write_mmd(phydev, devad, regnum, value); > - if (ret < 0) > - return ret; > - > - return 0; > -} > - > #ifdef CONFIG_PHYLIB_10G > extern struct phy_driver gen10g_driver; > #endif > @@ -508,6 +328,15 @@ static inline ofnode phy_get_ofnode(struct phy_device > *phydev) > return ofnode_null(); > } > #endif > + > +int phy_read(struct phy_device *phydev, int devad, int regnum); > +int phy_write(struct phy_device *phydev, int devad, int regnum, u16 val); > +void phy_mmd_start_indirect(struct phy_device *phydev, int devad, int > regnum); > +int phy_read_mmd(struct phy_device *phydev, int devad, int regnum); > +int phy_write_mmd(struct phy_device *phydev, int devad, int regnum, u16 > val); > +int phy_set_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, > u16 val); > +int phy_clear_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, > u16 val); > + > int phy_startup(struct phy_device *phydev); > int phy_config(struct phy_device *phydev); > int phy_shutdown(struct phy_device *phydev); > -- > 2.30.2 > >