DPDK patches and discussions
 help / color / mirror / Atom feed
From: Chaoyong He <chaoyong.he@corigine.com>
To: dev@dpdk.org
Cc: oss-drivers@corigine.com, Zerun Fu <zerun.fu@corigine.com>,
	Chaoyong He <chaoyong.he@corigine.com>,
	Long Wu <long.wu@corigine.com>,
	Peng Zhang <peng.zhang@corigine.com>
Subject: [PATCH 01/17] net/nfp: refactor speed configuration logic
Date: Mon, 24 Jun 2024 09:57:07 +0800	[thread overview]
Message-ID: <20240624015723.3712898-2-chaoyong.he@corigine.com> (raw)
In-Reply-To: <20240624015723.3712898-1-chaoyong.he@corigine.com>

From: Zerun Fu <zerun.fu@corigine.com>

The speed configuration logic will execute every time the
device start, even if the speed is not changed. Refactor
this part of logic to make sure it only executes when the
speed is really need to be changed.

Signed-off-by: Zerun Fu <zerun.fu@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
Reviewed-by: Long Wu <long.wu@corigine.com>
Reviewed-by: Peng Zhang <peng.zhang@corigine.com>
---
 drivers/net/nfp/nfp_ethdev.c | 100 +++++++++++++++++++++++++----------
 1 file changed, 73 insertions(+), 27 deletions(-)

diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c
index b04bc955b5..f4fd013a51 100644
--- a/drivers/net/nfp/nfp_ethdev.c
+++ b/drivers/net/nfp/nfp_ethdev.c
@@ -220,12 +220,68 @@ nfp_net_nfp4000_speed_configure_check(uint16_t port_id,
 	return 0;
 }
 
+static int
+nfp_net_speed_autoneg_set(struct nfp_net_hw_priv *hw_priv,
+		struct nfp_eth_table_port *eth_port)
+{
+	int ret;
+	struct nfp_nsp *nsp;
+
+	nsp = nfp_eth_config_start(hw_priv->pf_dev->cpp, eth_port->index);
+	if (nsp == NULL) {
+		PMD_DRV_LOG(ERR, "Could not get NSP.");
+		return -EIO;
+	}
+
+	ret = nfp_eth_set_aneg(nsp, NFP_ANEG_AUTO);
+	if (ret != 0) {
+		PMD_DRV_LOG(ERR, "Failed to set ANEG enable.");
+		nfp_eth_config_cleanup_end(nsp);
+		return ret;
+	}
+
+	return nfp_eth_config_commit_end(nsp);
+}
+
+static int
+nfp_net_speed_fixed_set(struct nfp_net_hw_priv *hw_priv,
+		struct nfp_eth_table_port *eth_port,
+		uint32_t configure_speed)
+{
+	int ret;
+	struct nfp_nsp *nsp;
+
+	nsp = nfp_eth_config_start(hw_priv->pf_dev->cpp, eth_port->index);
+	if (nsp == NULL) {
+		PMD_DRV_LOG(ERR, "Could not get NSP.");
+		return -EIO;
+	}
+
+	ret = nfp_eth_set_aneg(nsp, NFP_ANEG_DISABLED);
+	if (ret != 0) {
+		PMD_DRV_LOG(ERR, "Failed to set ANEG disable.");
+		goto config_cleanup;
+	}
+
+	ret = nfp_eth_set_speed(nsp, configure_speed);
+	if (ret != 0) {
+		PMD_DRV_LOG(ERR, "Failed to set speed.");
+		goto config_cleanup;
+	}
+
+	return nfp_eth_config_commit_end(nsp);
+
+config_cleanup:
+	nfp_eth_config_cleanup_end(nsp);
+
+	return ret;
+}
+
 static int
 nfp_net_speed_configure(struct rte_eth_dev *dev)
 {
 	int ret;
 	uint32_t speed_capa;
-	struct nfp_nsp *nsp;
 	uint32_t link_speeds;
 	uint32_t configure_speed;
 	struct nfp_eth_table_port *eth_port;
@@ -260,40 +316,30 @@ nfp_net_speed_configure(struct rte_eth_dev *dev)
 		}
 	}
 
