RGMII transmission failes on iMX6

I am currentry trying the to get ethernet working on a custom iMX6 board where an AR8035 phy is connected via RGMII. MDIO transfers are working properly and I am even able to receivieve ethernet packes (broad-, multicasts). But transmission packages are never sent - even on RGMII bus.

RXC shows a proper clock (which is driven by the phy of course) but unlike on the TXC signal there only is measureable a single low impuse.

IOs are configured correctly (IOMUX and possible daisy chains). Board is connected to a 100MBit network and link is getting detected correcty.

Any ideas what could cause this behaviour?

Is the ref clock (pad ENET_REF_CLK) still required in RGMII mode? This pin is not connected in the current design.

After some additional investigations it had turned out that we need to increase the IO-voltage for the RGMII interface in the atheros phy to get a stable gigabit connection between the MAC and the PHY.

I am facing almost the similar issue with KSZ9031. MDIO interface is working correctly as well as the RGMII receive but facing the same issue on the RGMII transmit. How did you managed to get the RGMII transmit working ?

Thanks a lot Martin for the quick reply, Ok so modifying the DDR_SEL_RGMII bits in register IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE_RGMII allow us to increase the driving strength. But I am still not able to transmit the data even on 10/100Mbps network. Experiencing the same issue of low impulse on TXC line. Any suggestions ?

In our case it was mainly an electrical problem. Whats your input voltage at NVCC_RGMII? Mayeb you should verify if this supply is stable enough. And as mentioned before we need to increase this voltage up to 2.5V for a stable GBit interface between MAC and PHY.

I think that in prior hw manuals NVCC_RGMII was specified with a maximum range up to 1.8V.

Well earlier the input voltage at NVCC_RGMII was 1.8 v, but I have tested by increasing it to 3.0 v as well. So what I am understanding here is that due to the low driving strength the i.mx6 is not able to generate the clock output to it RGMII_TXC pin..... correct ? Is there any other reason due to which I am not able to drive it .... Is there some acknowledgement of transmitted data on RGMII lines ?

Yes on KSZ9031 we tried to adjust the skew on Transmit clock(RGMII_TXC). The RGMII_TX_CLK is being sourced from ENET whereas the RGMII_RX_CLK is being sourced from PHY. As per the PLL_ENET settings we have ENET clock set up at 50 MHz.

Thanks for all the help. Actually we have reached to the final conclusion after some more discussion with Freescale that i.mx6 requires a Reference clock externally on ENET_REF_CLK pad and without that it could not work / generate the TX CLK. So we now going with board re-spin to connect the 125 MHz clock from PHY chip to ENET_REF_CLK pad on i.mx6.

Designers should be aware of the 125 MHz reference output level of the PHY because ENET_REF_CLK is on the NVCC_ENET supply rail, not the NVCC_RGMII rail. So if NVCC_ENET is powered at 3.3 V, the minimum VIH level is 70% of 3.3 V or 2.3 V. Designers should ensure that there is margin to this minimum value.

I am facing same clock issue with custom iMX6 board where an marvell switch is connected via RGMII.could you please suggest me, how can I configure to increase voltage from 1.8V to 2.5 V on RGMII line from SoC side?.

We are facing a similar issue on a custom board. We have an IMX6q with a KSZ9031RNX phy. We feed it a 25Mhz clock from a oscillator. Then from the phy we send the IMX6 a 125Mhz clock to ENET_REF_CLK pin. Using the same level shifter design as on the reference design. The NVCC_RGMII and NVCC_ENET port are both connected to 1.8V supply. I can see in the kernel that the phy is getting discovered, when i set its IP address. It also recognizes when i switch from 10 to a 100 network.

But when i ping i see activity TX activity on the board i am pinging but i don't receive a packet back.

Do we have to run the NVCC_RGMII port at 2.5V in order for gigabit Ethernet to work? Or do I have a driver issue. I modified the current micrel driver to recognize the ksz9021 as the ksz9031 since that are similar. Do you have any patches that will support a KSZ9031 phy?

We found the problem. It was not voltage related. The RGMII from IMX6 to does run at 1.8V for us. The problem was we had to set the skew registers in the KSZ9031RNX phy. Once we did that the Ethernet worked.

We added a delay as described in the hardware development guide so TX lines, RX Lines each match its grouping. Then we made sure the clock was proper delayed to these lines as well. Required us going to our router software and measuring the length of each line and adjusting the skew registers so they matched the hardware development guide.