From patchwork Mon Feb 28 04:53:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Satheesh Paul Antonysamy X-Patchwork-Id: 108387 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 C7A09A0350; Mon, 28 Feb 2022 05:53:39 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A1F994068C; Mon, 28 Feb 2022 05:53:39 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 2CAF94068A for ; Mon, 28 Feb 2022 05:53:38 +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 21S24KGJ006742 for ; Sun, 27 Feb 2022 20:53:37 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=3sTElVhVIObHGbIfhkdFOsIP6+vOCE0Q6MTeKW17gwM=; b=YzMibUbKEgnPROcnugHThx/vQdxj/b8CX/mr4ck5jlk3wMb5jLxQxfqUUAK3vbI+76DM YLBRklHEn7jUe2rEMkInVO557cmTj4MfNzfYcKNwiIJJSeoXA9uLroMkLNwJYvO+ARx1 GYVqBXl4G8FVeMR6kDAEoyrscHpUpqGnTZtP8kmI3aT7QgP4bAkydq/0Sl+Ir1fi/ckV lowHht9Qwjqlzu7lTH8yz7h+fhhkbBbSmtHTE716ymmvNQrVefJjb/Y4nWovuiONyyCX JQQx+pOXXlC8ejIC3XgWo+t1cE8DWHvLhW/HRNZn/hElnI5URdzggxXupSqIE2tATLAe Ag== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3egn96rf88-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sun, 27 Feb 2022 20:53:37 -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, 27 Feb 2022 20:53:35 -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, 27 Feb 2022 20:53:35 -0800 Received: from localhost.localdomain (unknown [10.28.34.33]) by maili.marvell.com (Postfix) with ESMTP id 32DB33F7118; Sun, 27 Feb 2022 20:53:32 -0800 (PST) From: To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Satheesh Paul Subject: [dpdk-dev] [PATCH 1/2] common/cnxk: support for CPT second pass flow rules Date: Mon, 28 Feb 2022 10:23:21 +0530 Message-ID: <20220228045322.1841812-1-psatheesh@marvell.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 X-Proofpoint-GUID: DLFTM8t3CogieE95EOPfkZTutDgnk700 X-Proofpoint-ORIG-GUID: DLFTM8t3CogieE95EOPfkZTutDgnk700 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-02-28_01,2022-02-26_01,2022-02-23_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: Satheesh Paul Added support to create flow rules to match packets from CPT(second pass packets). With this change, ingress rules will be created with bits 10 and 11 of channel field in the MCAM ignored by default. For rules specific to second pass packets, the CPT channel bits will be set in the MCAM. Signed-off-by: Satheesh Paul --- drivers/common/cnxk/hw/nix.h | 7 +++- drivers/common/cnxk/roc_npc.c | 9 +++-- drivers/common/cnxk/roc_npc.h | 1 + drivers/common/cnxk/roc_npc_mcam.c | 60 ++++++++++++++++++++--------- drivers/common/cnxk/roc_npc_parse.c | 14 +++++++ drivers/common/cnxk/roc_npc_priv.h | 2 + 6 files changed, 69 insertions(+), 24 deletions(-) diff --git a/drivers/common/cnxk/hw/nix.h b/drivers/common/cnxk/hw/nix.h index 1cc0c8dfb8..5863e358e0 100644 --- a/drivers/common/cnxk/hw/nix.h +++ b/drivers/common/cnxk/hw/nix.h @@ -830,7 +830,7 @@ #define NIX_CHAN_LBKX_CHX(a, b) \ (0x000ull | ((uint64_t)(a) << 8) | (uint64_t)(b)) #define NIX_CHAN_CPT_CH_END (0x4ffull) /* [CN10K, .) */ -#define NIX_CHAN_CPT_CH_START (0x400ull) /* [CN10K, .) */ +#define NIX_CHAN_CPT_CH_START (0x800ull) /* [CN10K, .) */ #define NIX_CHAN_R4 (0x400ull) /* [CN9K, CN10K) */ #define NIX_CHAN_R5 (0x500ull) #define NIX_CHAN_R6 (0x600ull) @@ -843,6 +843,11 @@ #define NIX_CHAN_RPMX_LMACX_CHX(a, b, c) \ (0x800ull | ((uint64_t)(a) << 8) | ((uint64_t)(b) << 4) | (uint64_t)(c)) +/* The mask is to extract lower 10-bits of channel number + * which CPT will pass to X2P. + */ +#define NIX_CHAN_CPT_X2P_MASK (0x3ffull) + #define NIX_INTF_SDP (0x4ull) #define NIX_INTF_CGX0 (0x0ull) /* [CN9K, CN10K) */ #define NIX_INTF_CGX1 (0x1ull) /* [CN9K, CN10K) */ diff --git a/drivers/common/cnxk/roc_npc.c b/drivers/common/cnxk/roc_npc.c index fc88fd58bc..51e36f141f 100644 --- a/drivers/common/cnxk/roc_npc.c +++ b/drivers/common/cnxk/roc_npc.c @@ -570,10 +570,11 @@ npc_parse_pattern(struct npc *npc, const struct roc_npc_item_info pattern[], struct roc_npc_flow *flow, struct npc_parse_state *pst) { npc_parse_stage_func_t parse_stage_funcs[] = { - npc_parse_meta_items, npc_parse_pre_l2, npc_parse_cpt_hdr, - npc_parse_higig2_hdr, npc_parse_la, npc_parse_lb, - npc_parse_lc, npc_parse_ld, npc_parse_le, - npc_parse_lf, npc_parse_lg, npc_parse_lh, + npc_parse_meta_items, npc_parse_mark_item, npc_parse_pre_l2, + npc_parse_cpt_hdr, npc_parse_higig2_hdr, npc_parse_la, + npc_parse_lb, npc_parse_lc, npc_parse_ld, + npc_parse_le, npc_parse_lf, npc_parse_lg, + npc_parse_lh, }; uint8_t layer = 0; int key_offset; diff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.h index 6204139396..aecea37b3d 100644 --- a/drivers/common/cnxk/roc_npc.h +++ b/drivers/common/cnxk/roc_npc.h @@ -37,6 +37,7 @@ enum roc_npc_item_type { ROC_NPC_ITEM_TYPE_L3_CUSTOM, ROC_NPC_ITEM_TYPE_QINQ, ROC_NPC_ITEM_TYPE_RAW, + ROC_NPC_ITEM_TYPE_MARK, ROC_NPC_ITEM_TYPE_END, }; diff --git a/drivers/common/cnxk/roc_npc_mcam.c b/drivers/common/cnxk/roc_npc_mcam.c index 9c5ff5e60a..3447b59344 100644 --- a/drivers/common/cnxk/roc_npc_mcam.c +++ b/drivers/common/cnxk/roc_npc_mcam.c @@ -497,6 +497,38 @@ npc_mcam_fetch_kex_cfg(struct npc *npc) return rc; } +static void +npc_mcam_set_channel(struct roc_npc_flow *flow, + struct npc_mcam_write_entry_req *req, uint16_t channel, + uint16_t chan_mask, bool is_second_pass) +{ + uint16_t chan = 0, mask = 0; + + req->entry_data.kw[0] &= ~(GENMASK(11, 0)); + req->entry_data.kw_mask[0] &= ~(GENMASK(11, 0)); + flow->mcam_data[0] &= ~(GENMASK(11, 0)); + flow->mcam_mask[0] &= ~(GENMASK(11, 0)); + + if (is_second_pass) { + chan = (channel | NIX_CHAN_CPT_CH_START); + mask = (chan_mask | NIX_CHAN_CPT_CH_START); + } else { + /* + * Clear bits 10 & 11 corresponding to CPT + * channel. By default, rules should match + * both first pass packets and second pass + * packets from CPT. + */ + chan = (channel & NIX_CHAN_CPT_X2P_MASK); + mask = (chan_mask & NIX_CHAN_CPT_X2P_MASK); + } + + req->entry_data.kw[0] |= (uint64_t)chan; + req->entry_data.kw_mask[0] |= (uint64_t)mask; + flow->mcam_data[0] |= (uint64_t)chan; + flow->mcam_mask[0] |= (uint64_t)mask; +} + int npc_mcam_alloc_and_write(struct npc *npc, struct roc_npc_flow *flow, struct npc_parse_state *pst) @@ -564,32 +596,22 @@ npc_mcam_alloc_and_write(struct npc *npc, struct roc_npc_flow *flow, if (flow->nix_intf == NIX_INTF_RX) { if (inl_dev && inl_dev->is_multi_channel && (flow->npc_action & NIX_RX_ACTIONOP_UCAST_IPSEC)) { - req->entry_data.kw[0] |= (uint64_t)inl_dev->channel; - req->entry_data.kw_mask[0] |= - (uint64_t)inl_dev->chan_mask; pf_func = nix_inl_dev_pffunc_get(); req->entry_data.action &= ~(GENMASK(19, 4)); req->entry_data.action |= (uint64_t)pf_func << 4; - flow->npc_action &= ~(GENMASK(19, 4)); flow->npc_action |= (uint64_t)pf_func << 4; - flow->mcam_data[0] |= (uint64_t)inl_dev->channel; - flow->mcam_mask[0] |= (uint64_t)inl_dev->chan_mask; + + npc_mcam_set_channel(flow, req, inl_dev->channel, + inl_dev->chan_mask, false); } else if (npc->is_sdp_link) { - req->entry_data.kw[0] &= ~(GENMASK(11, 0)); - req->entry_data.kw_mask[0] &= ~(GENMASK(11, 0)); - req->entry_data.kw[0] |= (uint64_t)npc->sdp_channel; - req->entry_data.kw_mask[0] |= - (uint64_t)npc->sdp_channel_mask; - flow->mcam_data[0] &= ~(GENMASK(11, 0)); - flow->mcam_mask[0] &= ~(GENMASK(11, 0)); - flow->mcam_data[0] |= (uint64_t)npc->sdp_channel; - flow->mcam_mask[0] |= (uint64_t)npc->sdp_channel_mask; + npc_mcam_set_channel(flow, req, npc->sdp_channel, + npc->sdp_channel_mask, + pst->is_second_pass_rule); } else { - req->entry_data.kw[0] |= (uint64_t)npc->channel; - req->entry_data.kw_mask[0] |= (BIT_ULL(12) - 1); - flow->mcam_data[0] |= (uint64_t)npc->channel; - flow->mcam_mask[0] |= (BIT_ULL(12) - 1); + npc_mcam_set_channel(flow, req, npc->channel, + (BIT_ULL(12) - 1), + pst->is_second_pass_rule); } } else { uint16_t pf_func = (flow->npc_action >> 4) & 0xffff; diff --git a/drivers/common/cnxk/roc_npc_parse.c b/drivers/common/cnxk/roc_npc_parse.c index b849326a19..364a846963 100644 --- a/drivers/common/cnxk/roc_npc_parse.c +++ b/drivers/common/cnxk/roc_npc_parse.c @@ -21,6 +21,20 @@ npc_parse_meta_items(struct npc_parse_state *pst) return 0; } +int +npc_parse_mark_item(struct npc_parse_state *pst) +{ + if (pst->pattern->type == ROC_NPC_ITEM_TYPE_MARK) { + if (pst->flow->nix_intf != NIX_INTF_RX) + return -EINVAL; + + pst->is_second_pass_rule = true; + pst->pattern++; + } + + return 0; +} + static int npc_flow_raw_item_prepare(const struct roc_npc_flow_item_raw *raw_spec, const struct roc_npc_flow_item_raw *raw_mask, diff --git a/drivers/common/cnxk/roc_npc_priv.h b/drivers/common/cnxk/roc_npc_priv.h index e78d96e876..78d6ee844d 100644 --- a/drivers/common/cnxk/roc_npc_priv.h +++ b/drivers/common/cnxk/roc_npc_priv.h @@ -189,6 +189,7 @@ struct npc_parse_state { /* adjust ltype in MCAM to match at least one vlan */ bool set_vlan_ltype_mask; bool set_ipv6ext_ltype_mask; + bool is_second_pass_rule; }; enum npc_kpu_parser_flag { @@ -421,6 +422,7 @@ void npc_get_hw_supp_mask(struct npc_parse_state *pst, int npc_parse_item_basic(const struct roc_npc_item_info *item, struct npc_parse_item_info *info); int npc_parse_meta_items(struct npc_parse_state *pst); +int npc_parse_mark_item(struct npc_parse_state *pst); int npc_parse_pre_l2(struct npc_parse_state *pst); int npc_parse_higig2_hdr(struct npc_parse_state *pst); int npc_parse_cpt_hdr(struct npc_parse_state *pst); From patchwork Mon Feb 28 04:53:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Satheesh Paul Antonysamy X-Patchwork-Id: 108388 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 38016A0350; Mon, 28 Feb 2022 05:53:45 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A731B41152; Mon, 28 Feb 2022 05:53:43 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 7BB4D410FF for ; Mon, 28 Feb 2022 05:53:42 +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 21S24OEL006798 for ; Sun, 27 Feb 2022 20:53:42 -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-transfer-encoding : content-type; s=pfpt0220; bh=hd3TRKiMorE8fH3i4LfnEkso4ZJhpSM2ty2xSx39wo0=; b=hoYqRlGqEdEQyAellGUx/eYs9+OPezLXO58yLITUQAjzXtEihu20ph5v42rwJzTf1yMx Wt5JVO/AovkdGELatKMx2qrsLRPJ+3eKWhHyBo3N63t9JGQMRK/p+aGndXJhvXPt+KVV a7caDVH++Q2eIvtsgJCeATgHeyjYhRHCrBvc3b0nImDCsqYJcsHdgvuyezZzGY3lSFPT ayVpCAGTXPJJeInuV/ZeqkZkhuLZNw7lkKi8ncx2LqY0JiWeH5GluEKMLiQZTbZs9vaA XwIXH1rWVfzDOOB57pSeTX6nl34HyYbnqgm+sBgvPckUWVI0L9PRMFUw7Lpw2kWtGZnL 8A== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3egn96rf8g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sun, 27 Feb 2022 20:53:41 -0800 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 27 Feb 2022 20:53:40 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sun, 27 Feb 2022 20:53:40 -0800 Received: from localhost.localdomain (unknown [10.28.34.33]) by maili.marvell.com (Postfix) with ESMTP id 1344C3F7118; Sun, 27 Feb 2022 20:53:37 -0800 (PST) From: To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Satheesh Paul Subject: [dpdk-dev] [PATCH 2/2] net/cnxk: support for mark pattern item type Date: Mon, 28 Feb 2022 10:23:22 +0530 Message-ID: <20220228045322.1841812-2-psatheesh@marvell.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20220228045322.1841812-1-psatheesh@marvell.com> References: <20220228045322.1841812-1-psatheesh@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: J8zzIMsNwCxn5ijCV4O0YL3DiG8Pa9qG X-Proofpoint-ORIG-GUID: J8zzIMsNwCxn5ijCV4O0YL3DiG8Pa9qG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-02-28_01,2022-02-26_01,2022-02-23_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: Satheesh Paul Added support for RTE_FLOW_ITEM_TYPE_MARK. This item type can be used to create ingress flow rules to match packets from CPT(second pass packets). Signed-off-by: Satheesh Paul --- doc/guides/nics/cnxk.rst | 7 +++++++ doc/guides/nics/features/cnxk.ini | 1 + doc/guides/nics/features/cnxk_vec.ini | 1 + doc/guides/nics/features/cnxk_vf.ini | 1 + drivers/net/cnxk/cnxk_flow.c | 4 +++- 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/cnxk.rst b/doc/guides/nics/cnxk.rst index 31c801fa04..34f6e4d8ee 100644 --- a/doc/guides/nics/cnxk.rst +++ b/doc/guides/nics/cnxk.rst @@ -406,6 +406,13 @@ Example usage in testpmd:: testpmd> flow create 0 ingress pattern eth / raw relative is 0 pattern \ spec ab pattern mask ab offset is 4 / end actions queue index 1 / end +RTE Flow mark item support +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- ``RTE_FLOW_ITEM_TYPE_MARK`` can be used to create ingress flow rules to match + packets from CPT(second pass packets). When mark item type is used, it should + be the first item in the patterns specification. + Inline device support for CN10K ------------------------------- diff --git a/doc/guides/nics/features/cnxk.ini b/doc/guides/nics/features/cnxk.ini index 0eba334eb4..7cac8beb61 100644 --- a/doc/guides/nics/features/cnxk.ini +++ b/doc/guides/nics/features/cnxk.ini @@ -65,6 +65,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +mark = Y mpls = Y nvgre = Y raw = Y diff --git a/doc/guides/nics/features/cnxk_vec.ini b/doc/guides/nics/features/cnxk_vec.ini index df5f358a3e..0803bb3c29 100644 --- a/doc/guides/nics/features/cnxk_vec.ini +++ b/doc/guides/nics/features/cnxk_vec.ini @@ -61,6 +61,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +mark = Y mpls = Y nvgre = Y raw = Y diff --git a/doc/guides/nics/features/cnxk_vf.ini b/doc/guides/nics/features/cnxk_vf.ini index a78fbcada0..ed3e231c5f 100644 --- a/doc/guides/nics/features/cnxk_vf.ini +++ b/doc/guides/nics/features/cnxk_vf.ini @@ -57,6 +57,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +mark = Y mpls = Y nvgre = Y raw = Y diff --git a/drivers/net/cnxk/cnxk_flow.c b/drivers/net/cnxk/cnxk_flow.c index 8763ca63d6..ff962c141d 100644 --- a/drivers/net/cnxk/cnxk_flow.c +++ b/drivers/net/cnxk/cnxk_flow.c @@ -53,7 +53,9 @@ const struct cnxk_rte_flow_term_info term[] = { [RTE_FLOW_ITEM_TYPE_HIGIG2] = {ROC_NPC_ITEM_TYPE_HIGIG2, sizeof(struct rte_flow_item_higig2_hdr)}, [RTE_FLOW_ITEM_TYPE_RAW] = {ROC_NPC_ITEM_TYPE_RAW, - sizeof(struct rte_flow_item_raw)}}; + sizeof(struct rte_flow_item_raw)}, + [RTE_FLOW_ITEM_TYPE_MARK] = {ROC_NPC_ITEM_TYPE_MARK, + sizeof(struct rte_flow_item_mark)}}; static int npc_rss_action_validate(struct rte_eth_dev *eth_dev,