From patchwork Mon Feb 7 07:29:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 106941 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 C3C11A034F; Mon, 7 Feb 2022 08:31:15 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 471514118A; Mon, 7 Feb 2022 08:30:23 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 25C294115F for ; Mon, 7 Feb 2022 08:30:20 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 216LsOhK030467 for ; Sun, 6 Feb 2022 23:30:19 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0220; bh=YjmvKLBYCF2iPDRI+O+uE699mRBKS4ePnudkDlpTWeg=; b=hALbjS6Av7cKghg/ps4Ch595GsAyEKCKMqb1jA8NfTkuUi/23mHA8LqC4EiEgaqkJAe8 UEUGUlqmoAVNLrn6IXCN2FGFI55KMo63O5Xsr4bNcR+xHLrsLB6qyCSq3+RDnzRECIIf +Kpp7ZIDl8tFHHNdyQz8XXVczM0wuMjAIC5aTPK8tatmtqN01EuO2Ap7yldGc0jBr+lA WodUdhUHTcfeFxCC/OGuN/p73lT6ApsqGs5dGHSmoW4Dl59Zy9ip8CD/0O0lKpqvocvE PVfzJGA/5LPW0jJu/kemmAuwPoIp2l5EB2GqITzcNdGMW9bWG4iqyPWIhuob85UkUPdR TQ== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3e1smr4p4b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sun, 06 Feb 2022 23:30:19 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 6 Feb 2022 23:30:14 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Sun, 6 Feb 2022 23:30:14 -0800 Received: from hyd1588t430.marvell.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id CCBF93F7068; Sun, 6 Feb 2022 23:30:12 -0800 (PST) From: Nithin Dabilpuram To: , Nithin Dabilpuram , "Kiran Kumar K" , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH 10/20] net/cnxk: added Rx metadata negotiate operation Date: Mon, 7 Feb 2022 12:59:22 +0530 Message-ID: <20220207072932.22409-10-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20220207072932.22409-1-ndabilpuram@marvell.com> References: <20220207072932.22409-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: xDCLpEc7jh71V5BALCA8dd4Dvv0-Q-wn X-Proofpoint-ORIG-GUID: xDCLpEc7jh71V5BALCA8dd4Dvv0-Q-wn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-02-07_02,2022-02-03_01,2021-12-02_01 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 From: Satha Rao Added rx_metadata_negotiate api to enable mark update RX offload. Removed software logic to enable/disable mark update inside flow create/destroy apis. Signed-off-by: Satha Rao --- drivers/net/cnxk/cn10k_ethdev.c | 26 ++++++++++++++++++++++++++ drivers/net/cnxk/cn10k_rte_flow.c | 20 ++------------------ drivers/net/cnxk/cn9k_ethdev.c | 25 +++++++++++++++++++++++++ drivers/net/cnxk/cn9k_rte_flow.c | 20 ++------------------ drivers/net/cnxk/cnxk_ethdev.h | 1 + 5 files changed, 56 insertions(+), 36 deletions(-) diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_ethdev.c index 8378cbf..169e70e 100644 --- a/drivers/net/cnxk/cn10k_ethdev.c +++ b/drivers/net/cnxk/cn10k_ethdev.c @@ -39,6 +39,9 @@ nix_rx_offload_flags(struct rte_eth_dev *eth_dev) if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) flags |= NIX_RX_OFFLOAD_SECURITY_F; + if (dev->rx_mark_update) + flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; + return flags; } @@ -470,6 +473,27 @@ cn10k_nix_dev_start(struct rte_eth_dev *eth_dev) return 0; } +static int +cn10k_nix_rx_metadata_negotiate(struct rte_eth_dev *eth_dev, uint64_t *features) +{ + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); + + *features &= + (RTE_ETH_RX_METADATA_USER_FLAG | RTE_ETH_RX_METADATA_USER_MARK); + + if (*features) { + dev->rx_offload_flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; + dev->rx_mark_update = true; + } else { + dev->rx_offload_flags &= ~NIX_RX_OFFLOAD_MARK_UPDATE_F; + dev->rx_mark_update = false; + } + + cn10k_eth_set_rx_function(eth_dev); + + return 0; +} + /* Update platform specific eth dev ops */ static void nix_eth_dev_ops_override(void) @@ -489,6 +513,8 @@ nix_eth_dev_ops_override(void) cnxk_eth_dev_ops.dev_ptypes_set = cn10k_nix_ptypes_set; cnxk_eth_dev_ops.timesync_enable = cn10k_nix_timesync_enable; cnxk_eth_dev_ops.timesync_disable = cn10k_nix_timesync_disable; + cnxk_eth_dev_ops.rx_metadata_negotiate = + cn10k_nix_rx_metadata_negotiate; } static void diff --git a/drivers/net/cnxk/cn10k_rte_flow.c b/drivers/net/cnxk/cn10k_rte_flow.c index 529fb0e..ea71efa 100644 --- a/drivers/net/cnxk/cn10k_rte_flow.c +++ b/drivers/net/cnxk/cn10k_rte_flow.c @@ -131,9 +131,9 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, const struct rte_flow_action *action_rss = NULL; const struct rte_flow_action_meter *mtr = NULL; const struct rte_flow_action *act_q = NULL; - int mark_actions = 0, vtag_actions = 0; struct roc_npc *npc = &dev->npc; struct roc_npc_flow *flow; + int vtag_actions = 0; uint32_t req_act = 0; int i, rc; @@ -197,13 +197,6 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, cn10k_mtr_connect(eth_dev, mtr->mtr_id); } - mark_actions = roc_npc_mark_actions_get(npc); - - if (mark_actions) { - dev->rx_offload_flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; - cn10k_eth_set_rx_function(eth_dev); - } - vtag_actions = roc_npc_vtag_actions_get(npc); if (vtag_actions) { @@ -220,20 +213,11 @@ cn10k_flow_destroy(struct rte_eth_dev *eth_dev, struct rte_flow *rte_flow, { struct roc_npc_flow *flow = (struct roc_npc_flow *)rte_flow; struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); - int mark_actions = 0, vtag_actions = 0; struct roc_npc *npc = &dev->npc; + int vtag_actions = 0; uint32_t mtr_id; int rc; - mark_actions = roc_npc_mark_actions_get(npc); - if (mark_actions) { - mark_actions = roc_npc_mark_actions_sub_return(npc, 1); - if (mark_actions == 0) { - dev->rx_offload_flags &= ~NIX_RX_OFFLOAD_MARK_UPDATE_F; - cn10k_eth_set_rx_function(eth_dev); - } - } - vtag_actions = roc_npc_vtag_actions_get(npc); if (vtag_actions) { if (flow->nix_intf == ROC_NPC_INTF_RX) { diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethdev.c index d34bc68..c44b5b4 100644 --- a/drivers/net/cnxk/cn9k_ethdev.c +++ b/drivers/net/cnxk/cn9k_ethdev.c @@ -39,6 +39,9 @@ nix_rx_offload_flags(struct rte_eth_dev *eth_dev) if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) flags |= NIX_RX_OFFLOAD_SECURITY_F; + if (dev->rx_mark_update) + flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; + return flags; } @@ -467,6 +470,27 @@ cn9k_nix_dev_start(struct rte_eth_dev *eth_dev) return 0; } +static int +cn9k_nix_rx_metadata_negotiate(struct rte_eth_dev *eth_dev, uint64_t *features) +{ + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); + + *features &= + (RTE_ETH_RX_METADATA_USER_FLAG | RTE_ETH_RX_METADATA_USER_MARK); + + if (*features) { + dev->rx_offload_flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; + dev->rx_mark_update = true; + } else { + dev->rx_offload_flags &= ~NIX_RX_OFFLOAD_MARK_UPDATE_F; + dev->rx_mark_update = false; + } + + cn9k_eth_set_rx_function(eth_dev); + + return 0; +} + /* Update platform specific eth dev ops */ static void nix_eth_dev_ops_override(void) @@ -487,6 +511,7 @@ nix_eth_dev_ops_override(void) cnxk_eth_dev_ops.timesync_enable = cn9k_nix_timesync_enable; cnxk_eth_dev_ops.timesync_disable = cn9k_nix_timesync_disable; cnxk_eth_dev_ops.mtr_ops_get = NULL; + cnxk_eth_dev_ops.rx_metadata_negotiate = cn9k_nix_rx_metadata_negotiate; } static void diff --git a/drivers/net/cnxk/cn9k_rte_flow.c b/drivers/net/cnxk/cn9k_rte_flow.c index b94d29e..7b98eb0 100644 --- a/drivers/net/cnxk/cn9k_rte_flow.c +++ b/drivers/net/cnxk/cn9k_rte_flow.c @@ -13,21 +13,14 @@ cn9k_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, struct rte_flow_error *error) { struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); - int mark_actions = 0, vtag_actions = 0; struct roc_npc *npc = &dev->npc; struct roc_npc_flow *flow; + int vtag_actions = 0; flow = cnxk_flow_create(eth_dev, attr, pattern, actions, error); if (!flow) return NULL; - mark_actions = roc_npc_mark_actions_get(npc); - - if (mark_actions) { - dev->rx_offload_flags |= NIX_RX_OFFLOAD_MARK_UPDATE_F; - cn9k_eth_set_rx_function(eth_dev); - } - vtag_actions = roc_npc_vtag_actions_get(npc); if (vtag_actions) { @@ -44,17 +37,8 @@ cn9k_flow_destroy(struct rte_eth_dev *eth_dev, struct rte_flow *rte_flow, { struct roc_npc_flow *flow = (struct roc_npc_flow *)rte_flow; struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); - int mark_actions = 0, vtag_actions = 0; struct roc_npc *npc = &dev->npc; - - mark_actions = roc_npc_mark_actions_get(npc); - if (mark_actions) { - mark_actions = roc_npc_mark_actions_sub_return(npc, 1); - if (mark_actions == 0) { - dev->rx_offload_flags &= ~NIX_RX_OFFLOAD_MARK_UPDATE_F; - cn9k_eth_set_rx_function(eth_dev); - } - } + int vtag_actions = 0; vtag_actions = roc_npc_vtag_actions_get(npc); if (vtag_actions) { diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index fadc8aa..f1363af 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -339,6 +339,7 @@ struct cnxk_eth_dev { uint8_t ptype_disable; bool scalar_ena; bool ptp_en; + bool rx_mark_update; /* Enable/Disable mark update to mbuf */ /* Pointer back to rte */ struct rte_eth_dev *eth_dev;