summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Sierra <alejandro.sierra@nxp.com>2016-09-26 14:42:20 -0500
committerJuan Gutierrez <juan.gutierrez@nxp.com>2016-11-04 17:30:08 -0500
commitcca5655022a335d4ee26961e2e49589759215beb (patch)
treea791915349dd879fc193f5173661f0fed2c80b98
parentf5cc2b9bc749032bba0f4a3b6c2a669c8149bee4 (diff)
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 <alejandro.sierra@nxp.com>
-rw-r--r--arch/arm/mach-imx/mach-imx6sx.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c
index 36f27582c0bb..bda96392e38b 100644
--- a/arch/arm/mach-imx/mach-imx6sx.c
+++ b/arch/arm/mach-imx/mach-imx6sx.c
@@ -14,9 +14,30 @@
#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);
}