From patchwork Fri Jun 2 07:57:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Aube X-Patchwork-Id: 127953 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BAD4B42C0E; Fri, 2 Jun 2023 09:57:48 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A728A40ED8; Fri, 2 Jun 2023 09:57:48 +0200 (CEST) Received: from obconseil.eu (obconseil.eu [91.224.149.111]) by mails.dpdk.org (Postfix) with ESMTP id D6AFA406B8 for ; Fri, 2 Jun 2023 09:57:47 +0200 (CEST) Received: by obconseil.eu (OpenSMTPD) with ESMTP id e4b79d55; Fri, 2 Jun 2023 09:57:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=jaube.fr; h=from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=default; bh=mYJ0B3Gdo d23Qv2c4tkTBCFzAbg=; b=lQSNnGqPrTj1BtYRjO2qjsrXeIH05ak14uHNr53OF 5SOCYTuWqNRMRtzC/XY21PxvVJDfGtL8ap/LUAz9bX6zDcvlJZ+qXTlFXpbacO/a aVekgxQXpsDHxeU0XAnMR4TPEv8UEnCztWzNOIqV//Ix96pCmNwtoHMgu7yusnxd Jo= Received: from router.ob (i19-lef02-th2-212-194-241-67.ft.lns.abo.bbox.fr [212.194.241.67]) by obconseil.eu (OpenSMTPD) with ESMTPSA id 67f39191 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 2 Jun 2023 09:57:47 +0200 (CEST) From: Julien Aube To: dev@dpdk.org Cc: Julien Aube Subject: [PATCH v4] net/bnx2x: support 2.5Gbps Date: Fri, 2 Jun 2023 09:57:45 +0200 Message-Id: <20230602075745.6790-1-julien_dpdk@jaube.fr> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230601102141.56932-1-julien_dpdk@jaube.fr> References: <20230601102141.56932-1-julien_dpdk@jaube.fr> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org - add support for 2500baseX_Full in addition to 1000baseT_Full. For 2.5Gbps speed, HSGMII mode shall be enabled in serdes. - add the possibility to support SC connectors on SFP (GPON are mostly SC) - change the initialisation time from 60ms to 1800ms (for xPON-Based SFP) This has been tested with GPON's ONU SFP but requires a specific firmware configuration described in the documentation. Signed-off-by: Julien Aube --- .mailmap | 1 + doc/guides/nics/bnx2x.rst | 4 ++++ drivers/net/bnx2x/elink.c | 19 +++++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.mailmap b/.mailmap index db85cc66c6..cb689ef751 100644 --- a/.mailmap +++ b/.mailmap @@ -666,6 +666,7 @@ JP Lee Juan Antonio Montesinos Juhamatti Kuusisaari Juho Snellman +Julien Aube Julien Castets Julien Courtat Julien Cretin diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst index 788a6dac08..f19784db2c 100644 --- a/doc/guides/nics/bnx2x.rst +++ b/doc/guides/nics/bnx2x.rst @@ -22,6 +22,7 @@ BNX2X PMD has support for: - Promiscuous mode - Port hardware statistics - SR-IOV VF +- Experimental 2.5Gbps support Non-supported Features ---------------------- @@ -72,6 +73,9 @@ Prerequisites `linux-firmware git repository `_ to get the required firmware. +- 2.5Gbps speed currently require that the firmware's nvm configuration number 7 / 35 (first port) and 36 (second port) are set to 0x70 + for 1G/2.5G/10G support . This can be done for EFI or DOS using EDIAG tool from Broadcom. + Pre-Installation Configuration ------------------------------ diff --git a/drivers/net/bnx2x/elink.c b/drivers/net/bnx2x/elink.c index 43fbf04ece..2c81f85b96 100644 --- a/drivers/net/bnx2x/elink.c +++ b/drivers/net/bnx2x/elink.c @@ -867,6 +867,7 @@ typedef elink_status_t (*read_sfp_module_eeprom_func_p)(struct elink_phy *phy, #define ELINK_SFP_EEPROM_CON_TYPE_ADDR 0x2 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN 0x0 + #define ELINK_SFP_EEPROM_CON_TYPE_VAL_SC 0x1 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_LC 0x7 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22 @@ -5069,6 +5070,15 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy, 0x1000); ELINK_DEBUG_P0(sc, "set SGMII AUTONEG"); } else { + /* Note that 2.5G works only when used with 1G advertisement */ + if (fiber_mode && phy->req_line_speed == SPEED_2500 && + (phy->speed_cap_mask & + (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G | + PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))) { + elink_cl45_write(sc, phy, MDIO_WC_DEVAD, + MDIO_WC_REG_SERDESDIGITAL_MISC1, 0x6010); + } + elink_cl45_read(sc, phy, MDIO_WC_DEVAD, MDIO_WC_REG_COMBO_IEEE0_MIICTRL, &val16); val16 &= 0xcebf; @@ -5079,6 +5089,7 @@ static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy, val16 |= 0x2000; break; case ELINK_SPEED_1000: + case ELINK_SPEED_2500: val16 |= 0x0040; break; default: @@ -9138,6 +9149,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy, break; } case ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN: + case ELINK_SFP_EEPROM_CON_TYPE_VAL_SC: case ELINK_SFP_EEPROM_CON_TYPE_VAL_LC: case ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45: check_limiting_mode = 1; @@ -9151,7 +9163,8 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy, (val[ELINK_SFP_EEPROM_1G_COMP_CODE_ADDR] != 0)) { ELINK_DEBUG_P0(sc, "1G SFP module detected"); phy->media_type = ELINK_ETH_PHY_SFP_1G_FIBER; - if (phy->req_line_speed != ELINK_SPEED_1000) { + if (phy->req_line_speed != ELINK_SPEED_1000 && + phy->req_line_speed != ELINK_SPEED_2500) { uint8_t gport = params->port; phy->req_line_speed = ELINK_SPEED_1000; if (!CHIP_IS_E1x(sc)) { @@ -9324,7 +9337,7 @@ static elink_status_t elink_wait_for_sfp_module_initialized( * some phys type ( e.g. JDSU ) */ - for (timeout = 0; timeout < 60; timeout++) { + for (timeout = 0; timeout < 1800; timeout++) { if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) rc = elink_warpcore_read_sfp_module_eeprom( phy, params, ELINK_I2C_DEV_ADDR_A0, 1, 1, &val, @@ -12614,6 +12627,7 @@ static const struct elink_phy phy_warpcore = { ELINK_SUPPORTED_100baseT_Half | ELINK_SUPPORTED_100baseT_Full | ELINK_SUPPORTED_1000baseT_Full | + ELINK_SUPPORTED_2500baseX_Full | ELINK_SUPPORTED_1000baseKX_Full | ELINK_SUPPORTED_10000baseT_Full | ELINK_SUPPORTED_10000baseKR_Full | @@ -13156,6 +13170,7 @@ static elink_status_t elink_populate_int_phy(struct bnx2x_softc *sc, break; case PORT_HW_CFG_NET_SERDES_IF_SFI: phy->supported &= (ELINK_SUPPORTED_1000baseT_Full | + ELINK_SUPPORTED_2500baseX_Full | ELINK_SUPPORTED_10000baseT_Full | ELINK_SUPPORTED_FIBRE | ELINK_SUPPORTED_Pause |