From patchwork Mon Feb 22 19:18:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 88088 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 9972DA034F; Mon, 22 Feb 2021 20:18:31 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 21BC822A28A; Mon, 22 Feb 2021 20:18:31 +0100 (CET) Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) by mails.dpdk.org (Postfix) with ESMTP id 7B89B22A283 for ; Mon, 22 Feb 2021 20:18:30 +0100 (CET) Received: by mail-pf1-f180.google.com with SMTP id z6so7219326pfq.0 for ; Mon, 22 Feb 2021 11:18:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:mime-version; bh=CxtEoy3kMCglBwTvTMXV60qw4KQIuRa/6VS7XmoSy8E=; b=COxQc44uvQAc+Ok+wlmZoi8n2DrbeOIBMv4969xCg03rNwd3RteI7isCMSYBZ20WDS A+5eUPcJOP3onj/jUoxErh3IhgQ1kjjEt8/gYnDTIIeluYDSlJV+0OdmfBlmD74kj2gg j+X/E6FJbMqwzdcIKIl1WN+JaZOjzTvD0RaPE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version; bh=CxtEoy3kMCglBwTvTMXV60qw4KQIuRa/6VS7XmoSy8E=; b=hAl070NNgZLTFkegQwjoJ+1PtPQsP2sapJGFHuTBPoHtjvo0uP8LkIRiFY4wgAkN1F DNu9u9tlOx2wgKQaEqLExIhfT9lEfXBSWcmBQceT/ylsAR/HuZuGdaDzo8st6PRbrQwt ivQfhF62f/7XGpVjkeGOcImapTHh8MjWl7v1Q5Mx3t9GeAnw2yJqJlu0som1nGmN+S/o itGij+W+0nloZ83Ri1Ph4degw+4KYBmpMND107Ei1yMU8wFLeysYSgd6G6UQCcpa+XkZ 5+l/OS0zF8HRf/E6iEfn7v3YWA6Sl4l5rePAstro0lRJ3xe7iPKVh5ggjVSkQe0t2JfX 0Gxg== X-Gm-Message-State: AOAM532KrvTWWesMNrcSpy2AgEese637Yus5Q0kPJhIaVP4EeOo336mV nojV2xZ0ghnlbIW2IHUgsS24d8t6a+8LWrERSAXLec5+eHx2gLqohv+rptAZlvPVj4xOeuuw9u0 XM/08WAkBA+g7CgggC2c2apmiGvFUV6ZTVnFa/DyhQezVdRxZ5SuJRjVlxJ4dcal88g== X-Google-Smtp-Source: ABdhPJxT/7+Io0g1QUkrjyn1FZJUSZUzyhdKRJAnlVBwROQHMMK+/AbqklHhQNZ4P12NEg551Q64Wg== X-Received: by 2002:a63:e5e:: with SMTP id 30mr21682122pgo.181.1614021508824; Mon, 22 Feb 2021 11:18:28 -0800 (PST) Received: from C02VPB22HTD6.wifi.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id e1sm215276pjm.12.2021.02.22.11.18.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Feb 2021 11:18:27 -0800 (PST) From: Ajit Khaparde To: dev@dpdk.org Cc: ferruh.yigit@intel.com Date: Mon, 22 Feb 2021 11:18:24 -0800 Message-Id: <20210222191824.40230-1-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH] app/testpmd: add support for forced ethernet speed 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 Sender: "dev" Add support for forced ethernet speed setting. Currently testpmd tries to configure the Ethernet port in autoneg mode. It is not possible to set the Ethernet port to a specific speed while starting testpmd. In some cases capability to configure a forced speed for the Ethernet port during initialization may be necessary. This patch tries to add this support. The patch assumes full duplex setting and does not attempt to change that. So speeds like 10M, 100M are not configurable using this method. The command line to configure a forced speed of 10G: dpdk-testpmd -c 0xff -- -i --eth-link-speed 10000 The command line to configure a forced speed of 50G: dpdk-testpmd -c 0xff -- -i --eth-link-speed 50000 Signed-off-by: Ajit Khaparde --- app/test-pmd/parameters.c | 42 +++++++++++++++++++++++++++ app/test-pmd/testpmd.c | 4 +++ app/test-pmd/testpmd.h | 1 + doc/guides/testpmd_app_ug/run_app.rst | 11 +++++++ 4 files changed, 58 insertions(+) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index c8acd5d1b7..e10f7d38fb 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -224,6 +224,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n " " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --eth-link-speed: forced link speed.\n"); } #ifdef RTE_LIB_CMDLINE @@ -485,6 +486,41 @@ parse_event_printing_config(const char *optarg, int enable) return 0; } +static int +parse_link_speed(int n) +{ + uint32_t speed; + + switch (n) { + case 1000: + speed = ETH_LINK_SPEED_1G; + break; + case 10000: + speed = ETH_LINK_SPEED_10G; + break; + case 25000: + speed = ETH_LINK_SPEED_25G; + break; + case 40000: + speed = ETH_LINK_SPEED_40G; + break; + case 50000: + speed = ETH_LINK_SPEED_50G; + break; + case 100000: + speed = ETH_LINK_SPEED_100G; + break; + case 200000: + speed = ETH_LINK_SPEED_200G; + break; + default: + speed = ETH_LINK_SPEED_AUTONEG; + break; + } + + return speed; +} + void launch_args_parse(int argc, char** argv) { @@ -605,6 +641,7 @@ launch_args_parse(int argc, char** argv) { "rx-mq-mode", 1, 0, 0 }, { "record-core-cycles", 0, 0, 0 }, { "record-burst-stats", 0, 0, 0 }, + { "eth-link-speed", 1, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1366,6 +1403,11 @@ launch_args_parse(int argc, char** argv) record_core_cycles = 1; if (!strcmp(lgopts[opt_idx].name, "record-burst-stats")) record_burst_stats = 1; + if (!strcmp(lgopts[opt_idx].name, "eth-link-speed")) { + n = atoi(optarg); + if (n >= 0 && parse_link_speed(n) >= 0) + eth_link_speed = parse_link_speed(n); + } break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index caa711d6f3..9434e335a0 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -535,6 +535,8 @@ uint16_t gso_max_segment_size = RTE_ETHER_MAX_LEN - RTE_ETHER_CRC_LEN; /* Holds the registered mbuf dynamic flags names. */ char dynf_names[64][RTE_MBUF_DYN_NAMESIZE]; +uint32_t eth_link_speed; + /* * Helper function to check if socket is already discovered. * If yes, return positive value. If not, return zero. @@ -1484,6 +1486,8 @@ init_config(void) port->tx_conf[k].offloads = port->dev_conf.txmode.offloads; + port->dev_conf.link_speeds = eth_link_speed; + /* set flag to initialize port/queue */ port->need_reconfig = 1; port->need_reconfig_queues = 1; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 60ddeb8f13..a3cd4a0e16 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -351,6 +351,7 @@ extern bool setup_on_probe_event; /**< disabled by port setup-on iterator */ extern uint8_t hot_plug; /**< enable by "--hot-plug" parameter */ extern int do_mlockall; /**< set by "--mlockall" or "--no-mlockall" parameter */ extern uint8_t clear_ptypes; /**< disabled by set ptype cmd */ +extern uint32_t eth_link_speed; #ifdef RTE_LIBRTE_IXGBE_BYPASS extern uint32_t bypass_timeout; /**< Store the NIC bypass watchdog timeout */ diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index 6745072329..a856f52736 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -536,3 +536,14 @@ The command line options are: bit 1 - two hairpin ports paired bit 0 - two hairpin ports loop The default value is 0. Hairpin will use single port mode and implicit Tx flow mode. + +* ``--eth-link-speed`` + + Set a forced link speed to the ethernet port. + 1000 - 1Gbps + 10000 - 10Gbps + 25000 - 25Gbps + 40000 - 40Gbps + 50000 - 50Gbps + 100000 - 100Gbps + 200000 - 200Gbps