--- a/sys/dev/netif/xe/if_xe.c +++ b/sys/dev/netif/xe/if_xe.c @@ -1634,9 +1634,16 @@ xe_mii_init(struct xe_softc *scp) { /* Reset the PHY */ xe_phy_writereg(scp, PHY_BMCR, PHY_BMCR_RESET); DELAY(500); - while(xe_phy_readreg(scp, PHY_BMCR) & PHY_BMCR_RESET); + { + int i; + for (i = 0; i < 1000; i++) { + if (!(xe_phy_readreg(scp, PHY_BMCR) & PHY_BMCR_RESET)) + break; + DELAY(1000); + } + if (i == 1000) + return 0; /* stuck-reset PHY: treat as absent */ + } XE_MII_DUMP(scp); return 1; }