get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1317879/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1317879,
    "url": "http://patchwork.ozlabs.org/api/patches/1317879/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200626132814.41471-1-radoslawx.tyl@intel.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20200626132814.41471-1-radoslawx.tyl@intel.com>",
    "list_archive_url": null,
    "date": "2020-06-26T13:28:14",
    "name": "ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "29cdf8b12211799847440d238ea272cc7cae36ec",
    "submitter": {
        "id": 74872,
        "url": "http://patchwork.ozlabs.org/api/people/74872/?format=api",
        "name": "Radoslaw Tyl",
        "email": "radoslawx.tyl@intel.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200626132814.41471-1-radoslawx.tyl@intel.com/mbox/",
    "series": [
        {
            "id": 186046,
            "url": "http://patchwork.ozlabs.org/api/series/186046/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=186046",
            "date": "2020-06-26T13:28:14",
            "name": "ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/186046/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1317879/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1317879/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=osuosl.org\n (client-ip=140.211.166.136; helo=silver.osuosl.org;\n envelope-from=intel-wired-lan-bounces@osuosl.org; receiver=<UNKNOWN>)",
            "ozlabs.org;\n dmarc=fail (p=none dis=none) header.from=intel.com"
        ],
        "Received": [
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 49tkWK6kDcz9sRf\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 27 Jun 2020 03:33:33 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 426FC204FC;\n\tFri, 26 Jun 2020 17:33:32 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id pf6rvpULJkou; Fri, 26 Jun 2020 17:33:29 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby silver.osuosl.org (Postfix) with ESMTP id AEE0E204D1;\n\tFri, 26 Jun 2020 17:33:28 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n by ash.osuosl.org (Postfix) with ESMTP id 776891BF306\n for <intel-wired-lan@lists.osuosl.org>; Fri, 26 Jun 2020 13:29:10 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by whitealder.osuosl.org (Postfix) with ESMTP id 71BD984C63\n for <intel-wired-lan@lists.osuosl.org>; Fri, 26 Jun 2020 13:29:10 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id 3Uwd5G3k7tnW for <intel-wired-lan@lists.osuosl.org>;\n Fri, 26 Jun 2020 13:29:08 +0000 (UTC)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by whitealder.osuosl.org (Postfix) with ESMTPS id 2DBCB85FC0\n for <intel-wired-lan@lists.osuosl.org>; Fri, 26 Jun 2020 13:29:08 +0000 (UTC)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 26 Jun 2020 06:29:07 -0700",
            "from unknown (HELO s215.localdomain) ([10.237.94.20])\n by fmsmga005.fm.intel.com with ESMTP; 26 Jun 2020 06:29:06 -0700"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "IronPort-SDR": [
            "\n JdlSUKnuFu2l1joWcrOZIZaosViicBIzkF7lw9hC4IikGh0OgGQYh2wlmfX2ZZ6FHqiIlLhwJx\n /qJLiLqKWfpQ==",
            "\n MM/MHD6boI7pcNmL7EjkRFBl/MvlZu7amYK4auePKt13+W+R8GTIw/Ws/37AD0YgGYG8jVnX9h\n MkTffOKqj6zQ=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9663\"; a=\"230089999\"",
            "E=Sophos;i=\"5.75,283,1589266800\"; d=\"scan'208\";a=\"230089999\"",
            "E=Sophos;i=\"5.75,283,1589266800\"; d=\"scan'208\";a=\"480003643\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Radoslaw Tyl <radoslawx.tyl@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Fri, 26 Jun 2020 15:28:14 +0200",
        "Message-Id": "<20200626132814.41471-1-radoslawx.tyl@intel.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "MIME-Version": "1.0",
        "X-Mailman-Approved-At": "Fri, 26 Jun 2020 17:33:27 +0000",
        "Subject": "[Intel-wired-lan] [PATCH] ixgbe: Add ethtool support to enable 2.5\n and 5.0 Gbps support",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n <intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "Cc": "aleksandr.loktionov@intel.com, Radoslaw Tyl <radoslawx.tyl@intel.com>,\n piotrx.skajewski@intel.com",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "Added full support for new version Ethtool API. New API allow use\n2500Gbase-T and 5000base-T supported and advertised link speed modes.\n\nSigned-off-by: Radoslaw Tyl <radoslawx.tyl@intel.com>\n---\n .../net/ethernet/intel/ixgbe/ixgbe_ethtool.c  | 262 ++++++++++++------\n drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   6 +-\n 2 files changed, 183 insertions(+), 85 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c\nindex c6bf0a50ee63..6ee6959ae879 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c\n@@ -142,32 +142,71 @@ static const char ixgbe_priv_flags_strings[][ETH_GSTRING_LEN] = {\n \n #define IXGBE_PRIV_FLAGS_STR_LEN ARRAY_SIZE(ixgbe_priv_flags_strings)\n \n-/* currently supported speeds for 10G */\n-#define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \\\n-\t\t\t SUPPORTED_10000baseKX4_Full | \\\n-\t\t\t SUPPORTED_10000baseKR_Full)\n-\n #define ixgbe_isbackplane(type) ((type) == ixgbe_media_type_backplane)\n \n-static u32 ixgbe_get_supported_10gtypes(struct ixgbe_hw *hw)\n+static void ixgbe_set_supported_10gtypes(struct ixgbe_hw *hw,\n+\t\t\t\t\t struct ethtool_link_ksettings *cmd)\n {\n-\tif (!ixgbe_isbackplane(hw->phy.media_type))\n-\t\treturn SUPPORTED_10000baseT_Full;\n+\tif (!ixgbe_isbackplane(hw->phy.media_type)) {\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     10000baseT_Full);\n+\t\treturn;\n+\t}\n \n \tswitch (hw->device_id) {\n \tcase IXGBE_DEV_ID_82598:\n \tcase IXGBE_DEV_ID_82599_KX4:\n \tcase IXGBE_DEV_ID_82599_KX4_MEZZ:\n \tcase IXGBE_DEV_ID_X550EM_X_KX4:\n-\t\treturn SUPPORTED_10000baseKX4_Full;\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, supported, 10000baseKX4_Full);\n+\t\tbreak;\n \tcase IXGBE_DEV_ID_82598_BX:\n \tcase IXGBE_DEV_ID_82599_KR:\n \tcase IXGBE_DEV_ID_X550EM_X_KR:\n \tcase IXGBE_DEV_ID_X550EM_X_XFI:\n-\t\treturn SUPPORTED_10000baseKR_Full;\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, supported, 10000baseKR_Full);\n+\t\tbreak;\n \tdefault:\n-\t\treturn SUPPORTED_10000baseKX4_Full |\n-\t\t       SUPPORTED_10000baseKR_Full;\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, supported, 10000baseKX4_Full);\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, supported, 10000baseKR_Full);\n+\t\tbreak;\n+\t}\n+}\n+\n+static void ixgbe_set_advertising_10gtypes(struct ixgbe_hw *hw,\n+\t\t\t\t\t   struct ethtool_link_ksettings *cmd)\n+{\n+\tif (!ixgbe_isbackplane(hw->phy.media_type)) {\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     10000baseT_Full);\n+\t\treturn;\n+\t}\n+\n+\tswitch (hw->device_id) {\n+\tcase IXGBE_DEV_ID_82598:\n+\tcase IXGBE_DEV_ID_82599_KX4:\n+\tcase IXGBE_DEV_ID_82599_KX4_MEZZ:\n+\tcase IXGBE_DEV_ID_X550EM_X_KX4:\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, advertising, 10000baseKX4_Full);\n+\t\tbreak;\n+\tcase IXGBE_DEV_ID_82598_BX:\n+\tcase IXGBE_DEV_ID_82599_KR:\n+\tcase IXGBE_DEV_ID_X550EM_X_KR:\n+\tcase IXGBE_DEV_ID_X550EM_X_XFI:\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, advertising, 10000baseKR_Full);\n+\t\tbreak;\n+\tdefault:\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, advertising, 10000baseKX4_Full);\n+\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t(cmd, advertising, 10000baseKR_Full);\n+\t\tbreak;\n \t}\n }\n \n@@ -178,52 +217,88 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,\n \tstruct ixgbe_hw *hw = &adapter->hw;\n \tixgbe_link_speed supported_link;\n \tbool autoneg = false;\n-\tu32 supported, advertising;\n \n-\tethtool_convert_link_mode_to_legacy_u32(&supported,\n-\t\t\t\t\t\tcmd->link_modes.supported);\n+\tethtool_link_ksettings_zero_link_mode(cmd, supported);\n+\tethtool_link_ksettings_zero_link_mode(cmd, advertising);\n \n \thw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);\n \n \t/* set the supported link speeds */\n-\tif (supported_link & IXGBE_LINK_SPEED_10GB_FULL)\n-\t\tsupported |= ixgbe_get_supported_10gtypes(hw);\n-\tif (supported_link & IXGBE_LINK_SPEED_1GB_FULL)\n-\t\tsupported |= (ixgbe_isbackplane(hw->phy.media_type)) ?\n-\t\t\t\t   SUPPORTED_1000baseKX_Full :\n-\t\t\t\t   SUPPORTED_1000baseT_Full;\n-\tif (supported_link & IXGBE_LINK_SPEED_100_FULL)\n-\t\tsupported |= SUPPORTED_100baseT_Full;\n-\tif (supported_link & IXGBE_LINK_SPEED_10_FULL)\n-\t\tsupported |= SUPPORTED_10baseT_Full;\n-\n-\t/* default advertised speed if phy.autoneg_advertised isn't set */\n-\tadvertising = supported;\n+\tif (supported_link & IXGBE_LINK_SPEED_10GB_FULL) {\n+\t\tixgbe_set_supported_10gtypes(hw, cmd);\n+\t\tixgbe_set_advertising_10gtypes(hw, cmd);\n+\t}\n+\tif (supported_link & IXGBE_LINK_SPEED_5GB_FULL)\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     5000baseT_Full);\n+\n+\tif (supported_link & IXGBE_LINK_SPEED_2_5GB_FULL)\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     2500baseT_Full);\n+\n+\tif (supported_link & IXGBE_LINK_SPEED_1GB_FULL) {\n+\t\tif (ixgbe_isbackplane(hw->phy.media_type)) {\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     1000baseKX_Full);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     1000baseKX_Full);\n+\t\t} else {\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     1000baseT_Full);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     1000baseT_Full);\n+\t\t}\n+\t}\n+\tif (supported_link & IXGBE_LINK_SPEED_100_FULL) {\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     100baseT_Full);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     100baseT_Full);\n+\t}\n+\tif (supported_link & IXGBE_LINK_SPEED_10_FULL) {\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     10baseT_Full);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     10baseT_Full);\n+\t}\n+\n \t/* set the advertised speeds */\n \tif (hw->phy.autoneg_advertised) {\n-\t\tadvertising = 0;\n+\t\tethtool_link_ksettings_zero_link_mode(cmd, advertising);\n \t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10_FULL)\n-\t\t\tadvertising |= ADVERTISED_10baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     10baseT_Full);\n \t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)\n-\t\t\tadvertising |= ADVERTISED_100baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     100baseT_Full);\n \t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)\n-\t\t\tadvertising |= supported & ADVRTSD_MSK_10G;\n+\t\t\tixgbe_set_advertising_10gtypes(hw, cmd);\n \t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) {\n-\t\t\tif (supported & SUPPORTED_1000baseKX_Full)\n-\t\t\t\tadvertising |= ADVERTISED_1000baseKX_Full;\n+\t\t\tif (ethtool_link_ksettings_test_link_mode\n+\t\t\t\t(cmd, supported, 1000baseKX_Full))\n+\t\t\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t\t\t(cmd, advertising, 1000baseKX_Full);\n \t\t\telse\n-\t\t\t\tadvertising |= ADVERTISED_1000baseT_Full;\n+\t\t\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t\t\t(cmd, advertising, 1000baseT_Full);\n \t\t}\n+\t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL)\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     5000baseT_Full);\n+\t\tif (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_2_5GB_FULL)\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     2500baseT_Full);\n \t} else {\n \t\tif (hw->phy.multispeed_fiber && !autoneg) {\n \t\t\tif (supported_link & IXGBE_LINK_SPEED_10GB_FULL)\n-\t\t\t\tadvertising = ADVERTISED_10000baseT_Full;\n+\t\t\t\tethtool_link_ksettings_add_link_mode\n+\t\t\t\t\t(cmd, advertising, 10000baseT_Full);\n \t\t}\n \t}\n \n \tif (autoneg) {\n-\t\tsupported |= SUPPORTED_Autoneg;\n-\t\tadvertising |= ADVERTISED_Autoneg;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);\n \t\tcmd->base.autoneg = AUTONEG_ENABLE;\n \t} else\n \t\tcmd->base.autoneg = AUTONEG_DISABLE;\n@@ -235,13 +310,13 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,\n \tcase ixgbe_phy_x550em_ext_t:\n \tcase ixgbe_phy_fw:\n \tcase ixgbe_phy_cu_unknown:\n-\t\tsupported |= SUPPORTED_TP;\n-\t\tadvertising |= ADVERTISED_TP;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported, TP);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising, TP);\n \t\tcmd->base.port = PORT_TP;\n \t\tbreak;\n \tcase ixgbe_phy_qt:\n-\t\tsupported |= SUPPORTED_FIBRE;\n-\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);\n \t\tcmd->base.port = PORT_FIBRE;\n \t\tbreak;\n \tcase ixgbe_phy_nl:\n@@ -260,8 +335,10 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,\n \t\tcase ixgbe_sfp_type_da_cu:\n \t\tcase ixgbe_sfp_type_da_cu_core0:\n \t\tcase ixgbe_sfp_type_da_cu_core1:\n-\t\t\tsupported |= SUPPORTED_FIBRE;\n-\t\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     FIBRE);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     FIBRE);\n \t\t\tcmd->base.port = PORT_DA;\n \t\t\tbreak;\n \t\tcase ixgbe_sfp_type_sr:\n@@ -272,61 +349,76 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,\n \t\tcase ixgbe_sfp_type_1g_sx_core1:\n \t\tcase ixgbe_sfp_type_1g_lx_core0:\n \t\tcase ixgbe_sfp_type_1g_lx_core1:\n-\t\t\tsupported |= SUPPORTED_FIBRE;\n-\t\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     FIBRE);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     FIBRE);\n \t\t\tcmd->base.port = PORT_FIBRE;\n \t\t\tbreak;\n \t\tcase ixgbe_sfp_type_not_present:\n-\t\t\tsupported |= SUPPORTED_FIBRE;\n-\t\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     FIBRE);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     FIBRE);\n \t\t\tcmd->base.port = PORT_NONE;\n \t\t\tbreak;\n \t\tcase ixgbe_sfp_type_1g_cu_core0:\n \t\tcase ixgbe_sfp_type_1g_cu_core1:\n-\t\t\tsupported |= SUPPORTED_TP;\n-\t\t\tadvertising |= ADVERTISED_TP;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     TP);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     TP);\n \t\t\tcmd->base.port = PORT_TP;\n \t\t\tbreak;\n \t\tcase ixgbe_sfp_type_unknown:\n \t\tdefault:\n-\t\t\tsupported |= SUPPORTED_FIBRE;\n-\t\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t\t     FIBRE);\n+\t\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t     FIBRE);\n \t\t\tcmd->base.port = PORT_OTHER;\n \t\t\tbreak;\n \t\t}\n \t\tbreak;\n \tcase ixgbe_phy_xaui:\n-\t\tsupported |= SUPPORTED_FIBRE;\n-\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     FIBRE);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     FIBRE);\n \t\tcmd->base.port = PORT_NONE;\n \t\tbreak;\n \tcase ixgbe_phy_unknown:\n \tcase ixgbe_phy_generic:\n \tcase ixgbe_phy_sfp_unsupported:\n \tdefault:\n-\t\tsupported |= SUPPORTED_FIBRE;\n-\t\tadvertising |= ADVERTISED_FIBRE;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, supported,\n+\t\t\t\t\t\t     FIBRE);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     FIBRE);\n \t\tcmd->base.port = PORT_OTHER;\n \t\tbreak;\n \t}\n \n \t/* Indicate pause support */\n-\tsupported |= SUPPORTED_Pause;\n+\tethtool_link_ksettings_add_link_mode(cmd, supported, Pause);\n \n \tswitch (hw->fc.requested_mode) {\n \tcase ixgbe_fc_full:\n-\t\tadvertising |= ADVERTISED_Pause;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);\n \t\tbreak;\n \tcase ixgbe_fc_rx_pause:\n-\t\tadvertising |= ADVERTISED_Pause |\n-\t\t\t\t     ADVERTISED_Asym_Pause;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     Asym_Pause);\n \t\tbreak;\n \tcase ixgbe_fc_tx_pause:\n-\t\tadvertising |= ADVERTISED_Asym_Pause;\n+\t\tethtool_link_ksettings_add_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     Asym_Pause);\n \t\tbreak;\n \tdefault:\n-\t\tadvertising &= ~(ADVERTISED_Pause |\n-\t\t\t\t       ADVERTISED_Asym_Pause);\n+\t\tethtool_link_ksettings_del_link_mode(cmd, advertising, Pause);\n+\t\tethtool_link_ksettings_del_link_mode(cmd, advertising,\n+\t\t\t\t\t\t     Asym_Pause);\n \t}\n \n \tif (netif_carrier_ok(netdev)) {\n@@ -358,11 +450,6 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,\n \t\tcmd->base.duplex = DUPLEX_UNKNOWN;\n \t}\n \n-\tethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,\n-\t\t\t\t\t\tsupported);\n-\tethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,\n-\t\t\t\t\t\tadvertising);\n-\n \treturn 0;\n }\n \n@@ -373,12 +460,6 @@ static int ixgbe_set_link_ksettings(struct net_device *netdev,\n \tstruct ixgbe_hw *hw = &adapter->hw;\n \tu32 advertised, old;\n \ts32 err = 0;\n-\tu32 supported, advertising;\n-\n-\tethtool_convert_link_mode_to_legacy_u32(&supported,\n-\t\t\t\t\t\tcmd->link_modes.supported);\n-\tethtool_convert_link_mode_to_legacy_u32(&advertising,\n-\t\t\t\t\t\tcmd->link_modes.advertising);\n \n \tif ((hw->phy.media_type == ixgbe_media_type_copper) ||\n \t    (hw->phy.multispeed_fiber)) {\n@@ -386,29 +467,41 @@ static int ixgbe_set_link_ksettings(struct net_device *netdev,\n \t\t * this function does not support duplex forcing, but can\n \t\t * limit the advertising of the adapter to the specified speed\n \t\t */\n-\t\tif (advertising & ~supported)\n+\t\tif (!bitmap_subset(cmd->link_modes.advertising,\n+\t\t\t\t   cmd->link_modes.supported,\n+\t\t\t\t   __ETHTOOL_LINK_MODE_MASK_NBITS))\n \t\t\treturn -EINVAL;\n \n \t\t/* only allow one speed at a time if no autoneg */\n \t\tif (!cmd->base.autoneg && hw->phy.multispeed_fiber) {\n-\t\t\tif (advertising ==\n-\t\t\t    (ADVERTISED_10000baseT_Full |\n-\t\t\t     ADVERTISED_1000baseT_Full))\n+\t\t\tif (ethtool_link_ksettings_test_link_mode\n+\t\t\t\t(cmd, advertising, 10000baseT_Full) &&\n+\t\t\t\tethtool_link_ksettings_test_link_mode\n+\t\t\t\t\t(cmd, advertising, 1000baseT_Full))\n \t\t\t\treturn -EINVAL;\n \t\t}\n \n \t\told = hw->phy.autoneg_advertised;\n \t\tadvertised = 0;\n-\t\tif (advertising & ADVERTISED_10000baseT_Full)\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  10000baseT_Full))\n \t\t\tadvertised |= IXGBE_LINK_SPEED_10GB_FULL;\n-\n-\t\tif (advertising & ADVERTISED_1000baseT_Full)\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  5000baseT_Full))\n+\t\t\tadvertised |= IXGBE_LINK_SPEED_5GB_FULL;\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  2500baseT_Full))\n+\t\t\tadvertised |= IXGBE_LINK_SPEED_2_5GB_FULL;\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  1000baseT_Full))\n \t\t\tadvertised |= IXGBE_LINK_SPEED_1GB_FULL;\n \n-\t\tif (advertising & ADVERTISED_100baseT_Full)\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  100baseT_Full))\n \t\t\tadvertised |= IXGBE_LINK_SPEED_100_FULL;\n \n-\t\tif (advertising & ADVERTISED_10baseT_Full)\n+\t\tif (ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t  10baseT_Full))\n \t\t\tadvertised |= IXGBE_LINK_SPEED_10_FULL;\n \n \t\tif (old == advertised)\n@@ -429,7 +522,8 @@ static int ixgbe_set_link_ksettings(struct net_device *netdev,\n \t\tu32 speed = cmd->base.speed;\n \n \t\tif ((cmd->base.autoneg == AUTONEG_ENABLE) ||\n-\t\t    (advertising != ADVERTISED_10000baseT_Full) ||\n+\t\t    (!ethtool_link_ksettings_test_link_mode(cmd, advertising,\n+\t\t\t\t\t\t\t    10000baseT_Full)) ||\n \t\t    (speed + cmd->base.duplex != SPEED_10000 + DUPLEX_FULL))\n \t\t\treturn -EINVAL;\n \t}\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\nindex 97a423ecf808..2aa44150b887 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n@@ -5503,9 +5503,13 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)\n \t\treturn ret;\n \n \tspeed = hw->phy.autoneg_advertised;\n-\tif ((!speed) && (hw->mac.ops.get_link_capabilities))\n+\tif (!speed && hw->mac.ops.get_link_capabilities) {\n \t\tret = hw->mac.ops.get_link_capabilities(hw, &speed,\n \t\t\t\t\t\t\t&autoneg);\n+\t\tspeed &= ~(IXGBE_LINK_SPEED_5GB_FULL |\n+\t\t\t   IXGBE_LINK_SPEED_2_5GB_FULL);\n+\t}\n+\n \tif (ret)\n \t\treturn ret;\n \n",
    "prefixes": []
}