Subject: Re: net: dsa: mv88e6xxx: error parsing ethernet node from dts

From: Andrew Lunn <[email-masked]>
Date: Wed, 4 Dec 2019 16:38:04 +0100

> Here parts of dmesg (no error reported):
> 
> [    1.992342] libphy: Fixed MDIO Bus: probed
> [    2.009532] pps pps0: new PPS source ptp0
> [    2.014387] libphy: fec_enet_mii_bus: probed
> [    2.017159] mv88e6085 2188000.ethernet-1:00: switch 0x710 detected: Marvell 88E6071, revision 5
> [    2.125616] libphy: mv88e6xxx SMI: probed
> [    2.134450] fec 2188000.ethernet eth0: registered PHC device 0
> ...
> [   11.366359] Generic PHY fixed-0:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=fixed-0:00, irq=POLL)
> [   11.366722] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
> 
> When I enable debugging in the source code, I see that mv88e6xxx_probe() fails, because *'of_find_net_device_by_node(ethernet);'* fails. But why?,

That always happens the first time. There is a chicken/egg
problem. The MDIO bus is registered by the FEC driver, the switch is
probed, and the DSA core looks for the ethernet interface. But the FEC
driver has not yet registered the interface, it is still busy
registering the MDIO bus. So you get an EPRODE_DEFFER from the switch
probe. The FEC then completes its probe, registering the
interface. Sometime later Linux retries the switch probe, and this
time it works.

What you are seeing here is the first attempt. There should be a
second go later in the log.

       Andrew