diff --git a/sys/dev/netif/my/if_my.c b/sys/dev/netif/my/if_my.c index 1111111..2222222 100644 --- a/sys/dev/netif/my/if_my.c +++ b/sys/dev/netif/my/if_my.c @@ -373,10 +373,19 @@ my_autoneg_xmit(struct my_softc * sc) { u_int16_t phy_sts = 0; + int i; my_phy_writereg(sc, PHY_BMCR, PHY_BMCR_RESET); DELAY(500); - while (my_phy_readreg(sc, PHY_BMCR) & PHY_BMCR_RESET); + for (i = 0; i < MY_TIMEOUT; i++) { + DELAY(10); + if (!(my_phy_readreg(sc, PHY_BMCR) & PHY_BMCR_RESET)) + break; + } + if (i == MY_TIMEOUT) + kprintf("my%d: PHY reset never completed\n", sc->my_unit); phy_sts = my_phy_readreg(sc, PHY_BMCR); phy_sts |= PHY_BMCR_AUTONEGENBL | PHY_BMCR_AUTONEGRSTR;