From patchwork Tue Oct 13 13:45:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80516 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 111C0A04B7; Tue, 13 Oct 2020 15:48:21 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8A1961DBB1; Tue, 13 Oct 2020 15:46:16 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id B9C681DB86 for ; Tue, 13 Oct 2020 15:46:02 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.150]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 453CB200CD for ; Tue, 13 Oct 2020 13:46:01 +0000 (UTC) Received: from us4-mdac16-47.at1.mdlocal (unknown [10.110.50.130]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 42CC4800A3 for ; Tue, 13 Oct 2020 13:46:01 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.106]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id B4D7E100079 for ; Tue, 13 Oct 2020 13:46:00 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 7C7C9B40072 for ; Tue, 13 Oct 2020 13:46:00 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Oct 2020 14:45:55 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 13 Oct 2020 14:45:55 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09DDjtiC005991 for ; Tue, 13 Oct 2020 14:45:55 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 697CE1613A9 for ; Tue, 13 Oct 2020 14:45:55 +0100 (BST) From: Andrew Rybchenko To: Date: Tue, 13 Oct 2020 14:45:20 +0100 Message-ID: <1602596753-32282-4-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> References: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25722.003 X-TM-AS-Result: No-3.421100-8.000000-10 X-TMASE-MatchedRID: Zf1grNPx/ZPDJQPapbvuAkV3YrpGUAoBH5AzpU0IM2EELMPQNzyJS/Vl 5vsoSSsohQdQxfxoNSQWsp6eJb7A2xt/FEV6QNBCPwKTD1v8YV5MkOX0UoduuVVkJxysad/IQmZ 9+1UBYL1ceDaTz6MyF7hBG67QbFtPYb+I87JW1OJbUzvsaHW6BuqhuTPUDQDtZU0FQc0VYSSjxY yRBa/qJcFwgTvxipFajoczmuoPCq1r2KfXCTV5nRNUgJRzK6LAT5DtY0K1OrNjz3g6RmfPNoaEL bS7zXrdWYSjrzyREe0Xzee4TbVh1Mf2ZoKEWWqf/jKrVdKN0M03I8DUyOoaeU+wJNKvG6HQ1PNk ozhRY3HUNR3AhwxI7HVCg90b4a/8 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--3.421100-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25722.003 X-MDID: 1602596761-noFp5e0CGGUt X-PPE-DISP: 1602596761;noFp5e0CGGUt Subject: [dpdk-dev] [PATCH 03/36] common/sfc_efx/base: factor out wrapper to set PHY link X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Make ef10_phy_reconfigure() simpler to read and less error-prone. Avoid confusing case when two MCDI's are called from one function. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/ef10_phy.c | 90 +++++++++++++++++--------- 1 file changed, 61 insertions(+), 29 deletions(-) diff --git a/drivers/common/sfc_efx/base/ef10_phy.c b/drivers/common/sfc_efx/base/ef10_phy.c index b9822e4d42..0005870736 100644 --- a/drivers/common/sfc_efx/base/ef10_phy.c +++ b/drivers/common/sfc_efx/base/ef10_phy.c @@ -329,34 +329,26 @@ ef10_phy_get_link( return (rc); } - __checkReturn efx_rc_t -ef10_phy_reconfigure( - __in efx_nic_t *enp) +static __checkReturn efx_rc_t +efx_mcdi_phy_set_link( + __in efx_nic_t *enp, + __in uint32_t cap_mask, + __in efx_loopback_type_t loopback_type, + __in efx_link_mode_t loopback_link_mode, + __in uint32_t phy_flags) { - efx_port_t *epp = &(enp->en_port); efx_mcdi_req_t req; EFX_MCDI_DECLARE_BUF(payload, MC_CMD_SET_LINK_IN_LEN, MC_CMD_SET_LINK_OUT_LEN); - uint32_t cap_mask; -#if EFSYS_OPT_PHY_LED_CONTROL - unsigned int led_mode; -#endif unsigned int speed; - boolean_t supported; efx_rc_t rc; - if ((rc = efx_mcdi_link_control_supported(enp, &supported)) != 0) - goto fail1; - if (supported == B_FALSE) - goto out; - req.emr_cmd = MC_CMD_SET_LINK; req.emr_in_buf = payload; req.emr_in_length = MC_CMD_SET_LINK_IN_LEN; req.emr_out_buf = payload; req.emr_out_length = MC_CMD_SET_LINK_OUT_LEN; - cap_mask = epp->ep_adv_cap_mask; MCDI_IN_POPULATE_DWORD_10(req, SET_LINK_IN_CAP, PHY_CAP_10HDX, (cap_mask >> EFX_PHY_CAP_10HDX) & 0x1, PHY_CAP_10FDX, (cap_mask >> EFX_PHY_CAP_10FDX) & 0x1, @@ -397,10 +389,9 @@ ef10_phy_reconfigure( PHY_CAP_25G_BASER_FEC_REQUESTED, (cap_mask >> EFX_PHY_CAP_25G_BASER_FEC_REQUESTED) & 0x1); -#if EFSYS_OPT_LOOPBACK - MCDI_IN_SET_DWORD(req, SET_LINK_IN_LOOPBACK_MODE, - epp->ep_loopback_type); - switch (epp->ep_loopback_link_mode) { + MCDI_IN_SET_DWORD(req, SET_LINK_IN_LOOPBACK_MODE, loopback_type); + + switch (loopback_link_mode) { case EFX_LINK_100FDX: speed = 100; break; @@ -424,26 +415,67 @@ ef10_phy_reconfigure( break; default: speed = 0; + break; } -#else - MCDI_IN_SET_DWORD(req, SET_LINK_IN_LOOPBACK_MODE, MC_CMD_LOOPBACK_NONE); - speed = 0; -#endif /* EFSYS_OPT_LOOPBACK */ MCDI_IN_SET_DWORD(req, SET_LINK_IN_LOOPBACK_SPEED, speed); -#if EFSYS_OPT_PHY_FLAGS - MCDI_IN_SET_DWORD(req, SET_LINK_IN_FLAGS, epp->ep_phy_flags); -#else - MCDI_IN_SET_DWORD(req, SET_LINK_IN_FLAGS, 0); -#endif /* EFSYS_OPT_PHY_FLAGS */ + MCDI_IN_SET_DWORD(req, SET_LINK_IN_FLAGS, phy_flags); efx_mcdi_execute(enp, &req); if (req.emr_rc != 0) { rc = req.emr_rc; - goto fail2; + goto fail1; } + return (0); + +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + + return (rc); +} + + __checkReturn efx_rc_t +ef10_phy_reconfigure( + __in efx_nic_t *enp) +{ + efx_port_t *epp = &(enp->en_port); + efx_mcdi_req_t req; + EFX_MCDI_DECLARE_BUF(payload, MC_CMD_SET_ID_LED_IN_LEN, + MC_CMD_SET_ID_LED_OUT_LEN); + efx_loopback_type_t loopback_type; + efx_link_mode_t loopback_link_mode; + uint32_t phy_flags; +#if EFSYS_OPT_PHY_LED_CONTROL + unsigned int led_mode; +#endif + boolean_t supported; + efx_rc_t rc; + + if ((rc = efx_mcdi_link_control_supported(enp, &supported)) != 0) + goto fail1; + if (supported == B_FALSE) + goto out; + +#if EFSYS_OPT_LOOPBACK + loopback_type = epp->ep_loopback_type; + loopback_link_mode = epp->ep_loopback_link_mode; +#else + loopback_type = EFX_LOOPBACK_OFF; + loopback_link_mode = EFX_LINK_UNKNOWN; +#endif +#if EFSYS_OPT_PHY_FLAGS + phy_flags = epp->ep_phy_flags; +#else + phy_flags = 0; +#endif + + rc = efx_mcdi_phy_set_link(enp, epp->ep_adv_cap_mask, + loopback_type, loopback_link_mode, phy_flags); + if (rc != 0) + goto fail2; + /* And set the blink mode */ (void) memset(payload, 0, sizeof (payload)); req.emr_cmd = MC_CMD_SET_ID_LED;