[U-Boot] [PATCH] drivers/net/phy: introduce phy_set_supported()
Alexey Brodkin
Alexey.Brodkin at synopsys.com
Mon Jan 11 11:09:40 CET 2016
Hi Joe,
On Wed, 2015-12-23 at 19:45 +0300, Alexey Brodkin wrote:
> This new function will allow MAC drivers to override supported
> capabilities of the phy. It is required when MAC cannot handle all
> speeds supported by phy.
>
> For example phy supports up-to 1Gb connections while MAC may only work
> in modes up to 100 or even 10 Mbit/sec.
>
> Signed-off-by: Alexey Brodkin <abrodkin at synopsys.com>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> ---
> drivers/net/phy/phy.c | 24 ++++++++++++++++++++++++
> include/phy.h | 1 +
> 2 files changed, 25 insertions(+)
>
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index ec9be6b..4ad4e78 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -526,6 +526,30 @@ int phy_register(struct phy_driver *drv)
> return 0;
> }
>
> +int phy_set_supported(struct phy_device *phydev, u32 max_speed)
> +{
> + /* The default values for phydev->supported are provided by the PHY
> + * driver "features" member, we want to reset to sane defaults first
> + * before supporting higher speeds.
> + */
> + phydev->supported &= PHY_DEFAULT_FEATURES;
> +
> + switch (max_speed) {
> + default:
> + return -ENOTSUPP;
> + case SPEED_1000:
> + phydev->supported |= PHY_1000BT_FEATURES;
> + /* fall through */
> + case SPEED_100:
> + phydev->supported |= PHY_100BT_FEATURES;
> + /* fall through */
> + case SPEED_10:
> + phydev->supported |= PHY_10BT_FEATURES;
> + }
> +
> + return 0;
> +}
> +
> static int phy_probe(struct phy_device *phydev)
> {
> int err = 0;
> diff --git a/include/phy.h b/include/phy.h
> index b793e90..e030c9f 100644
> --- a/include/phy.h
> +++ b/include/phy.h
> @@ -234,6 +234,7 @@ int phy_startup(struct phy_device *phydev);
> int phy_config(struct phy_device *phydev);
> int phy_shutdown(struct phy_device *phydev);
> int phy_register(struct phy_driver *drv);
> +int phy_set_supported(struct phy_device *phydev, u32 max_speed);
> int genphy_config_aneg(struct phy_device *phydev);
> int genphy_restart_aneg(struct phy_device *phydev);
> int genphy_update_link(struct phy_device *phydev);
Any chance for this one to be applied?
-Alexey
More information about the U-Boot
mailing list