Verdin IMX8MP with LAN8720A on RMII interface

Hello,

Currently we are working with a custom carrier board using the Verdin IMX8M plus SoM. As we need a second Ethernet, there is a LAN8720A RMII PHY connected to the SoM using the signals described in the Verdin IMX8M-Plus datasheet in Table 5.9. But we have some trouble getting it to work.

The 50Mhz clock is created by the SoM using this change in U-boot in the file “board/toradex/verdin-imx8mp/verdin-imx8mp.c”

static int setup_fec(void)
{
	struct iomuxc_gpr_base_regs *gpr =
		(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;

	/* Enable RGMII TX clk output */
	setbits_le32(&gpr->gpr[1], BIT(13));

	return set_clk_enet(ENET_50MHZ);
}

The device tree for the RMII phy is the following:

/* Verdin ETH_2_RMII */
&fec {
	phy-handle = <&ethphy1>;

	assigned-clocks = <&clk IMX8MP_CLK_ENET_AXI>,
	  <&clk IMX8MP_CLK_ENET_TIMER>,
	  <&clk IMX8MP_CLK_ENET_REF>,
	  <&clk IMX8MP_CLK_ENET_PHY_REF>;
	assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>,
		 <&clk IMX8MP_SYS_PLL2_100M>,
		 <&clk IMX8MP_SYS_PLL2_50M>,
		 <&clk IMX8MP_SYS_PLL2_50M>;
	assigned-clock-rates = <0>, <100000000>, <50000000>,<5000000>;

	phy-mode = "rmii";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_fec>;
	phy-reset-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
	status = "okay";

	mdio {
		#address-cells = <1>;
		#size-cells = <0>;

		ethphy1: ethernet-phy@0 {
			compatible = "ethernet-phy-ieee802.3-c22";
			smsc;
		};
	};
};

The 50Mhz out works, and the SoM communicates via the MDIO interface with the PHY. It shows up as Eth0. When I connect a cable to a computer, the link detect works and the PHY communicates to the SoM that a cable is plugged in.
The problem currently is that the SoM does not communicate using the RD0/RD1/TD0/TD1
There is data from the PHY going to the SoM on the RD0/RD1 lines but the phy seems to ignore that and the TD0 and TD1 line remain a logic low.

It seems that there might be something not correct in the device tree as the SoM does not try to communicate with the PHY, I hope you can give us some pointers?

Rik

Hello rikte,

can you share your schematic on the second Ethernet PHY?
Are you using our ref. design for the 2nd Ethernet Phy?
If you don’t want to share it public you can send it to support@toradex.com and include a link to this community post.

Best Regards,

Matthias Gohlke

Hi Matthias,

I shared the schematic a few days ago per email, but I have not had a reply back.
Can you confirm you received my email?

Rik

Hello rikte,

I checked and yes we got your email.

Best Regards,

Matthias

Hi @rikte !

Sorry for the delay.

We checked your schematics and seems like there is nothing wrong from the hardware perspective.

Now, focusing on the software side, let’s talk about device tree.

From your first message, seems like you modified the fec node from the imx8mp-verdin.dtsi (imx8mp-verdin.dtsi « freescale « dts « boot « arm64 « arch - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules). Is that right?

We also have the same fec phandle on imx8mp.dtsi and on imx8mp-verdin-dev.dtsi. Did you modified those fec nodes on theses files?

Taking a look at smsc-lan87xx.txt « net « bindings « devicetree « Documentation - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules, there is no mention of the smsc property that you used.

You also need to set the reg value of the PHY, as you can see from the Device Tree Binding documentation for Ethernet PHY: ethernet-phy.yaml « net « bindings « devicetree « Documentation - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules. You might want to use the max-speed property as well. Please check the possible values for compatible to find one that fits your Ethernet PHY.

Let us know how it goes :slight_smile:

Best regards,

Hi @rikte !

Do you have any news related to this topic?

Best regards,

Hi @henrique.tx

I tried the suggestions but sadly got the same result.
For now we decided to place a 50Mhz oscillator on the next board design.

Best regards,

Rik