summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 06:20:41 +0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 06:20:41 +0400
commite914e3f48d0f3978d1561ae3668908e4c0262acf (patch)
tree6f5af7a5edaf28e8a4f99bbd353a2c9d51bf3534 /arch/arm/mach-imx
parent1d494f36d1fde04188341bf3d3b1a14cdf6fb2c9 (diff)
parent5efa906486b14c607dd981504fd21b05b867ea1f (diff)
downloadlinux-e914e3f48d0f3978d1561ae3668908e4c0262acf.tar.xz
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull more ARM updates from Russell King: "Some further changes for this merge window: - fix bug building with gcc 4.6.4 and EABI. - fix pgtbl macro with some LPAE configurations - fix initrd override - FDT was overriding the command line, and it should be the other way around. - fix byteswap of instructions in undefined instruction handler - add basic support for SolidRun Hummingboard and Cubox-i boards" * 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: ARM: fix building with gcc 4.6.4 ARM: 7941/2: Fix incorrect FDT initrd parameter override ARM: 7947/1: Make pgtbl macro more robust ARM: 7946/1: asm: __und_usr_thumb need byteswap instructions in BE case ARM: 7930/1: Introduce atomic MMIO modify ARM: imx: initial SolidRun Cubox-i support ARM: imx: initial SolidRun HummingBoard support
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/mach-imx6q.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index d2ea6e60ea7b..76e5db4fce35 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -133,6 +133,39 @@ static int ar8031_phy_fixup(struct phy_device *dev)
#define PHY_ID_AR8031 0x004dd074
+static int ar8035_phy_fixup(struct phy_device *dev)
+{
+ u16 val;
+
+ /* Ar803x phy SmartEEE feature cause link status generates glitch,
+ * which cause ethernet link down/up issue, so disable SmartEEE
+ */
+ phy_write(dev, 0xd, 0x3);
+ phy_write(dev, 0xe, 0x805d);
+ phy_write(dev, 0xd, 0x4003);
+
+ val = phy_read(dev, 0xe);
+ phy_write(dev, 0xe, val & ~(1 << 8));
+
+ /*
+ * Enable 125MHz clock from CLK_25M on the AR8031. This
+ * is fed in to the IMX6 on the ENET_REF_CLK (V22) pad.
+ * Also, introduce a tx clock delay.
+ *
+ * This is the same as is the AR8031 fixup.
+ */
+ ar8031_phy_fixup(dev);
+
+ /*check phy power*/
+ val = phy_read(dev, 0x0);
+ if (val & BMCR_PDOWN)
+ phy_write(dev, 0x0, val & ~BMCR_PDOWN);
+
+ return 0;
+}
+
+#define PHY_ID_AR8035 0x004dd072
+
static void __init imx6q_enet_phy_init(void)
{
if (IS_BUILTIN(CONFIG_PHYLIB)) {
@@ -142,6 +175,8 @@ static void __init imx6q_enet_phy_init(void)
ksz9031rn_phy_fixup);
phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff,
ar8031_phy_fixup);
+ phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef,
+ ar8035_phy_fixup);
}
}