We designed a board using Digi's connect core 6UL (using the i.MX6UL).
We tried to follow the reference design (connect core 6UL starter kit) as much as possible but we replaced the Fast Ethernet PHY by a Micrel KSZ8895RQXI 5 ports switch. The connection used is RMII. With RXER tied low.
We modified the Linux device tree to use a fixed phy (fixed 100 Mbps full duplex, see attached file). We are not using MDIO or any other bus to configure the switch since default values are enough.
On the dev kit, we even cut the MDIO and MDC traces in order to confirm our modified kernel (and the Ethernet port) is working without MDIO.
However, on our board, we get a "no such device" error on boot and every time we issue a "ifconfig eth0 up" command.
I dug into the code a little and it seems the function fec_enet_mii_probe() is calling of_phy_connect() which returns NULL.
Problem has been reproduced using two BSPs:
Yocto 2.2 / Linux 4.1 and Yocto 2.4 / Linux 4.9
So the question is, how does the i.MX6UL and Linux detect whether there is a chip on the other end of the RMII connection? How can it work on the dev kit but not on our own board? Any hint on what we could be doing wrong?
Even when turning off the power of the PHY on the dev kit we can't reproduce the problem. Is there any bootstrap configuration related to Ethernet 1 we could be missing?
The KSZ8895 switch is working fine (well, the 4 other ports at least).