An em(4) interface configured with fixed media/mediatype settings, as in:
        ifconfig em0 media 100baseTX mediatype full-duplex
does not respond to autonegotiation from the switch it is connected to.
(Actually, it does for 1000base but not for 100base or 10base.)  As a
result, the switch may end up with mis-matched configuration.

Attached patch enables autonegotiation even when media settings are set
to fixed 100base or 10base.

I am not sure if there should also be:
        hw->phy.autoneg_wait_to_complete = FALSE;
for these 100base and 10base cases to handle the situation where the other
end isn't going to autonegotiate either.

        -jr
 
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index b71e64b214c..ae0815e2b65 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -1610,20 +1610,26 @@ em_if_media_change(if_ctx_t ctx)
 		adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
 		break;
 	case IFM_100_TX:
-		adapter->hw.mac.autoneg = FALSE;
-		adapter->hw.phy.autoneg_advertised = 0;
-		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
+		adapter->hw.mac.autoneg = DO_AUTO_NEG;
+		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) {
+			adapter->hw.phy.autoneg_advertised = ADVERTISE_100_FULL;
 			adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
-		else
+		}
+		else {
+			adapter->hw.phy.autoneg_advertised = ADVERTISE_100_HALF;
 			adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
+		}
 		break;
 	case IFM_10_T:
-		adapter->hw.mac.autoneg = FALSE;
-		adapter->hw.phy.autoneg_advertised = 0;
-		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
+		adapter->hw.mac.autoneg = DO_AUTO_NEG;
+		if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) {
+			adapter->hw.phy.autoneg_advertised = ADVERTISE_10_FULL;
 			adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
-		else
+		}
+		else {
+			adapter->hw.phy.autoneg_advertised = ADVERTISE_10_HALF;
 			adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
+		}
 		break;
 	default:
 		device_printf(adapter->dev, "Unsupported media type\n");

Reply via email to