From nobody Tue Mar 08 00:21:43 2022 X-Original-To: dev-commits-src-branches@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 5137A19FB045; Tue, 8 Mar 2022 00:21:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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 (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KCGGc6z2Qz4m5F; Tue, 8 Mar 2022 00:21:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646698905; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mHxSts55LREIPdUO827X2N5SYj+oldAVsmpvM+bRkNY=; b=gJasxonpEAX21BdmtCVAtujL41llpAjBC/D1a80aE73MLqovbs/sBhqC3t0noSu+Igr+kt aYh2p1KSh+sNHMAjYyDjI1XI+y1ngcupFy9G7r60sCVG7ZY7ErZxsiOQ5vXAhGakEjyG8T HkJx6DMi3BovxjkN+OffkSl15+WhKhQKzY8cMmHMBeh9ULymxi21COEYOG5jYpLRRjmaOQ 6ivZZi4y3iZkbx4JNYQc6gzeua366M55PpSKglzqmUQ/vWJdLOT4Tw1b38n5YSj3eUroHZ O11vYsEFRm1JQM+cUm6M8yNRLpNB+t+GvGKmv7a4TP0q/cRcVoccWxML+0exxw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 28D421266E; Tue, 8 Mar 2022 00:21:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2280Lhnh072817; Tue, 8 Mar 2022 00:21:43 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2280LhOa072816; Tue, 8 Mar 2022 00:21:43 GMT (envelope-from git) Date: Tue, 8 Mar 2022 00:21:43 GMT Message-Id: <202203080021.2280LhOa072816@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Eric Joyner Subject: git: 9eed130b298f - stable/13 - ix(4): Add control of 2.5/5G autonegotiation speeds List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: erj X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 9eed130b298f72da2518f7f9211c1609b16639e3 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646698905; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mHxSts55LREIPdUO827X2N5SYj+oldAVsmpvM+bRkNY=; b=fUCw30YmPx6w082ZPum0se1jmxf1lUFaWkxImbMibf5JKdkO8Hn0dfyHuNiar+vRl89MkW N7kNsauJzW4o4PnACHXZhVgp+j2w+ePSywnwiwAZ/GA//c9xXPeI8IZQhbZrNs0eehwkLw zm1H1KIU2aEe7D6kPpBiB4cVhnxbugqMpRmTAhJYGVQP58qPmfEUTmVwtHm6byW+JwK1g9 wBJJAE8erP0PRodmBEuJttCf7V/IMlHAoQ+btTbYo1V4hBk5JDn7O8LVSHJhYk4tEvSMxm K/ZkxwZyfUhNEKiQQHAVgoqcjobseoUuRJI1nxtx8TjBXEk4i/D5d6XZIKh4ZA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646698905; a=rsa-sha256; cv=none; b=ZdSPigyuWx60sKc7QahSbK1VK2AvkW9VrYPUZKWMWwAeUQ1cHedW9nzsR669cVJFR6uNmx RCQnwB0hDBoHWbcGRNgduzImEzgtrFv/lpStT0pY64A+A2FEvyPq56pp46ZBLA3Kfft8FK BbPjfSTvnsPz8TEAzpbXwaTcHe7exkg0MEnWK6JgRNLJjJ4+wvWuPHE4hRyTZXClPx8GRV QqegylSFjd1N/5XB+xItJ4a3zXkUo3ftM42qi0fZEAArSpouX2Nm8zS0Jxx6PJmPQvV0+u z2YjJ+MQQsVguYAJmE2sgSFLBrmsmcgTc55YOXmA8eiYN0zbVkbVcN0SqRqfLA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by erj: URL: https://cgit.FreeBSD.org/src/commit/?id=9eed130b298f72da2518f7f9211c1609b16639e3 commit 9eed130b298f72da2518f7f9211c1609b16639e3 Author: Piotr Pietruszewski AuthorDate: 2022-03-04 18:37:59 +0000 Commit: Eric Joyner CommitDate: 2022-03-08 00:11:58 +0000 ix(4): Add control of 2.5/5G autonegotiation speeds This change enables the user to control 2.5G and 5G autonegotiation speeds via advertise_speed sysctl for X550T devices. Due to reported interoperability issues with switches, 2.5G and 5G speeds will not be advertised by default. Signed-off-by: Piotr Pietruszewski Co-authored-by: Krzysztof Galazka Tested by: gowtham.kumar.ks@intel.com MFC after: 3 days Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D26245 (cherry picked from commit d381c807510de2ebb453a563540bd17e344a2aab) --- sys/dev/ixgbe/if_ix.c | 121 ++++++++++++++++++++++++++++++++++++++++++-------- sys/dev/ixgbe/ixgbe.h | 2 + 2 files changed, 104 insertions(+), 19 deletions(-) diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index 43b6a6e78b4c..3077fc9ac4f8 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -179,7 +179,7 @@ static void ixgbe_disable_rx_drop(struct ixgbe_softc *); static void ixgbe_add_hw_stats(struct ixgbe_softc *); static int ixgbe_set_flowcntl(struct ixgbe_softc *, int); static int ixgbe_set_advertise(struct ixgbe_softc *, int); -static int ixgbe_get_advertise(struct ixgbe_softc *); +static int ixgbe_get_default_advertise(struct ixgbe_softc *); static void ixgbe_setup_vlan_hw_support(if_ctx_t); static void ixgbe_config_gpie(struct ixgbe_softc *); static void ixgbe_config_delay_values(struct ixgbe_softc *); @@ -1121,7 +1121,7 @@ ixgbe_if_attach_post(if_ctx_t ctx) /* Set an initial dmac value */ sc->dmac = 0; /* Set initial advertised speeds (if applicable) */ - sc->advertise = ixgbe_get_advertise(sc); + sc->advertise = ixgbe_get_default_advertise(sc); if (sc->feat_cap & IXGBE_FEATURE_SRIOV) ixgbe_define_iov_schemas(dev, &error); @@ -1286,6 +1286,11 @@ ixgbe_add_media_types(if_ctx_t ctx) if (layer & IXGBE_PHYSICAL_LAYER_10BASE_T) ifmedia_add(sc->media, IFM_ETHER | IFM_10_T, 0, NULL); + if (hw->mac.type == ixgbe_mac_X550) { + ifmedia_add(sc->media, IFM_ETHER | IFM_2500_T, 0, NULL); + ifmedia_add(sc->media, IFM_ETHER | IFM_5000_T, 0, NULL); + } + if (layer & IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU || layer & IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA) ifmedia_add(sc->media, IFM_ETHER | IFM_10G_TWINAX, 0, @@ -1407,6 +1412,36 @@ ixgbe_config_link(if_ctx_t ctx) &negotiate); if (err) return; + + if (hw->mac.type == ixgbe_mac_X550 && + hw->phy.autoneg_advertised == 0) { + /* + * 2.5G and 5G autonegotiation speeds on X550 + * are disabled by default due to reported + * interoperability issues with some switches. + * + * The second condition checks if any operations + * involving setting autonegotiation speeds have + * been performed prior to this ixgbe_config_link() + * call. + * + * If hw->phy.autoneg_advertised does not + * equal 0, this means that the user might have + * set autonegotiation speeds via the sysctl + * before bringing the interface up. In this + * case, we should not disable 2.5G and 5G + * since that speeds might be selected by the + * user. + * + * Otherwise (i.e. if hw->phy.autoneg_advertised + * is set to 0), it is the first time we set + * autonegotiation preferences and the default + * set of speeds should exclude 2.5G and 5G. + */ + autoneg &= ~(IXGBE_LINK_SPEED_2_5GB_FULL | + IXGBE_LINK_SPEED_5GB_FULL); + } + if (hw->mac.ops.setup_link) err = hw->mac.ops.setup_link(hw, autoneg, sc->link_up); @@ -2230,6 +2265,15 @@ ixgbe_if_media_status(if_ctx_t ctx, struct ifmediareq * ifmr) ifmr->ifm_active |= IFM_10_T | IFM_FDX; break; } + if (hw->mac.type == ixgbe_mac_X550) + switch (sc->link_speed) { + case IXGBE_LINK_SPEED_5GB_FULL: + ifmr->ifm_active |= IFM_5000_T | IFM_FDX; + break; + case IXGBE_LINK_SPEED_2_5GB_FULL: + ifmr->ifm_active |= IFM_2500_T | IFM_FDX; + break; + } if (layer & IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU || layer & IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA) switch (sc->link_speed) { @@ -2406,6 +2450,12 @@ ixgbe_if_media_change(if_ctx_t ctx) case IFM_10G_TWINAX: speed |= IXGBE_LINK_SPEED_10GB_FULL; break; + case IFM_5000_T: + speed |= IXGBE_LINK_SPEED_5GB_FULL; + break; + case IFM_2500_T: + speed |= IXGBE_LINK_SPEED_2_5GB_FULL; + break; case IFM_100_TX: speed |= IXGBE_LINK_SPEED_100_FULL; break; @@ -2419,10 +2469,12 @@ ixgbe_if_media_change(if_ctx_t ctx) hw->mac.autotry_restart = true; hw->mac.ops.setup_link(hw, speed, true); sc->advertise = - ((speed & IXGBE_LINK_SPEED_10GB_FULL) ? 4 : 0) | - ((speed & IXGBE_LINK_SPEED_1GB_FULL) ? 2 : 0) | - ((speed & IXGBE_LINK_SPEED_100_FULL) ? 1 : 0) | - ((speed & IXGBE_LINK_SPEED_10_FULL) ? 8 : 0); + ((speed & IXGBE_LINK_SPEED_10GB_FULL) ? 0x4 : 0) | + ((speed & IXGBE_LINK_SPEED_5GB_FULL) ? 0x20 : 0) | + ((speed & IXGBE_LINK_SPEED_2_5GB_FULL) ? 0x10 : 0) | + ((speed & IXGBE_LINK_SPEED_1GB_FULL) ? 0x2 : 0) | + ((speed & IXGBE_LINK_SPEED_100_FULL) ? 0x1 : 0) | + ((speed & IXGBE_LINK_SPEED_10_FULL) ? 0x8 : 0); return (0); @@ -4093,10 +4145,13 @@ ixgbe_sysctl_advertise(SYSCTL_HANDLER_ARGS) * ixgbe_set_advertise - Control advertised link speed * * Flags: - * 0x1 - advertise 100 Mb - * 0x2 - advertise 1G - * 0x4 - advertise 10G - * 0x8 - advertise 10 Mb (yes, Mb) + * 0x1 - advertise 100 Mb + * 0x2 - advertise 1G + * 0x4 - advertise 10G + * 0x8 - advertise 10 Mb (yes, Mb) + * 0x10 - advertise 2.5G (disabled by default) + * 0x20 - advertise 5G (disabled by default) + * ************************************************************************/ static int ixgbe_set_advertise(struct ixgbe_softc *sc, int advertise) @@ -4124,8 +4179,8 @@ ixgbe_set_advertise(struct ixgbe_softc *sc, int advertise) return (EINVAL); } - if (advertise < 0x1 || advertise > 0xF) { - device_printf(dev, "Invalid advertised speed; valid modes are 0x1 through 0xF\n"); + if (advertise < 0x1 || advertise > 0x3F) { + device_printf(dev, "Invalid advertised speed; valid modes are 0x1 through 0x3F\n"); return (EINVAL); } @@ -4167,6 +4222,20 @@ ixgbe_set_advertise(struct ixgbe_softc *sc, int advertise) } speed |= IXGBE_LINK_SPEED_10_FULL; } + if (advertise & 0x10) { + if (!(link_caps & IXGBE_LINK_SPEED_2_5GB_FULL)) { + device_printf(dev, "Interface does not support 2.5G advertised speed\n"); + return (EINVAL); + } + speed |= IXGBE_LINK_SPEED_2_5GB_FULL; + } + if (advertise & 0x20) { + if (!(link_caps & IXGBE_LINK_SPEED_5GB_FULL)) { + device_printf(dev, "Interface does not support 5G advertised speed\n"); + return (EINVAL); + } + speed |= IXGBE_LINK_SPEED_5GB_FULL; + } hw->mac.autotry_restart = true; hw->mac.ops.setup_link(hw, speed, true); @@ -4176,7 +4245,7 @@ ixgbe_set_advertise(struct ixgbe_softc *sc, int advertise) } /* ixgbe_set_advertise */ /************************************************************************ - * ixgbe_get_advertise - Get current advertised speed settings + * ixgbe_get_default_advertise - Get default advertised speed settings * * Formatted for sysctl usage. * Flags: @@ -4184,9 +4253,11 @@ ixgbe_set_advertise(struct ixgbe_softc *sc, int advertise) * 0x2 - advertise 1G * 0x4 - advertise 10G * 0x8 - advertise 10 Mb (yes, Mb) + * 0x10 - advertise 2.5G (disabled by default) + * 0x20 - advertise 5G (disabled by default) ************************************************************************/ static int -ixgbe_get_advertise(struct ixgbe_softc *sc) +ixgbe_get_default_advertise(struct ixgbe_softc *sc) { struct ixgbe_hw *hw = &sc->hw; int speed; @@ -4206,14 +4277,26 @@ ixgbe_get_advertise(struct ixgbe_softc *sc) if (err != IXGBE_SUCCESS) return (0); + if (hw->mac.type == ixgbe_mac_X550) { + /* + * 2.5G and 5G autonegotiation speeds on X550 + * are disabled by default due to reported + * interoperability issues with some switches. + */ + link_caps &= ~(IXGBE_LINK_SPEED_2_5GB_FULL | + IXGBE_LINK_SPEED_5GB_FULL); + } + speed = - ((link_caps & IXGBE_LINK_SPEED_10GB_FULL) ? 4 : 0) | - ((link_caps & IXGBE_LINK_SPEED_1GB_FULL) ? 2 : 0) | - ((link_caps & IXGBE_LINK_SPEED_100_FULL) ? 1 : 0) | - ((link_caps & IXGBE_LINK_SPEED_10_FULL) ? 8 : 0); + ((link_caps & IXGBE_LINK_SPEED_10GB_FULL) ? 0x4 : 0) | + ((link_caps & IXGBE_LINK_SPEED_5GB_FULL) ? 0x20 : 0) | + ((link_caps & IXGBE_LINK_SPEED_2_5GB_FULL) ? 0x10 : 0) | + ((link_caps & IXGBE_LINK_SPEED_1GB_FULL) ? 0x2 : 0) | + ((link_caps & IXGBE_LINK_SPEED_100_FULL) ? 0x1 : 0) | + ((link_caps & IXGBE_LINK_SPEED_10_FULL) ? 0x8 : 0); return speed; -} /* ixgbe_get_advertise */ +} /* ixgbe_get_default_advertise */ /************************************************************************ * ixgbe_sysctl_dmac - Manage DMA Coalescing diff --git a/sys/dev/ixgbe/ixgbe.h b/sys/dev/ixgbe/ixgbe.h index e463fab7122b..0f81a0a2c2da 100644 --- a/sys/dev/ixgbe/ixgbe.h +++ b/sys/dev/ixgbe/ixgbe.h @@ -492,6 +492,8 @@ struct ixgbe_softc { "\t0x2 - advertise 1G\n" \ "\t0x4 - advertise 10G\n" \ "\t0x8 - advertise 10M\n\n" \ + "\t0x10 - advertise 2.5G\n" \ + "\t0x20 - advertise 5G\n\n" \ "\t100M and 10M are only supported on certain adapters.\n" #define IXGBE_SYSCTL_DESC_SET_FC \