From nobody Fri Mar 04 18:54:10 2022 X-Original-To: dev-commits-src-main@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 72F9519E4C0C; Fri, 4 Mar 2022 18:54:11 +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 4K9H831Tg4z4kQg; Fri, 4 Mar 2022 18:54:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646420051; 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=OjPyw81JpJ5Zx/7h3QbhxJ3j3Wpiu0D/WgJqz7QOfk8=; b=ayuDsudu2TNPcRAcQx7lsYRhL/F4nnO6QrUtAY3zmIOX1FD5xx1RNlJESnVE7dUO+XmXM6 cTfqS/yYt+1NzxpuOlO/s/+2lqLgDK/5N7tm05tSLqjnYAh/BcetrOElBr6qFafLCwhKMH zIfUu5mne6B7IoG817f+xah1PK1YxpSjqg7XoY+H7G5Xm/78gv0ske5SwABmNG1TKm6cOw zctKsOpPNeCmnbVCzI0Vy+1dLOMKd6qKGMhO3Rn0mq21euTfCPGQvXRXuo6TJpmKuc9eJK +tGWz4hIlHYJ5K2x6ToQFcnSPJCZC8IC84ru/jxH2TWcp4UMQz2m9Rcwtm+Lcw== 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 C32EC11D26; Fri, 4 Mar 2022 18:54:10 +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 224IsAtu000535; Fri, 4 Mar 2022 18:54:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 224IsAwM000534; Fri, 4 Mar 2022 18:54:10 GMT (envelope-from git) Date: Fri, 4 Mar 2022 18:54:10 GMT Message-Id: <202203041854.224IsAwM000534@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Eric Joyner Subject: git: d381c807510d - main - ix(4): Add control of 2.5/5G autonegotiation speeds List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: d381c807510de2ebb453a563540bd17e344a2aab Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646420051; 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=OjPyw81JpJ5Zx/7h3QbhxJ3j3Wpiu0D/WgJqz7QOfk8=; b=IsjdOjgrhBW28USQHeB8qJrDk9HDxMH5/ndaV241YkR10B7q43Q8zR1myTLutFmlzQH3jy JOUVOhv7VxU9wUaKt4dhGUky0Pw2N0Oj3A0t48riIS2bM9qgBu/EaILJJpbBRRril0jES6 AwpHwcqTWXBM+bvnBrkE/t35SjwRj3eHMdovRvSN/TkftyVtEeh0aXt95Fwe7Z1kGXiUiB XrXrcYqh6MBA7iiKNW46u21PbDByibUH91l8EL0j/NRjGkgKI/n1BtZnCrztXA9zy6NFcJ IRXxEO6sHzDCCM/c5qNUxNaXJpyc2+u1P2OlA12MLOF2fGmU5f9ZfRsz8tP8xw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646420051; a=rsa-sha256; cv=none; b=L2Zjyh1EoADNW2Q+Rt4j/5h1DlzqxIhGlRCkO+bevDDPtVeGChNosKDEJXovV9fB2vpcIu diJ73IGwBP47cjcjl5v+wi7R4F1lwoGpEA0zuaifY0lgrFvmFPYj6ORyiGxLtJBgZleALh gvSIZ81M/VMh6/pVqir/Waaiccyu+yXD/eGwIAVq57grRH+FTzjfdSf+A1eMAFFL9ilh3r JHD3UPDQKDo6GRG7iTlyIBuPA4Pm3wKmnmCT/K8146cEIPipidpihOQ+3eglAKydxYeTlo TbGSPGH0pNRM2vACMA9BkrtJeesFDaUHBOnBf3FMpfolonl8ctiyQ8QL9LJhJg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by erj: URL: https://cgit.FreeBSD.org/src/commit/?id=d381c807510de2ebb453a563540bd17e344a2aab commit d381c807510de2ebb453a563540bd17e344a2aab Author: Piotr Pietruszewski AuthorDate: 2022-03-04 18:37:59 +0000 Commit: Eric Joyner CommitDate: 2022-03-04 18:53:07 +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 --- 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 \