MLK-13281 ARM: imx: add micrel phy init for 6sxscm evb board
authorAlejandro Sierra <alejandro.sierra@nxp.com>
Mon, 26 Sep 2016 19:42:20 +0000 (14:42 -0500)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:52:32 +0000 (14:52 -0500)
Add Micrel phy initialization for imx6sxscm evb platform

Signed-off-by: Alejandro Sierra <alejandro.sierra@nxp.com>
arch/arm/mach-imx/mach-imx6sx.c

index faf37e0..ae1f6e9 100644 (file)
 #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
+#include <linux/micrel_phy.h>
 
 #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);
 }