[U-Boot] [RFC PATCH] net: phy: Force master mode for RTL8211C
Michael Haas
haas at computerlinguist.org
Tue Mar 22 08:51:19 CET 2016
The RTL8211C found on the A20-OlinuXino-Lime2 does not word in slave
mode. This patch disables master/slave mode autonegotiation and forces
master mode.
The RTL8211C identifies itself as RTL8211B via its UID. This patch uses
the revision number taken from the PHYID2 register to distinguish the
two. The NetBSD driver uses the same approach.
CC: fradav at gmail.com
CC: merker at debian.org
CC: hdegoede at redhat.com
CC: ijc at hellion.org.uk
CC: joe.hershberger at ni.com
Signed-off-by: Michael Haas <haas at computerlinguist.org>
---
drivers/net/phy/realtek.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index 259a87f..97d5712 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -54,6 +54,19 @@ static int rtl8211x_config(struct phy_device *phydev)
phy_write(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211x_PHY_INER,
MIIM_RTL8211x_PHY_INTR_DIS);
+ int reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYSID1);
+ int rev = reg & 0xf;
+ if (rev == 3 && phydev->phy_id == 0x1cc912) {
+ /* RTL8211C and RTL8211C are distinguished only by
+ their revision number */
+ reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
+ /* force manual master/slave configuration */
+ reg |= (1 << 12);
+ /* force master mode */
+ reg | = (1 << 11);
+ phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, reg);
+ }
+
/* read interrupt status just to clear it */
phy_read(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211x_PHY_INER);
--
2.7.2
More information about the U-Boot
mailing list