The NXP i.MX8M Nano CPU has one 10/100/1000 Ethernet MAC.

On the ConnectCore 8M Nano Development Kit:

  • Ethernet port is connected to a 10/100/1000 Atheros AR8031 PHY.

Kernel configuration

You can manage the Ethernet driver and PHY Device support through the following kernel configuration options:

  • FEC Ethernet controller (of ColdFire and some i.MX CPUs) (CONFIG_FEC)

  • PHY device support for AT803x (CONFIG_AT803X_PHY)

These options are enabled as built-in on the default ConnectCore 8M Nano kernel configuration file.

Kernel driver

The driver for the Ethernet interface is located at:

File Description

drivers/net/ethernet/freescale/fec_main.c

i.MX FEC driver

drivers/net/phy/at803x.c

Driver for Atheros 8031 PHY

Device tree bindings and customization

The i.MX8M Nano Ethernet interface device tree binding is documented at Documentation/devicetree/bindings/net/fsl-fec.txt. The Ethernet interface is defined in the i.MX8M Nano CPU and ConnectCore 8M Nano Development Kit device tree files.

Example: FEC1 on ConnectCore 8M Nano Development Kit

Definition of the FEC

i.MX8M Nano device tree
fec1: ethernet@30be0000 {
	compatible = "fsl,imx8mm-fec", "fsl,imx8mq-fec", "fsl,imx6sx-fec";
	reg = <0x0 0x30be0000 0x0 0x10000>;
	interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&clk IMX8MN_CLK_ENET1_ROOT>,
			 <&clk IMX8MN_CLK_ENET1_ROOT>,
			 <&clk IMX8MN_CLK_ENET_TIMER>,
			 <&clk IMX8MN_CLK_ENET_REF>,
			 <&clk IMX8MN_CLK_ENET_PHY_REF>;
	clock-names = "ipg", "ahb", "ptp",
			"enet_clk_ref", "enet_out";
	assigned-clocks = <&clk IMX8MN_CLK_ENET_AXI>,
				  <&clk IMX8MN_CLK_ENET_TIMER>,
				  <&clk IMX8MN_CLK_ENET_REF>,
				  <&clk IMX8MN_CLK_ENET_TIMER>;
	assigned-clock-parents = <&clk IMX8MN_SYS_PLL1_266M>,
					 <&clk IMX8MN_SYS_PLL2_100M>,
					 <&clk IMX8MN_SYS_PLL2_125M>;
	assigned-clock-rates = <0>, <0>, <125000000>, <100000000>;
	stop-mode = <&gpr 0x10 3>;
	fsl,num-tx-queues=<3>;
	fsl,num-rx-queues=<3>;
	fsl,wakeup_irq = <2>;
	status = "disabled";
};

IOMUX configuration

ConnectCore 8M Nano Development Kit device tree
pinctrl_fec1_gpio: fec1gpiogrp {
	fsl,pins = <
		/* PHY reset */
		MX8MN_IOMUXC_SPDIF_TX_GPIO5_IO3		0x19
		/* PHY interrupt */
		MX8MN_IOMUXC_SAI3_MCLK_GPIO5_IO2	0x19
	>;
};

pinctrl_fec1: fec1grp {
	fsl,pins = <
		MX8MN_IOMUXC_ENET_MDC_ENET1_MDC		0x3
		MX8MN_IOMUXC_ENET_MDIO_ENET1_MDIO	0x3
		MX8MN_IOMUXC_ENET_TD3_ENET1_RGMII_TD3	0x1f
		MX8MN_IOMUXC_ENET_TD2_ENET1_RGMII_TD2	0x1f
		MX8MN_IOMUXC_ENET_TD1_ENET1_RGMII_TD1	0x1f
		MX8MN_IOMUXC_ENET_TD0_ENET1_RGMII_TD0	0x1f
		MX8MN_IOMUXC_ENET_RD3_ENET1_RGMII_RD3	0x91
		MX8MN_IOMUXC_ENET_RD2_ENET1_RGMII_RD2	0x91
		MX8MN_IOMUXC_ENET_RD1_ENET1_RGMII_RD1	0x91
		MX8MN_IOMUXC_ENET_RD0_ENET1_RGMII_RD0	0x91
		MX8MN_IOMUXC_ENET_TXC_ENET1_RGMII_TXC	0x1f
		MX8MN_IOMUXC_ENET_RXC_ENET1_RGMII_RXC	0x91
		MX8MN_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL	0x91
		MX8MN_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL	0x1f
	>;
};

Ethernet enabling and PHY parameters

ConnectCore 8M Nano Development Kit device tree
&fec1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_fec1_gpio>,
		    <&pinctrl_fec1>;
	phy-mode = "rgmii-id";
	phy-handle = <&ethphy0>;
	digi,mdio-lt-supply = <&reg_1v8_ext>;
	phy-supply = <&reg_3v3_eth0>;
	phy-reset-gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
	phy-reset-duration = <1>;
	digi,phy-reset-in-suspend;
	fsl,magic-packet;
	status = "okay";

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

		ethphy0: ethernet-phy@0 {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <0>;
			at803x,eee-disabled;
			at803x,vddio-1p8v;
		};
	};
};

MAC address

The MAC address of the i.MX8M Nano Ethernet interface is programmed in the U-Boot environment (variable ethaddr) on the ConnectCore 8M Nano eMMC. The MAC address is also printed on the module label. U-Boot writes the MAC address in the ethaddr environment variable into its respective device tree fec node under the local-mac-address property. For more information, see [{XREF_yocto_r_uboot-environment-variables}].

Ethernet user space usage

In the Linux system, the Ethernet interface is known as eth0. The Ethernet (FEC) driver exposes device data through the sysfs at /sys/class/net/eth0. You can use NetworkManager to configure Ethernet settings such as IP and netmask.