QNX on the iotgate (imx8mp)

Hi,

I’ve been trying to get QNX working properly on an iotgate board (that uses the imx8mp SoC), but have been running into issues getting the FEC NIC to work. The dwmac one works fine, but the FEC interface fails to get an IP address through DHCP and instead defaults to assigning an LLv4 ip address. The hardware should definitely works, as I’m using tftpboot from uboot (with that NIC) to load QNX and the dts into the board’s memory at boot-time.

I have used slog2info, which reports

ffec0: Unsupported Media 0

which to my understanding implies that the NIC is unable to communicate with the PHY.

The phy appears to be detected correctly, as I see the following in slog2info

Jan 01 00:00:19.825                 io_sock.114708          main_buffer     48  ukphy0: <Generic IEEE 802.3u media interface> PHY 0 on miibus0
Jan 01 00:00:19.825                 io_sock.114708          main_buffer     48  ukphy0:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 100baseT4, 1000baseSX, 1000baseSX-FDX, 1000baseT-FDX, 1000baseT-FDX-master, auto

The one thing that I see that could be affecting this is that the imx8mp_evk dts from nxp has the following node for the FEC device’s PHY

					fec-phy@0 {
						compatible = "ethernet-phy-ieee802.3-c22";
						reg = <0x00>;
						reset-gpios = <0x40 0x18 0x01>;
						reset-assert-us = <0x2710>;
						reset-deassert-us = <0x13880>;
						eee-broken-1000t;
						realtek,clkout-disable;
						phandle = <0x3f>;
					};

whereas the iotgate has

					ethernet-phy@1 {
						compatible = "ethernet-phy-ieee802.3-c22";
						reg = <0x01>;
						eee-broken-1000t;
						reset-gpios = <0x3e 0x02 0x01>;
						reset-assert-us = <0x2710>;
						reset-deassert-us = <0x13880>;
						realtek,clkout-disable;
						phandle = <0x50>;
					};

Notably, the reg field, which from my understanding indicates the MDIO bus address, is different between the two boards. I am passing the dtb of the iotgate board.

This is still confusing because the PHY node specified for the dwmac device is different in the same way, but appears to work fine.

I thought it might be a clock misconfiguration and because I don’t really need anything other than this NIC for the timebeing, I tried removing the call to imx_init_clocks in the main.c of the startup program to try and preserve the clock configuration from uboot, but this doesn’t seem to make a difference.

Does anyone have any ideas what could be going wrong?

Thanks.

It turned out to be an issue with imx_init_enet1_pads(). Commenting this out and preserving the UBoot configuration allows the device to be detected, but performance isn’t great (seems to max out at around 225 Mbps). Will try and correct the imx_init_enet1_pads code for my purposes and see if that makes a difference. Any other suggestions on how network performance could be improved would be appreciated.