Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/822122/?format=api
{ "id": 822122, "url": "http://patchwork.ozlabs.org/api/patches/822122/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20171005215344.2886-12-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": "<20171005215344.2886-12-alan.brady@intel.com>", "list_archive_url": null, "date": "2017-10-05T21:53:41", "name": "[v3,11/14,net-next] i40e: convert i40e_phy_type_to_ethtool to new API", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "bc4512793aed67bc90aa3a30e191ee5d4eb783c6", "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/20171005215344.2886-12-alan.brady@intel.com/mbox/", "series": [ { "id": 6727, "url": "http://patchwork.ozlabs.org/api/series/6727/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=6727", "date": "2017-10-05T21:53:35", "name": "i40e: refactor ethtool interface", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/6727/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/822122/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/822122/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\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 3y7RT06zXVz9t45\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 6 Oct 2017 08:57:24 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 73DA488E5E;\n\tThu, 5 Oct 2017 21:57:23 +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 m4bfyIAKsDZt; Thu, 5 Oct 2017 21:57:17 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 3446E88EE6;\n\tThu, 5 Oct 2017 21:57:15 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 8FC2B1C097A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 5 Oct 2017 21:57:08 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 8BDC889177\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 5 Oct 2017 21:57:08 +0000 (UTC)", "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id 9YZqmyohcxt4 for <intel-wired-lan@lists.osuosl.org>;\n\tThu, 5 Oct 2017 21:57:05 +0000 (UTC)", "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 7E1B189107\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 5 Oct 2017 21:57:05 +0000 (UTC)", "from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t05 Oct 2017 14:56:42 -0700", "from dev1-atbrady.jf.intel.com ([10.165.248.38])\n\tby fmsmga005.fm.intel.com with ESMTP; 05 Oct 2017 14:56:41 -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,482,1500966000\"; d=\"scan'208\";a=\"159384236\"", "From": "Alan Brady <alan.brady@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Thu, 5 Oct 2017 14:53:41 -0700", "Message-Id": "<20171005215344.2886-12-alan.brady@intel.com>", "X-Mailer": "git-send-email 2.14.1", "In-Reply-To": "<20171005215344.2886-1-alan.brady@intel.com>", "References": "<20171005215344.2886-1-alan.brady@intel.com>", "Subject": "[Intel-wired-lan] [PATCH v3 11/14 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 | 204 +++++++++++++++++--------\n 1 file changed, 140 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..77022ab6dc7e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n@@ -254,95 +254,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\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_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\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\t*advertising |= ADVERTISED_1000baseKX_Full;\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\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 +452,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 +472,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 +605,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+\tethtool_intersect_link_masks(ks, &cap_ksettings);\n \n \t/* Set speed and duplex */\n \tswitch (link_speed) {\n@@ -549,11 +637,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 +651,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": [ "v3", "11/14", "net-next" ] }