Hello,
I'm using an imx6qp-based custom board and am having an issue getting the FEC ethernet interface working with RMII in Linux (4.14.62). Its connected to a LAN8720A phy which provides a 50MHz clock on the RGMII_TX_CTL input. It works fine in u-boot, and I'm able to tftp boot files across.
Packets seem to be getting transmitted okay, I can see ARP packets being sent in wireshark, but all received packets are being received with crc/framing errors:
root@imx6qp-ivu:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 6e:79:2e:34:eb:32
inet addr:10.1.3.4 Bcast:10.1.255.255 Mask:255.255.0.0
inet6 addr: fe80::6c79:2eff:fe34:eb32/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:246 dropped:0 overruns:0 frame:246
TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:4976 (4.8 KiB)
They phy is being detected okay, and I can read/write MDIO registers:
[ 66.775904] SMSC LAN8710/LAN8720 2188000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=2188000.ethernet-1:00, irq=POLL)
I'm using these dts settings:
pinctrl_enet: enetgrp {
fsl,pins = <
MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0 0x1b0b0
MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1 0x1b030
MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER 0x1b030
MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b030
MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0 0x1b030
MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1 0x1b030
MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN 0x1b0b0
MX6QDL_PAD_RGMII_TX_CTL__ENET_REF_CLK 0x10020
>;
};
pinctrl_enet_mdio: enet-mdiogrp {
fsl,pins = <
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b030
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b030
>;
};
&fec {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet &pinctrl_enet_mdio>;
phy-mode = "rmii";
fsl,magic-packet;
status = "okay";
clocks = <&clks IMX6QDL_CLK_ENET>, <&clks IMX6QDL_CLK_ENET>;
clock-names = "ipg", "ahb";
};
Any ideas what might be causing this?
Thanks,
Will.