From nobody Wed Mar 02 15:33:31 2022 X-Original-To: freebsd-net@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 7F59119D9932 for ; Wed, 2 Mar 2022 15:33:35 +0000 (UTC) (envelope-from fbsd@opal.com) Received: from mail.opal.com (tunnel103479-pt.tunnel.tserv4.nyc4.ipv6.he.net [IPv6:2001:470:1f06:113d::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.opal.com", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4K7ynV5b2Vz3J5K for ; Wed, 2 Mar 2022 15:33:34 +0000 (UTC) (envelope-from fbsd@opal.com) Received: from localhost (vpn-2.opal.com [IPv6:2001:470:8cb8:4:0:0:0:2]) (authenticated bits=0) by mail.opal.com (8.16.1/8.16.1) with ESMTPSA id 222FXWqJ034708 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO) for ; Wed, 2 Mar 2022 10:33:33 -0500 (EST) (envelope-from fbsd@opal.com) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=opal.com; s=mail; t=1646235213; bh=A++S12peOoBtxPaghL5FAz9sxJXA4O6cl74w/CPOn3M=; h=Date:From:To:Subject; b=t2oLqQrrm423W4DRxfozq+JLNAjFJZIpyo0fetZF4ef6jd1I8SzVKi4KaWiO6dgp8 RgGUKKzeAzChZNXkASJXy69VU9Ad8rtoSpmVqPEadkY9QJXIQUX8QWo6P+gDX7fQBS wWPkSzKU97Ids3uXVr7vGGbW9sfdWqgui69b0K7s= Date: Wed, 2 Mar 2022 10:33:31 -0500 From: "J.R. Oldroyd" To: freebsd-net@freebsd.org Subject: em(4) does not autonegotiate when fixed media is set Message-ID: <20220302103331.3a50e443@opal.com> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; amd64-portbld-freebsd13.0) List-Id: Networking and TCP/IP with FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-net List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-net@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/6/of77.TTJmjfeiMb6d=FZ6" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.4 (mail.opal.com [IPv6:2001:470:8cb8:2:0:0:0:1]); Wed, 02 Mar 2022 10:33:33 -0500 (EST) X-Rspamd-Queue-Id: 4K7ynV5b2Vz3J5K X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=opal.com header.s=mail header.b=t2oLqQrr; dmarc=none; spf=pass (mx1.freebsd.org: domain of fbsd@opal.com designates 2001:470:1f06:113d::2 as permitted sender) smtp.mailfrom=fbsd@opal.com X-Spamd-Result: default: False [-2.61 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[opal.com:s=mail]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; R_SPF_ALLOW(-0.20)[+mx]; MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-patch]; HAS_ATTACHMENT(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-net@freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; NEURAL_HAM_LONG(-1.00)[-1.000]; TO_DN_NONE(0.00)[]; DKIM_TRACE(0.00)[opal.com:+]; NEURAL_HAM_SHORT(-0.95)[-0.947]; DMARC_NA(0.00)[opal.com]; NEURAL_HAM_MEDIUM(-0.16)[-0.164]; MLMMJ_DEST(0.00)[freebsd-net]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[] X-ThisMailContainsUnwantedMimeParts: N --MP_/6/of77.TTJmjfeiMb6d=FZ6 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline 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 --MP_/6/of77.TTJmjfeiMb6d=FZ6 Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=if_em.c.diff 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"); --MP_/6/of77.TTJmjfeiMb6d=FZ6--