From patchwork Wed Mar 1 11:16:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 124606 X-Patchwork-Delegate: ferruh.yigit@amd.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 1F30841DA8; Wed, 1 Mar 2023 12:16:57 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0FF674114A; Wed, 1 Mar 2023 12:16:57 +0100 (CET) Received: from wout3-smtp.messagingengine.com (wout3-smtp.messagingengine.com [64.147.123.19]) by mails.dpdk.org (Postfix) with ESMTP id 0726B4113C for ; Wed, 1 Mar 2023 12:16:55 +0100 (CET) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id A5FF8320092A; Wed, 1 Mar 2023 06:16:52 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Wed, 01 Mar 2023 06:16:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm1; t=1677669412; x= 1677755812; bh=spTD1l+QwPCIZ0IYK3NnY+rOc0JzEXh5B/Jid673s0E=; b=R DGVBUsP1WQ9vKNl0GOje+tk8/7z8HlPMMCgAV0co2nY8NBkqTmxSkFIZBmVGmzuB oxSOS4sXWmLYJbJsVkjxdr1ZW0GXL1Po3FjAqjv6/2FrQOG1OGiHlbWbAs4pjCwm FmyewLN0AT9dVOvEpSsEdWhWgqu1+UHdczIAumNhn0xtI20t9B5H6krlazOTLrmR 29sqnvF0fz9jDcEhswovyeScRmeNcMrRjgCDSR6jiBoRGbHYwff9SmdymRoPRkrj UOeR3rNdICUPW0SA7cdfeOZuroD1QLBc7f06gN/G79vdTNs/2wibm3vkZQWe26Ax GYWTQR/ZIItZQL0WjntSw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1677669412; x= 1677755812; bh=spTD1l+QwPCIZ0IYK3NnY+rOc0JzEXh5B/Jid673s0E=; b=G R3wdcRSEKud95gtrbhwPkZ8yp08niOQU0f3GYEk+BcC8T9rZQKQteBG8G2bSfJOo qSvQLhH07VEO61ua4O4VUkWy1Mdc4SyDjIPiSyL/pWk+69i19TyJSBDcdO2FwaV4 ZlKmf7VBj5VstQnjhwrkDy2xlSqKsvaoeb6A1uJGjO1oeZi9P2g2o2Vt40eRc1gW bScoI3EvoNj4DVDtSlqXGUpbvMikTLMXm/E9A6HnBflLEhwoADVBzzVvShe3Mpm/ Bn4Zg9jhxxa6q1wj27jUg4/tJPHlGaTvodWkNzXKsjJXhFU3dMtq41JTudahUTBG 9xDfmtZyiDL4mO5FL9i+g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrudelhedgudekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvvefufffkofgjfhggtgfgsehtkeertdertdejnecuhfhrohhmpefvhhho mhgrshcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqne cuggftrfgrthhtvghrnheptdeiffffgeefteelhfekueetueduffejgfelvedtieejudek gfevheetheehgeejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh hfrhhomhepthhhohhmrghssehmohhnjhgrlhhonhdrnhgvth X-ME-Proxy: Feedback-ID: i47234305:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 1 Mar 2023 06:16:49 -0500 (EST) From: Thomas Monjalon To: dev@dpdk.org Cc: Bruce Richardson , Jerin Jacob , Ajit Khaparde , Raslan Darawsheh , David Marchand , =?utf-8?q?Morten_Br=C3=B8rup?= , Andrew Rybchenko , Chengwen Feng , Aman Singh , Yuying Zhang , Ferruh Yigit , Maxime Coquelin , Chenbo Xia Subject: [PATCH v2] ethdev: add link speed 400G Date: Wed, 1 Mar 2023 12:16:42 +0100 Message-Id: <20230301111642.3059321-1-thomas@monjalon.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230216104350.1639394-1-thomas@monjalon.net> References: <20230216104350.1639394-1-thomas@monjalon.net> 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 There are some devices supporting 400G speed, and it is well standardized in IEEE. Signed-off-by: Thomas Monjalon Reviewed-by: Morten Brørup Acked-by: Andrew Rybchenko Acked-by: Chengwen Feng Acked-by: Ajit Khaparde Acked-by: Ferruh Yigit --- v2: - update testpmd command - add release note --- app/test-pmd/cmdline.c | 12 +++++++----- app/test-pmd/config.c | 2 ++ app/test-pmd/parameters.c | 3 +++ app/test/test_ethdev_link.c | 3 ++- doc/guides/rel_notes/release_23_03.rst | 2 ++ doc/guides/testpmd_app_ug/run_app.rst | 1 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 +- drivers/net/virtio/virtio_ethdev.c | 2 ++ lib/ethdev/rte_ethdev.c | 6 ++++++ lib/ethdev/rte_ethdev.h | 2 ++ 10 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 151f356224..02c72d06b7 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -653,7 +653,7 @@ static void cmd_help_long_parsed(void *parsed_result, " Detach physical or virtual dev by port_id\n\n" "port config (port_id|all)" - " speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto)" + " speed (10|100|1000|10000|25000|40000|50000|100000|200000|400000|auto)" " duplex (half|full|auto)\n" " Set speed and duplex for all ports or port_id\n\n" @@ -1356,6 +1356,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed) *speed = RTE_ETH_LINK_SPEED_100G; } else if (!strcmp(speedstr, "200000")) { *speed = RTE_ETH_LINK_SPEED_200G; + } else if (!strcmp(speedstr, "400000")) { + *speed = RTE_ETH_LINK_SPEED_400G; } else if (!strcmp(speedstr, "auto")) { *speed = RTE_ETH_LINK_SPEED_AUTONEG; } else { @@ -1406,7 +1408,7 @@ static cmdline_parse_token_string_t cmd_config_speed_all_item1 = TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item1, "speed"); static cmdline_parse_token_string_t cmd_config_speed_all_value1 = TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, value1, - "10#100#1000#10000#25000#40000#50000#100000#200000#auto"); + "10#100#1000#10000#25000#40000#50000#100000#200000#400000#auto"); static cmdline_parse_token_string_t cmd_config_speed_all_item2 = TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item2, "duplex"); static cmdline_parse_token_string_t cmd_config_speed_all_value2 = @@ -1417,7 +1419,7 @@ static cmdline_parse_inst_t cmd_config_speed_all = { .f = cmd_config_speed_all_parsed, .data = NULL, .help_str = "port config all speed " - "10|100|1000|10000|25000|40000|50000|100000|200000|auto duplex " + "10|100|1000|10000|25000|40000|50000|100000|200000|400000|auto duplex " "half|full|auto", .tokens = { (void *)&cmd_config_speed_all_port, @@ -1481,7 +1483,7 @@ static cmdline_parse_token_string_t cmd_config_speed_specific_item1 = "speed"); static cmdline_parse_token_string_t cmd_config_speed_specific_value1 = TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, value1, - "10#100#1000#10000#25000#40000#50000#100000#200000#auto"); + "10#100#1000#10000#25000#40000#50000#100000#200000#400000#auto"); static cmdline_parse_token_string_t cmd_config_speed_specific_item2 = TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, item2, "duplex"); @@ -1493,7 +1495,7 @@ static cmdline_parse_inst_t cmd_config_speed_specific = { .f = cmd_config_speed_specific_parsed, .data = NULL, .help_str = "port config speed " - "10|100|1000|10000|25000|40000|50000|100000|200000|auto duplex " + "10|100|1000|10000|25000|40000|50000|100000|200000|400000|auto duplex " "half|full|auto", .tokens = { (void *)&cmd_config_speed_specific_port, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 4121c5c9bb..018536f177 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -612,6 +612,8 @@ device_infos_display_speeds(uint32_t speed_capa) printf(" 100 Gbps "); if (speed_capa & RTE_ETH_LINK_SPEED_200G) printf(" 200 Gbps "); + if (speed_capa & RTE_ETH_LINK_SPEED_400G) + printf(" 400 Gbps "); } void diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e734ad9a02..3b37809baf 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -568,6 +568,9 @@ parse_link_speed(int n) case 200000: speed |= RTE_ETH_LINK_SPEED_200G; break; + case 400000: + speed |= RTE_ETH_LINK_SPEED_400G; + break; case 100: case 10: default: diff --git a/app/test/test_ethdev_link.c b/app/test/test_ethdev_link.c index 6248aea49a..ab52385a12 100644 --- a/app/test/test_ethdev_link.c +++ b/app/test/test_ethdev_link.c @@ -54,7 +54,7 @@ test_link_status_up_default(void) "string with HDX"); /* test max str len */ - link_status.link_speed = RTE_ETH_SPEED_NUM_200G; + link_status.link_speed = RTE_ETH_SPEED_NUM_400G; link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX; link_status.link_autoneg = RTE_ETH_LINK_AUTONEG; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); @@ -130,6 +130,7 @@ test_link_speed_all_values(void) { "56 Gbps", RTE_ETH_SPEED_NUM_56G }, { "100 Gbps", RTE_ETH_SPEED_NUM_100G }, { "200 Gbps", RTE_ETH_SPEED_NUM_200G }, + { "400 Gbps", RTE_ETH_SPEED_NUM_400G }, { "Unknown", RTE_ETH_SPEED_NUM_UNKNOWN }, { "Invalid", 50505 } }; diff --git a/doc/guides/rel_notes/release_23_03.rst b/doc/guides/rel_notes/release_23_03.rst index 49c18617a5..ef2629a1ca 100644 --- a/doc/guides/rel_notes/release_23_03.rst +++ b/doc/guides/rel_notes/release_23_03.rst @@ -73,6 +73,8 @@ New Features Added power monitor and wake up API support with WFE/SVE instructions for Arm architecture. +* **Added Ethernet link speed for 400 Gb/s.** + * **Added support for mapping a queue with an aggregated port.** * Introduced new function ``rte_eth_dev_count_aggr_ports()`` diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index f85f323033..57b23241cf 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -394,6 +394,7 @@ The command line options are: 50000 - 50Gbps 100000 - 100Gbps 200000 - 200Gbps + 400000 - 400Gbps ... * ``--disable-link-check`` diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 5a88933635..8f23847859 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -2048,7 +2048,7 @@ port config - speed Set the speed and duplex mode for all ports or a specific port:: - testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto) \ + testpmd> port config (port_id|all) speed (10|100|1000|10000|25000|40000|50000|100000|200000|400000|auto) \ duplex (half|full|auto) port config - queues/descriptors diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 0103d95920..dc6856d749 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -2046,6 +2046,8 @@ virtio_dev_speed_capa_get(uint32_t speed) return RTE_ETH_LINK_SPEED_100G; case RTE_ETH_SPEED_NUM_200G: return RTE_ETH_LINK_SPEED_200G; + case RTE_ETH_SPEED_NUM_400G: + return RTE_ETH_LINK_SPEED_400G; default: return 0; } diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 0266cc82ac..3814c202cd 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -978,6 +978,9 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex) case RTE_ETH_SPEED_NUM_200G: ret = RTE_ETH_LINK_SPEED_200G; break; + case RTE_ETH_SPEED_NUM_400G: + ret = RTE_ETH_LINK_SPEED_400G; + break; default: ret = 0; } @@ -2882,6 +2885,9 @@ rte_eth_link_speed_to_str(uint32_t link_speed) case RTE_ETH_SPEED_NUM_200G: ret = "200 Gbps"; break; + case RTE_ETH_SPEED_NUM_400G: + ret = "400 Gbps"; + break; case RTE_ETH_SPEED_NUM_UNKNOWN: ret = "Unknown"; break; diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index 049641d57c..d40cb22dae 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -304,6 +304,7 @@ struct rte_eth_stats { #define RTE_ETH_LINK_SPEED_56G RTE_BIT32(13) /**< 56 Gbps */ #define RTE_ETH_LINK_SPEED_100G RTE_BIT32(14) /**< 100 Gbps */ #define RTE_ETH_LINK_SPEED_200G RTE_BIT32(15) /**< 200 Gbps */ +#define RTE_ETH_LINK_SPEED_400G RTE_BIT32(16) /**< 400 Gbps */ /**@}*/ /**@{@name Link speed @@ -323,6 +324,7 @@ struct rte_eth_stats { #define RTE_ETH_SPEED_NUM_56G 56000 /**< 56 Gbps */ #define RTE_ETH_SPEED_NUM_100G 100000 /**< 100 Gbps */ #define RTE_ETH_SPEED_NUM_200G 200000 /**< 200 Gbps */ +#define RTE_ETH_SPEED_NUM_400G 400000 /**< 400 Gbps */ #define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */ /**@}*/