From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Brodkin Date: Mon, 11 Jan 2016 10:09:40 +0000 Subject: [U-Boot] [PATCH] drivers/net/phy: introduce phy_set_supported() In-Reply-To: <1450889139-21838-1-git-send-email-abrodkin@synopsys.com> References: <1450889139-21838-1-git-send-email-abrodkin@synopsys.com> Message-ID: <1452506979.3277.8.camel@synopsys.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > Cc: Joe Hershberger > --- > 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