summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-11-07 14:26:47 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2016-11-08 12:54:21 +0100
commit9549b10a7ec8a20ccc0177d7b5c5f03c902793c5 (patch)
treef0f7dedddb7d5783bc3b349b2ae2ea652d8faaa9 /drivers/net
parent7649dc9ec971d0988c9bf1e9d9c004fa284d81b5 (diff)
downloadbarebox-9549b10a7ec8a20ccc0177d7b5c5f03c902793c5.tar.gz
barebox-9549b10a7ec8a20ccc0177d7b5c5f03c902793c5.tar.xz
net: phy: micrel: Do not overwrite reserved bits
ksz8021_config_init() unconditionally sets the KSZPHY_OMSO_RMII_OVERRIDE bit. This is since the initial micrel phy commit, so it's not reproducible where this comes from and why this is done. Neither U-Boot nor the kernel ever touch this bit and so should we. Also, instead of doing a write only operation, read/modify/write the bit we actually want to change. This fixes operation on a KSZ8081MLX which is a MII only phy. KSZPHY_OMSO_RMII_OVERRIDE is reserved here and must be written to 0. KSZPHY_OMSO_MII_OVERRIDE is default 1 and must be written as 1. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/phy/micrel.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 9a30cb7e90..0ca359b0ba 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -72,8 +72,12 @@ static int kszphy_config_init(struct phy_device *phydev)
static int ksz8021_config_init(struct phy_device *phydev)
{
- const u16 val = KSZPHY_OMSO_B_CAST_OFF | KSZPHY_OMSO_RMII_OVERRIDE;
+ u16 val;
+
+ val = phy_read(phydev, MII_KSZPHY_OMSO);
+ val |= KSZPHY_OMSO_B_CAST_OFF;
phy_write(phydev, MII_KSZPHY_OMSO, val);
+
return 0;
}