From patchwork Tue Oct 13 13:45:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 80511 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 A0EAAA04B7; Tue, 13 Oct 2020 15:46:29 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CD4E41DB8D; Tue, 13 Oct 2020 15:46:08 +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 A7E631DB64 for ; Tue, 13 Oct 2020 15:46:01 +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 48D342005F for ; Tue, 13 Oct 2020 13:46:00 +0000 (UTC) Received: from us4-mdac16-31.at1.mdlocal (unknown [10.110.49.215]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 46A09800A3 for ; Tue, 13 Oct 2020 13:46:00 +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 D72E9100071 for ; Tue, 13 Oct 2020 13:45:59 +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 A0766B4006B for ; Tue, 13 Oct 2020 13:45:59 +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 09DDjtrX005996 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 75ADA1613AB for ; Tue, 13 Oct 2020 14:45:55 +0100 (BST) From: Andrew Rybchenko To: Date: Tue, 13 Oct 2020 14:45:21 +0100 Message-ID: <1602596753-32282-5-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-2.780200-8.000000-10 X-TMASE-MatchedRID: uv6ZDJWKxT6plamT4YpFU60gCFoXW3rv9fvWztwgm5MUFDkgqWz8Dup9 RpeIFYR42XHJ0L4jOIQs/31GzKkTsQihmwiXCMoGPwKTD1v8YV5MkOX0UoduuVVkJxysad/Ig7l N9LOvFDsKc4ljqLtffWgYGQdUi0E8XywERWyRD+6eAiCmPx4NwBnUJ0Ek6yhjxEHRux+uk8hxKp vEGAbTDo59f9aQe/k1YmPUBzhyOUoshbQjBnOpNpkvj0f7TL7GbGUThDbINIqPcQWRkU1xjZbj1 KVgz0HycrwzR2kvOt3NMq8SKT3uJhySoBCeolQDq8uPJC94SFgR06l6KId4N+omcwkrJL7n X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.780200-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25722.003 X-MDID: 1602596760-WlBUoJ4suFUE X-PPE-DISP: 1602596760;WlBUoJ4suFUE Subject: [dpdk-dev] [PATCH 04/36] common/sfc_efx/base: factor out MCDI wrapper to set LEDs 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" For consistency it is better to have separate MCDI wrappers. Make efx_phy_led_mode_t visible even if EFSYS_OPT_PHY_LED_CONTROL is disabled to be able to use it in the added wrapper arguments. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/ef10_phy.c | 92 ++++++++++++++++---------- drivers/common/sfc_efx/base/efx.h | 4 +- 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/drivers/common/sfc_efx/base/ef10_phy.c b/drivers/common/sfc_efx/base/ef10_phy.c index 0005870736..3d07c254bf 100644 --- a/drivers/common/sfc_efx/base/ef10_phy.c +++ b/drivers/common/sfc_efx/base/ef10_phy.c @@ -430,6 +430,56 @@ efx_mcdi_phy_set_link( return (0); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + + return (rc); +} + +static __checkReturn efx_rc_t +efx_mcdi_phy_set_led( + __in efx_nic_t *enp, + __in efx_phy_led_mode_t phy_led_mode) +{ + efx_mcdi_req_t req; + EFX_MCDI_DECLARE_BUF(payload, MC_CMD_SET_ID_LED_IN_LEN, + MC_CMD_SET_ID_LED_OUT_LEN); + unsigned int led_mode; + efx_rc_t rc; + + req.emr_cmd = MC_CMD_SET_ID_LED; + req.emr_in_buf = payload; + req.emr_in_length = MC_CMD_SET_ID_LED_IN_LEN; + req.emr_out_buf = payload; + req.emr_out_length = MC_CMD_SET_ID_LED_OUT_LEN; + + switch (phy_led_mode) { + case EFX_PHY_LED_DEFAULT: + led_mode = MC_CMD_LED_DEFAULT; + break; + case EFX_PHY_LED_OFF: + led_mode = MC_CMD_LED_OFF; + break; + case EFX_PHY_LED_ON: + led_mode = MC_CMD_LED_ON; + break; + default: + EFSYS_ASSERT(0); + led_mode = MC_CMD_LED_DEFAULT; + break; + } + + MCDI_IN_SET_DWORD(req, SET_ID_LED_IN_STATE, led_mode); + + efx_mcdi_execute(enp, &req); + + if (req.emr_rc != 0) { + rc = req.emr_rc; + goto fail1; + } + + return (0); + fail1: EFSYS_PROBE1(fail1, efx_rc_t, rc); @@ -441,15 +491,10 @@ 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 + efx_phy_led_mode_t phy_led_mode; boolean_t supported; efx_rc_t rc; @@ -477,40 +522,17 @@ ef10_phy_reconfigure( goto fail2; /* And set the blink mode */ - (void) memset(payload, 0, sizeof (payload)); - req.emr_cmd = MC_CMD_SET_ID_LED; - req.emr_in_buf = payload; - req.emr_in_length = MC_CMD_SET_ID_LED_IN_LEN; - req.emr_out_buf = payload; - req.emr_out_length = MC_CMD_SET_ID_LED_OUT_LEN; #if EFSYS_OPT_PHY_LED_CONTROL - switch (epp->ep_phy_led_mode) { - case EFX_PHY_LED_DEFAULT: - led_mode = MC_CMD_LED_DEFAULT; - break; - case EFX_PHY_LED_OFF: - led_mode = MC_CMD_LED_OFF; - break; - case EFX_PHY_LED_ON: - led_mode = MC_CMD_LED_ON; - break; - default: - EFSYS_ASSERT(0); - led_mode = MC_CMD_LED_DEFAULT; - } - - MCDI_IN_SET_DWORD(req, SET_ID_LED_IN_STATE, led_mode); + phy_led_mode = epp->ep_phy_led_mode; #else - MCDI_IN_SET_DWORD(req, SET_ID_LED_IN_STATE, MC_CMD_LED_DEFAULT); -#endif /* EFSYS_OPT_PHY_LED_CONTROL */ - - efx_mcdi_execute(enp, &req); + phy_led_mode = EFX_PHY_LED_DEFAULT; +#endif - if (req.emr_rc != 0) { - rc = req.emr_rc; + rc = efx_mcdi_phy_set_led(enp, phy_led_mode); + if (rc != 0) goto fail3; - } + out: return (0); diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index 07a7e3c952..a245acfe0f 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -1004,8 +1004,6 @@ extern __checkReturn efx_rc_t efx_phy_verify( __in efx_nic_t *enp); -#if EFSYS_OPT_PHY_LED_CONTROL - typedef enum efx_phy_led_mode_e { EFX_PHY_LED_DEFAULT = 0, EFX_PHY_LED_OFF, @@ -1014,6 +1012,8 @@ typedef enum efx_phy_led_mode_e { EFX_PHY_LED_NMODES } efx_phy_led_mode_t; +#if EFSYS_OPT_PHY_LED_CONTROL + LIBEFX_API extern __checkReturn efx_rc_t efx_phy_led_set(