summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Schenker <philippe.schenker@toradex.com>2018-11-21 15:30:58 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-12-20 02:51:15 +0100
commitf131579d715283e6ff7ded77bcb4271e31803ad7 (patch)
treee75d8a6654b8a7bc9704c07ab4f4497475e697ac
parent7e4af65ed85d0e1cea4551d3f77fb473932a5566 (diff)
phy: ksz9031: Center FLP timing at 16ms
This patch centers the timing around 16ms instead of 8ms as it is in reset. Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--board/toradex/apalis_imx6/apalis_imx6.c2
-rw-r--r--drivers/net/phy/micrel.c22
-rw-r--r--include/micrel.h1
3 files changed, 23 insertions, 2 deletions
diff --git a/board/toradex/apalis_imx6/apalis_imx6.c b/board/toradex/apalis_imx6/apalis_imx6.c
index e42d9bd253..b2bb875789 100644
--- a/board/toradex/apalis_imx6/apalis_imx6.c
+++ b/board/toradex/apalis_imx6/apalis_imx6.c
@@ -480,6 +480,8 @@ int board_mmc_init(bd_t *bis)
int board_phy_config(struct phy_device *phydev)
{
+ ksz9031_center_flp_timing(phydev);
+
mx6_rgmii_rework(phydev);
if (phydev->drv->config)
phydev->drv->config(phydev);
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index 28a1401883..45db511764 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -436,9 +436,27 @@ static int ksz9031_of_config(struct phy_device *phydev)
{
return 0;
}
-static int ksz9031_center_flp_timing(struct phy_device *phydev)
+int ksz9031_center_flp_timing(struct phy_device *phydev)
{
- return 0;
+ struct phy_driver *drv = phydev->drv;
+ int ret = 0;
+
+ if (!drv || !drv->writeext)
+ return -EOPNOTSUPP;
+
+ ret = drv->writeext(phydev, 0, 0, MII_KSZ9031_FLP_BURST_TX_LO, 0x1A80);
+ if (ret) {
+ puts("Write failed");
+ return ret;
+ }
+
+ ret = drv->writeext(phydev, 0, 0, MII_KSZ9031_FLP_BURST_TX_HI, 0x6);
+ if (ret) {
+ puts("Write failed");
+ return ret;
+ }
+
+ return genphy_restart_aneg(phydev);
}
#endif
diff --git a/include/micrel.h b/include/micrel.h
index 3e6b5312d8..783dc634e2 100644
--- a/include/micrel.h
+++ b/include/micrel.h
@@ -35,5 +35,6 @@ int ksz9031_phy_extended_write(struct phy_device *phydev, int devaddr,
int regnum, u16 mode, u16 val);
int ksz9031_phy_extended_read(struct phy_device *phydev, int devaddr,
int regnum, u16 mode);
+int ksz9031_center_flp_timing(struct phy_device *phydev);
#endif