From e35d520e2d0681fbbd212f7ffe27f7065a19ddfb Mon Sep 17 00:00:00 2001 From: Alejandro Sierra Date: Mon, 26 Sep 2016 14:42:20 -0500 Subject: [PATCH] MLK-13281 ARM: imx: add micrel phy init for 6sxscm evb board Add Micrel phy initialization for imx6sxscm evb platform Signed-off-by: Alejandro Sierra --- arch/arm/mach-imx/mach-imx6sx.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c index faf37e06696a..ae1f6e97760a 100644 --- a/arch/arm/mach-imx/mach-imx6sx.c +++ b/arch/arm/mach-imx/mach-imx6sx.c @@ -14,9 +14,30 @@ #include #include #include +#include #include "common.h" #include "cpuidle.h" +static void mmd_write_reg(struct phy_device *dev, int device, int reg, int val) +{ + phy_write(dev, 0x0d, device); + phy_write(dev, 0x0e, reg); + phy_write(dev, 0x0d, (1 << 14) | device); + phy_write(dev, 0x0e, val); +} + +static int ksz9031rn_phy_fixup(struct phy_device *dev) +{ + /* + * min rx data delay, max rx/tx clock delay, + * min rx/tx control delay + */ + mmd_write_reg(dev, 2, 4, 0); + mmd_write_reg(dev, 2, 5, 0); + mmd_write_reg(dev, 2, 8, 0x003ff); + + return 0; +} static int ar8031_phy_fixup(struct phy_device *dev) { @@ -47,6 +68,8 @@ static int ar8031_phy_fixup(struct phy_device *dev) static void __init imx6sx_enet_phy_init(void) { if (IS_BUILTIN(CONFIG_PHYLIB)) + phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK, + ksz9031rn_phy_fixup); phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff, ar8031_phy_fixup); } -- 2.17.1