From: Alexey Brodkin <Alexey.Brodkin@synopsys.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] net: phy: ensure Gigabit features are masked off if requested
Date: Mon, 11 Jan 2016 10:26:56 +0000 [thread overview]
Message-ID: <1452508016.3277.13.camel@synopsys.com> (raw)
In-Reply-To: <1450888054-20082-1-git-send-email-abrodkin@synopsys.com>
Hi Joe,
On Wed, 2015-12-23 at 19:27 +0300, Alexey Brodkin wrote:
> From: Florian Fainelli <f.fainelli@gmail.com>
>
> When a Gigabit PHY device is connected to a 10/100Mbits capable Ethernet
> MAC, the driver will restrict the phydev->supported modes to mask off
> Gigabit. If the Gigabit PHY comes out of reset with the Gigabit features
> set by default in MII_CTRL1000, it will keep advertising these feature,
> so by the time we call genphy_config_advert(), the condition on
> phydev->supported having the Gigabit features on is false, and we do not
> update MII_CTRL1000 with updated values, and we keep advertising Gigabit
> features, eventually configuring the PHY for Gigabit whilst the Ethernet
> MAC does not support that.
>
> This patches fixes the problem by ensuring that the Gigabit feature bits
> are always cleared in MII_CTRL1000, if the PHY happens to be a Gigabit
> PHY, and then, if Gigabit features are supported, setting those and
> updating MII_CTRL1000 accordingly.
>
> This is a copy of patch from Linux kernel, see
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5273e3a5ca94fbeb8e07d31203069220d5e682aa
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Cc: Joe Hershberger <joe.hershberger@ni.com>
> ---
> drivers/net/phy/phy.c | 43 ++++++++++++++++++++++++++-----------------
> 1 file changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 51b5746..084276f 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -38,11 +38,10 @@ DECLARE_GLOBAL_DATA_PTR;
> static int genphy_config_advert(struct phy_device *phydev)
> {
> u32 advertise;
> - int oldadv, adv;
> + int oldadv, adv, bmsr;
> int err, changed = 0;
>
> - /* Only allow advertising what
> - * this PHY supports */
> + /* Only allow advertising what this PHY supports */
> phydev->advertising &= phydev->supported;
> advertise = phydev->advertising;
>
> @@ -79,29 +78,39 @@ static int genphy_config_advert(struct phy_device *phydev)
> changed = 1;
> }
>
> + bmsr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
> + if (bmsr < 0)
> + return bmsr;
> +
> + /* Per 802.3-2008, Section 22.2.4.2.16 Extended status all
> + * 1000Mbits/sec capable PHYs shall have the BMSR_ESTATEN bit set to a
> + * logical 1.
> + */
> + if (!(bmsr & BMSR_ESTATEN))
> + return changed;
> +
> /* Configure gigabit if it's supported */
> - if (phydev->supported & (SUPPORTED_1000baseT_Half |
> - SUPPORTED_1000baseT_Full)) {
> - oldadv = adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
> + oldadv = adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
> +
> + if (adv < 0)
> + return adv;
>
> - if (adv < 0)
> - return adv;
> + adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
>
> - adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
> + if (phydev->supported & (SUPPORTED_1000baseT_Half |
> + SUPPORTED_1000baseT_Full)) {
> if (advertise & SUPPORTED_1000baseT_Half)
> adv |= ADVERTISE_1000HALF;
> if (advertise & SUPPORTED_1000baseT_Full)
> adv |= ADVERTISE_1000FULL;
> + }
>
> - if (adv != oldadv) {
> - err = phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000,
> - adv);
> + if (adv != oldadv)
> + changed = 1;
>
> - if (err < 0)
> - return err;
> - changed = 1;
> - }
> - }
> + err = phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, adv);
> + if (err < 0)
> + return err;
>
> return changed;
> }
Any chance for this one to be applied?
-Alexey
prev parent reply other threads:[~2016-01-11 10:26 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-23 16:27 [U-Boot] [PATCH] net: phy: ensure Gigabit features are masked off if requested Alexey Brodkin
2016-01-11 10:26 ` Alexey Brodkin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1452508016.3277.13.camel@synopsys.com \
--to=alexey.brodkin@synopsys.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.