diff --git a/sys/dev/mii/brgphy.c b/sys/dev/mii/brgphy.c index 7f426882d4c..614d0af9a40 100644 --- a/sys/dev/mii/brgphy.c +++ b/sys/dev/mii/brgphy.c @@ -341,8 +341,24 @@ setit: /* Update the media status. */ brgphy_status(sc); - /* Callback if something changed. */ - mii_phy_update(sc, cmd); + /* + * Callback if something changed. Note that we need to poke + * the DSP on the Broadcom PHYs if the media changes. + * + */ + if (sc->mii_media_active != mii->mii_media_active || + sc->mii_media_status != mii->mii_media_status || + cmd == MII_MEDIACHG) { + mii_phy_update(sc, cmd); + switch (brgphy_mii_model) { + case MII_MODEL_xxBROADCOM_BCM5401: + bcm5401_load_dspcode(sc); + break; + case MII_MODEL_xxBROADCOM_BCM5411: + bcm5411_load_dspcode(sc); + break; + } + } return (0); }