From f131579d715283e6ff7ded77bcb4271e31803ad7 Mon Sep 17 00:00:00 2001 From: Philippe Schenker Date: Wed, 21 Nov 2018 15:30:58 +0100 Subject: 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 Acked-by: Marcel Ziswiler --- board/toradex/apalis_imx6/apalis_imx6.c | 2 ++ drivers/net/phy/micrel.c | 22 ++++++++++++++++++++-- include/micrel.h | 1 + 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 -- cgit v1.2.3