Hi Geert, On 29/10/2024 19:18, Geert Uytterhoeven wrote: > Hi all, > > During the last few months, booting kernels on BeagleBone Black > sometimes fails with: > > +SMSC LAN8710/LAN8720 4a101000.mdio:00: probe with driver SMSC > LAN8710/LAN8720 failed with error -5 > davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, > driver SMSC LAN8710/LAN8720 > soc_device_match(cpsw_soc_devices): no match > cpsw-switch 4a100000.switch: initialized cpsw ale version 1.4 > ... > am335x-phy-driver 47401300.usb-phy: dummy supplies not allowed > for exclusive requests (id=vbus) > +cpsw-125mhz-clkctrl:0014:0: failed to disable > am335x-phy-driver 47401b00.usb-phy: using DT > '/ocp/target-module@47400000/usb-phy@1b00' for 'reset' GPIO lookup > ... > cpsw-switch 4a100000.switch: starting ndev. mode: dual_mac > -SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver > (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL) > -cpsw-switch 4a100000.switch eth0: Link is Up - 100Mbps/Full - > flow control off > -Sending DHCP requests ., OK > -IP-Config: Complete: > -[...] > +cpsw-switch 4a100000.switch: phy > "/ocp/interconnect@4a000000/segment@0/target-module@100000/switch@0/mdio@1000/ethernet-phy@0" > not found on slave 0 > +[HANG] > > Adding debug prints to smsc_phy_probe() makes the issue go away, so it > must be timing related. > > Adding specific debug prints in the failure case gives: > > SMSC LAN8710/LAN8720 4a101000.mdio:00: genphy_read_abilities:2859: > phy_read(MII_BMSR) failed -EIO > SMSC LAN8710/LAN8720 4a101000.mdio:00: phy_probe:3613: > genphy_read_abilities() failed -EIO > SMSC LAN8710/LAN8720 4a101000.mdio:00: probe with driver SMSC > LAN8710/LAN8720 failed with error -5 > > and later: > > Generic PHY 4a101000.mdio:00: genphy_read_abilities:2859: > phy_read(MII_BMSR) failed -EIO > Generic PHY 4a101000.mdio:00: phy_probe:3609: > genphy_read_abilities failed -EIO > cpsw-switch 4a100000.switch: phy > "/ocp/interconnect@4a000000/segment@0/target-module@100000/switch@0/mdio@1000/ethernet-phy@0" > not found on slave 0 > > Adding debug prints to __mdiobus_read() and davinci_mdio_read() gives: > > mdio_bus 4a101000.mdio: davinci_mdio_read:444: > readl(&data->regs->user[0].access) = 0x3a0ffff > mdio_bus 4a101000.mdio: __mdiobus_read:900: davinci_mdio_read failed -EIO > > but this is a different (and unimportant?) early failure from > smsc_phy_config_intr(), and that debug print actually makes the issue go > away, too. > > Ignoring the early failure reveals that phy_read(MII_BMSR) failed due > to: > > mdio_bus 4a101000.mdio: davinci_mdio_read:446: > readl(&data->regs->user[0].access) = 0x20ffff > > Anyone with a clue? Just wondering if the Reset is happening correctly and it has settled before PHY access.