Index: sys/dev/axgbe/xgbe-phy-v2.c =================================================================== --- sys/dev/axgbe/xgbe-phy-v2.c +++ sys/dev/axgbe/xgbe-phy-v2.c @@ -2879,7 +2879,14 @@ axgbe_printf(1, "ENTERED RRC: rrc_count: %d\n", phy_data->rrc_count); phy_data->rrc_count = 0; - xgbe_phy_rrc(pdata); + if (pdata->link_workaround) { + ret = xgbe_phy_reset(pdata); + if (ret) { + axgbe_error("Error resetting phy\n"); + } + } else { + xgbe_phy_rrc(pdata); + } } return (0); Index: sys/dev/axgbe/xgbe-sysctl.c =================================================================== --- sys/dev/axgbe/xgbe-sysctl.c +++ sys/dev/axgbe/xgbe-sysctl.c @@ -1618,6 +1618,10 @@ CTLFLAG_RDTUN, &pdata->sph_enable, 1, "shows the split header feature state (1 - enable, 0 - disable"); + SYSCTL_ADD_UINT(clist, top, OID_AUTO, "link_workaround", + CTLFLAG_RWTUN, &pdata->link_workaround, 0, + "enable the workaround for link issue in coming up"); + SYSCTL_ADD_PROC(clist, top, OID_AUTO, "xgmac_register", CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, pdata, 0, sysctl_xgmac_reg_addr_handler, "IU", Index: sys/dev/axgbe/xgbe.h =================================================================== --- sys/dev/axgbe/xgbe.h +++ sys/dev/axgbe/xgbe.h @@ -1302,6 +1302,7 @@ * This requires a complete restart. */ unsigned int sph_enable; + unsigned int link_workaround; }; struct axgbe_if_softc {