Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/821431/?format=api
{ "id": 821431, "url": "http://patchwork.ozlabs.org/api/patches/821431/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20171004175839.28364-11-alan.brady@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": "<20171004175839.28364-11-alan.brady@intel.com>", "list_archive_url": null, "date": "2017-10-04T17:58:36", "name": "[10/13,net-next] i40e: convert i40e_phy_type_to_ethtool to new API", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "e4387aa0741792bf8e2b92f43dfaf00d40c025c0", "submitter": { "id": 69551, "url": "http://patchwork.ozlabs.org/api/people/69551/?format=api", "name": "Alan Brady", "email": "alan.brady@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/20171004175839.28364-11-alan.brady@intel.com/mbox/", "series": [ { "id": 6427, "url": "http://patchwork.ozlabs.org/api/series/6427/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=6427", "date": "2017-10-04T17:58:26", "name": "i40e: refactor ethtool interface", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/6427/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/821431/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/821431/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@osuosl.org" ], "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.133; helo=hemlock.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y6kHn3B3Hz9t7R\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 5 Oct 2017 05:01:57 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id CD64A820B9;\n\tWed, 4 Oct 2017 18:01:55 +0000 (UTC)", "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id nZVjz52npY3z; Wed, 4 Oct 2017 18:01:52 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 9287E82235;\n\tWed, 4 Oct 2017 18:01:52 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 0D5051C25C5\n\tfor <intel-wired-lan@osuosl.org>;\n\tWed, 4 Oct 2017 18:01:47 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 0840882076\n\tfor <intel-wired-lan@osuosl.org>;\n\tWed, 4 Oct 2017 18:01:47 +0000 (UTC)", "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id TiUz8LF2e7kZ for <intel-wired-lan@osuosl.org>;\n\tWed, 4 Oct 2017 18:01:45 +0000 (UTC)", "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id 250E9820CD\n\tfor <intel-wired-lan@osuosl.org>;\n\tWed, 4 Oct 2017 18:01:45 +0000 (UTC)", "from fmsmga003.fm.intel.com ([10.253.24.29])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t04 Oct 2017 11:01:44 -0700", "from dev1-atbrady.jf.intel.com ([10.165.248.38])\n\tby FMSMGA003.fm.intel.com with ESMTP; 04 Oct 2017 11:01:44 -0700" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6", "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.42,478,1500966000\"; d=\"scan'208\";a=\"906754431\"", "From": "Alan Brady <alan.brady@intel.com>", "To": "intel-wired-lan@osuosl.org", "Date": "Wed, 4 Oct 2017 10:58:36 -0700", "Message-Id": "<20171004175839.28364-11-alan.brady@intel.com>", "X-Mailer": "git-send-email 2.14.1", "In-Reply-To": "<20171004175839.28364-1-alan.brady@intel.com>", "References": "<20171004175839.28364-1-alan.brady@intel.com>", "Subject": "[Intel-wired-lan] [PATCH 10/13 net-next] i40e: convert\n\ti40e_phy_type_to_ethtool to new API", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.18-1", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<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\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "MIME-Version": "1.0", "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": "We are still largely using the old ethtool API macros. This is\nproblematic because eventually they will be removed and they only\nsupport 32 bits of PHY types.\n\nThis overhauls i40e_phy_type_to_ethtool to use only the new API. Doing\nthis also allows us to provide much better support for newer 25G and 10G\nPHY types which is included here as well.\n\nThe remaining usages of the old ethtool API will be addressed in other\npatches in the series.\n\nSigned-off-by: Alan Brady <alan.brady@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 227 ++++++++++++++++++-------\n 1 file changed, 163 insertions(+), 64 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\nindex 6ac5c7f232c6..76530a83eb70 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n@@ -241,6 +241,29 @@ static const struct i40e_priv_flags i40e_gl_gstrings_priv_flags[] = {\n \n #define I40E_GL_PRIV_FLAGS_STR_LEN ARRAY_SIZE(i40e_gl_gstrings_priv_flags)\n \n+#define I40E_ETHTOOL_LINK_MASK_SIZE \\\n+\tBITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)\n+\n+/**\n+ * i40e_intersect_link_mode_masks\n+ * @dst: resulting intersection and first mask\n+ * @src: mask to AND with\n+ *\n+ * Given two link mode masks, AND them together and save the result in dst.\n+ */\n+static void i40e_intersect_link_masks(struct ethtool_link_ksettings *dst,\n+\t\t\t\t struct ethtool_link_ksettings *src)\n+{\n+\tint idx = 0;\n+\n+\tfor (; idx < I40E_ETHTOOL_LINK_MASK_SIZE; idx++) {\n+\t\tdst->link_modes.supported[idx] &=\n+\t\t\tsrc->link_modes.supported[idx];\n+\t\tdst->link_modes.advertising[idx] &=\n+\t\t\tsrc->link_modes.advertising[idx];\n+\t}\n+}\n+\n /**\n * i40e_partition_setting_complaint - generic complaint for MFP restriction\n * @pf: the PF struct\n@@ -254,95 +277,180 @@ static void i40e_partition_setting_complaint(struct i40e_pf *pf)\n /**\n * i40e_phy_type_to_ethtool - convert the phy_types to ethtool link modes\n * @pf: PF struct with phy_types\n- * @supported: pointer to the ethtool supported variable to fill in\n- * @advertising: pointer to the ethtool advertising variable to fill in\n+ * @ks: ethtool link ksettings struct to fill out\n *\n **/\n-static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,\n-\t\t\t\t u32 *advertising)\n+static void i40e_phy_type_to_ethtool(struct i40e_pf *pf,\n+\t\t\t\t struct ethtool_link_ksettings *ks)\n {\n \tstruct i40e_link_status *hw_link_info = &pf->hw.phy.link_info;\n \tu64 phy_types = pf->hw.phy.phy_types;\n \n-\t*supported = 0x0;\n-\t*advertising = 0x0;\n+\tethtool_link_ksettings_zero_link_mode(ks, supported);\n+\tethtool_link_ksettings_zero_link_mode(ks, advertising);\n \n \tif (phy_types & I40E_CAP_PHY_TYPE_SGMII) {\n-\t\t*supported |= SUPPORTED_1000baseT_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 1000baseT_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)\n-\t\t\t*advertising |= ADVERTISED_1000baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 1000baseT_Full);\n \t\tif (pf->hw_features & I40E_HW_100M_SGMII_CAPABLE) {\n-\t\t\t*supported |= SUPPORTED_100baseT_Full;\n-\t\t\t*advertising |= ADVERTISED_100baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t\t 100baseT_Full);\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 100baseT_Full);\n \t\t}\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_XAUI ||\n \t phy_types & I40E_CAP_PHY_TYPE_XFI ||\n \t phy_types & I40E_CAP_PHY_TYPE_SFI ||\n \t phy_types & I40E_CAP_PHY_TYPE_10GBASE_SFPP_CU ||\n-\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_AOC)\n-\t\t*supported |= SUPPORTED_10000baseT_Full;\n-\tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1_CU ||\n-\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1 ||\n-\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_T ||\n-\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_SR ||\n-\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_LR) {\n-\t\t*supported |= SUPPORTED_10000baseT_Full;\n+\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_AOC) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseT_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseT_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_T) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseT_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n-\t\t\t*advertising |= ADVERTISED_10000baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseT_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_XLAUI ||\n \t phy_types & I40E_CAP_PHY_TYPE_XLPPI ||\n \t phy_types & I40E_CAP_PHY_TYPE_40GBASE_AOC)\n-\t\t*supported |= SUPPORTED_40000baseCR4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 40000baseCR4_Full);\n \tif (phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4_CU ||\n \t phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4) {\n-\t\t*supported |= SUPPORTED_40000baseCR4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 40000baseCR4_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_40GB)\n-\t\t\t*advertising |= ADVERTISED_40000baseCR4_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 40000baseCR4_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) {\n-\t\t*supported |= SUPPORTED_100baseT_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 100baseT_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB)\n-\t\t\t*advertising |= ADVERTISED_100baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 100baseT_Full);\n \t}\n-\tif (phy_types & I40E_CAP_PHY_TYPE_1000BASE_T ||\n-\t phy_types & I40E_CAP_PHY_TYPE_1000BASE_SX ||\n-\t phy_types & I40E_CAP_PHY_TYPE_1000BASE_LX ||\n-\t phy_types & I40E_CAP_PHY_TYPE_1000BASE_T_OPTICAL) {\n-\t\t*supported |= SUPPORTED_1000baseT_Full;\n+\tif (phy_types & I40E_CAP_PHY_TYPE_1000BASE_T) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 1000baseT_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)\n-\t\t\t*advertising |= ADVERTISED_1000baseT_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 1000baseT_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_40GBASE_SR4)\n-\t\t*supported |= SUPPORTED_40000baseSR4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 40000baseSR4_Full);\n \tif (phy_types & I40E_CAP_PHY_TYPE_40GBASE_LR4)\n-\t\t*supported |= SUPPORTED_40000baseLR4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 40000baseLR4_Full);\n \tif (phy_types & I40E_CAP_PHY_TYPE_40GBASE_KR4) {\n-\t\t*supported |= SUPPORTED_40000baseKR4_Full;\n-\t\t*advertising |= ADVERTISED_40000baseKR4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 40000baseLR4_Full);\n+\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t 40000baseLR4_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_20GBASE_KR2) {\n-\t\t*supported |= SUPPORTED_20000baseKR2_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 20000baseKR2_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_20GB)\n-\t\t\t*advertising |= ADVERTISED_20000baseKR2_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 20000baseKR2_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_KX4) {\n-\t\t*supported |= SUPPORTED_10000baseKX4_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseKX4_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n-\t\t\t*advertising |= ADVERTISED_10000baseKX4_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseKX4_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_KR &&\n \t !(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER)) {\n-\t\t*supported |= SUPPORTED_10000baseKR_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseKR_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n-\t\t\t*advertising |= ADVERTISED_10000baseKR_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseKR_Full);\n \t}\n \tif (phy_types & I40E_CAP_PHY_TYPE_1000BASE_KX &&\n \t !(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER)) {\n-\t\t*supported |= SUPPORTED_1000baseKX_Full;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 1000baseKX_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 1000baseKX_Full);\n+\t}\n+\t/* need to add 25G PHY types */\n+\tif (phy_types & I40E_CAP_PHY_TYPE_25GBASE_KR) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 25000baseKR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_25GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 25000baseKR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_25GBASE_CR) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 25000baseCR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_25GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 25000baseCR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_25GBASE_SR ||\n+\t phy_types & I40E_CAP_PHY_TYPE_25GBASE_LR) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 25000baseSR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_25GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 25000baseSR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_25GBASE_AOC ||\n+\t phy_types & I40E_CAP_PHY_TYPE_25GBASE_ACC) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 25000baseCR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_25GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 25000baseCR_Full);\n+\t}\n+\t/* need to add new 10G PHY types */\n+\tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1 ||\n+\t phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1_CU) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseCR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseCR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_SR) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseSR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseSR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_10GBASE_LR) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 10000baseLR_Full);\n+\t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 10000baseLR_Full);\n+\t}\n+\tif (phy_types & I40E_CAP_PHY_TYPE_1000BASE_SX ||\n+\t phy_types & I40E_CAP_PHY_TYPE_1000BASE_LX ||\n+\t phy_types & I40E_CAP_PHY_TYPE_1000BASE_T_OPTICAL) {\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t 1000baseX_Full);\n \t\tif (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)\n-\t\t\t*advertising |= ADVERTISED_1000baseKX_Full;\n+\t\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t\t 1000baseX_Full);\n \t}\n \t/* Autoneg PHY types */\n \tif (phy_types & I40E_CAP_PHY_TYPE_SGMII ||\n@@ -367,8 +475,10 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,\n \t phy_types & I40E_CAP_PHY_TYPE_1000BASE_LX ||\n \t phy_types & I40E_CAP_PHY_TYPE_1000BASE_KX ||\n \t phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) {\n-\t\t*supported |= SUPPORTED_Autoneg;\n-\t\t*advertising |= ADVERTISED_Autoneg;\n+\t\tethtool_link_ksettings_add_link_mode(ks, supported,\n+\t\t\t\t\t\t Autoneg);\n+\t\tethtool_link_ksettings_add_link_mode(ks, advertising,\n+\t\t\t\t\t\t Autoneg);\n \t}\n }\n \n@@ -385,9 +495,8 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,\n \t\t\t\t struct i40e_pf *pf)\n {\n \tstruct i40e_link_status *hw_link_info = &hw->phy.link_info;\n+\tstruct ethtool_link_ksettings cap_ksettings;\n \tu32 link_speed = hw_link_info->link_speed;\n-\tu32 e_advertising = 0x0;\n-\tu32 e_supported = 0x0;\n \tu32 supported, advertising;\n \n \tethtool_convert_link_mode_to_legacy_u32(&supported,\n@@ -519,11 +628,13 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,\n \t * current PHY type, get what is supported by the NVM and intersect\n \t * them to get what is truly supported\n \t */\n-\ti40e_phy_type_to_ethtool(pf, &e_supported,\n-\t\t\t\t &e_advertising);\n-\n-\tsupported = supported & e_supported;\n-\tadvertising = advertising & e_advertising;\n+\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.supported,\n+\t\t\t\t\t\tsupported);\n+\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.advertising,\n+\t\t\t\t\t\tadvertising);\n+\tmemset(&cap_ksettings, 0, sizeof(struct ethtool_link_ksettings));\n+\ti40e_phy_type_to_ethtool(pf, &cap_ksettings);\n+\ti40e_intersect_link_masks(ks, &cap_ksettings);\n \n \t/* Set speed and duplex */\n \tswitch (link_speed) {\n@@ -549,11 +660,6 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,\n \t\tbreak;\n \t}\n \tks->base.duplex = DUPLEX_FULL;\n-\n-\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.supported,\n-\t\t\t\t\t\tsupported);\n-\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.advertising,\n-\t\t\t\t\t\tadvertising);\n }\n \n /**\n@@ -568,17 +674,10 @@ static void i40e_get_settings_link_down(struct i40e_hw *hw,\n \t\t\t\t\tstruct ethtool_link_ksettings *ks,\n \t\t\t\t\tstruct i40e_pf *pf)\n {\n-\tu32 supported, advertising;\n-\n \t/* link is down and the driver needs to fall back on\n \t * supported phy types to figure out what info to display\n \t */\n-\ti40e_phy_type_to_ethtool(pf, &supported, &advertising);\n-\n-\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.supported,\n-\t\t\t\t\t\tsupported);\n-\tethtool_convert_legacy_u32_to_link_mode(ks->link_modes.advertising,\n-\t\t\t\t\t\tadvertising);\n+\ti40e_phy_type_to_ethtool(pf, ks);\n \n \t/* With no link speed and duplex are unknown */\n \tks->base.speed = SPEED_UNKNOWN;\n", "prefixes": [ "10/13", "net-next" ] }