-	nsp = nfp_eth_config_start(hw_priv->pf_dev->cpp, eth_port->index);
-	if (nsp == NULL) {
-		PMD_DRV_LOG(ERR, "Couldn't get NSP.");
-		return -EIO;
-	}
+	if (configure_speed == RTE_ETH_LINK_SPEED_AUTONEG) {
+		if (!eth_port->supp_aneg)
+			return 0;
 
-	if (link_speeds == RTE_ETH_LINK_SPEED_AUTONEG) {
-		if (eth_port->supp_aneg) {
-			ret = nfp_eth_set_aneg(nsp, NFP_ANEG_AUTO);
-			if (ret != 0) {
-				PMD_DRV_LOG(ERR, "Failed to set ANEG enable.");
-				goto config_cleanup;
-			}
-		}
-	} else {
-		ret = nfp_eth_set_aneg(nsp, NFP_ANEG_DISABLED);
+		if (eth_port->aneg == NFP_ANEG_AUTO)
+			return 0;
+
+		ret = nfp_net_speed_autoneg_set(hw_priv, eth_port);
 		if (ret != 0) {
-			PMD_DRV_LOG(ERR, "Failed to set ANEG disable.");
-			goto config_cleanup;
+			PMD_DRV_LOG(ERR, "Failed to set speed autoneg.");
+			return ret;
 		}
+	} else {
+		if (eth_port->aneg == NFP_ANEG_DISABLED && configure_speed == eth_port->speed)
+			return 0;
 
-		ret = nfp_eth_set_speed(nsp, configure_speed);
+		ret = nfp_net_speed_fixed_set(hw_priv, eth_port, configure_speed);
 		if (ret != 0) {
-			PMD_DRV_LOG(ERR, "Failed to set speed.");
-			goto config_cleanup;
+			PMD_DRV_LOG(ERR, "Failed to set speed fixed.");
+			return ret;
 		}
 	}
 
-	return nfp_eth_config_commit_end(nsp);
-
-config_cleanup:
-	nfp_eth_config_cleanup_end(nsp);
-
-	return ret;
+	return 0;
 }
 
 static int
-- 
2.39.1


  reply	other threads:[~2024-06-24  1:57 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-24  1:57 [PATCH 00/17] NFP bugfix Chaoyong He
2024-06-24  1:57 ` Chaoyong He [this message]
2024-06-24  1:57 ` [PATCH 02/17] net/nfp: refactor device speed update logic Chaoyong He
2024-06-24  1:57 ` [PATCH 03/17] net/nfp: fix link status display problem Chaoyong He
2024-06-24  1:57 ` [PATCH 04/17] net/nfp: fix coredump caused by firmware abnormal cleanup Chaoyong He
2024-06-24  1:57 ` [PATCH 05/17] net/nfp: forbid offload flow rules with empty action list Chaoyong He
2024-06-24  1:57 ` [PATCH 06/17] net/nfp: remove redundancy function call Chaoyong He
2024-06-24  1:57 ` [PATCH 07/17] net/nfp: fix flow rule match data problem Chaoyong He
2024-06-24  1:57 ` [PATCH 08/17] net/nfp: fix flow rule action " Chaoyong He
2024-06-24  1:57 ` [PATCH 09/17] net/nfp: enlarge the flow rules limitation Chaoyong He
2024-06-24  1:57 ` [PATCH 10/17] net/nfp: enlarge flow hash table size Chaoyong He
2024-06-24  1:57 ` [PATCH 11/17] net/nfp: fix flow position index problem Chaoyong He
2024-06-24  1:57 ` [PATCH 12/17] net/nfp: fix getting firmware version Chaoyong He
2024-06-24  1:57 ` [PATCH 13/17] doc: update the metadata description section Chaoyong He
2024-06-24  1:57 ` [PATCH 14/17] net/nfp: remove the unneeded logic Chaoyong He
2024-06-24  1:57 ` [PATCH 15/17] net/nfp: adapts the reverse sequence card Chaoyong He
2024-06-24  1:57 ` [PATCH 16/17] net/nfp: fix null pointer dereferences Chaoyong He
2024-06-24  1:57 ` [PATCH 17/17] net/nfp: fix port action core dump Chaoyong He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240624015723.3712898-2-chaoyong.he@corigine.com \
    --to=chaoyong.he@corigine.com \
    --cc=dev@dpdk.org \
    --cc=long.wu@corigine.com \
    --cc=oss-drivers@corigine.com \
    --cc=peng.zhang@corigine.com \
    --cc=zerun.fu@corigine.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).