We use i.mx6 - Solo. We changed interface from RGMII to RMII. We use Marvell 88E6020 , have 2 steps.
1. In U-Boot:
MX6_PAD_ENET_MDIO__ENET_MDIO|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_MDC__ENET_MDC|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_CRS_DV__ENET_RX_EN|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_RX_ER__ENET_RX_ER|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_TX_EN__ENET_TX_EN|MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_RXD0__ENET_RX_DATA0|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_RXD1__ENET_RX_DATA1|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_TXD0__ENET_TX_DATA0|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_ENET_TXD1__ENET_TX_DATA1|MUX_PAD_CTRL(ENET_PAD_CTRL) , MX6_PAD_GPIO_16__ENET_REF_CLK|MUX_PAD_CTRL(0x4001b0a8),
Working OK !!!!!!;
In kernel 4.1.15:
pinctrl_enet:
enetgrp { fsl,pins =
< MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN
0x1b0b0 MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER
0x1b0b0 MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN
0x1b0b0 MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0
0x1b0b0 MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1
0x1b0b0 MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0
0x1b0b0 MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1 0x1b0b0
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8 >;
};
pinctrl_enet_irq: enetirqgrp
{ fsl,pins = < MX6QDL_PAD_NANDF_ALE__GPIO6_IO08 0x000b1 >; }
Clock we get from MARVELL (50Mgz).
#define MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x214 0x5e4 0x80c 0x12 0x0
Clear Bit 21 -> IOMUXC_GPR1[21] , Clock from Marvell !!!
regmap_update_bits(gpr, IOMUXC_GPR1,IMX6Q_GPR1_ENET_CLK_SEL_MASK,0);
But , we get a message: fec 2188000.ethernet eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=2188000.ethernet:18, irq=-1) IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready done.
What a problem ?