]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
net: phy: micrel: add an option to disable gigabit for the KSZ9031
authorSebastien Bourdelin <sebastien.bourdelin@savoirfairelinux.com>
Fri, 28 Jul 2017 19:59:22 +0000 (15:59 -0400)
committerJoe Hershberger <joe.hershberger@ni.com>
Mon, 7 Aug 2017 20:18:31 +0000 (15:18 -0500)
The environment variable "disable_giga" can now be used to disable
1000baseTx on the Micrel's KSZ9031.

Signed-off-by: Sebastien Bourdelin <sebastien.bourdelin@savoirfairelinux.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/phy/micrel_ksz90x1.c

index 785143d0896e1c36e41c68f507c88b5d0f1598df..20f8a551963cee8c4efc2c7c46fa97e244f6ec06 100644 (file)
@@ -335,12 +335,40 @@ static int ksz9031_phy_extwrite(struct phy_device *phydev, int addr,
 static int ksz9031_config(struct phy_device *phydev)
 {
        int ret;
+
        ret = ksz9031_of_config(phydev);
        if (ret)
                return ret;
        ret = ksz9031_center_flp_timing(phydev);
        if (ret)
                return ret;
+
+       /* add an option to disable the gigabit feature of this PHY */
+       if (getenv("disable_giga")) {
+               unsigned features;
+               unsigned bmcr;
+
+               /* disable speed 1000 in features supported by the PHY */
+               features = phydev->drv->features;
+               features &= ~(SUPPORTED_1000baseT_Half |
+                               SUPPORTED_1000baseT_Full);
+               phydev->advertising = phydev->supported = features;
+
+               /* disable speed 1000 in Basic Control Register */
+               bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
+               bmcr &= ~(1 << 6);
+               phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr);
+
+               /* disable speed 1000 in 1000Base-T Control Register */
+               phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, 0);
+
+               /* start autoneg */
+               genphy_config_aneg(phydev);
+               genphy_restart_aneg(phydev);
+
+               return 0;
+       }
+
        return genphy_config(phydev);
 }