[PATCH] net: phy: Remove inline definitions from convinience functions

Michael Nazzareno Trimarchi michael at amarulasolutions.com
Sun Jun 5 08:59:39 CEST 2022


Hi Ramon

Il dom 5 giu 2022, 02:44 Ramon Fried <rfried.dev at 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 <michael at amarulasolutions.com>

Michael

>
> Signed-off-by: Ramon Fried <rfried.dev at 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
>
>


More information about the U-Boot mailing list