From patchwork Thu Feb 11 14:16:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 381004 Delivered-To: patch@linaro.org Received: by 2002:a02:b18a:0:0:0:0:0 with SMTP id t10csp2122504jah; Thu, 11 Feb 2021 06:29:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJwo/t7wBgJW6NcfCdYR+P7PyJNm1I7OIbzgy9reBoHvmc2TqH/XbiCW8Ji+mqvasBF8ZKSE X-Received: by 2002:a17:906:fca1:: with SMTP id qw1mr8198972ejb.130.1613053768351; Thu, 11 Feb 2021 06:29:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613053768; cv=none; d=google.com; s=arc-20160816; b=xzeoGSILrneoTFKr9tvwzh/asXkDt/aj4GzNaxbGkhFBbVjvbb2a/O4yCc46aK5vHL o06YqNDBZUfOQla1WThSnYTKNtMSzhqTlT9jocG3VwzMuEA6Mj7ILxK9TPrC4GDrUlPn K5pLtvkKKO2WHX5raTjYHIA7m4KpEsMQjO04PpJ4zX79V10UMbC6em2r4Xibs3Kcvroc KxMxhY9bA7T3D0KL8kkdMbw+7MLv3Y/dvUGaErQi/B+7mPQiJXffXcwtceue7ZhryPu2 wMa/3xTVgQ+hYFmwLyRlhyITcNyy5Tarikit6A/fjHus9vri9C5t671d51djM5FbW+8+ YT9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from; bh=bK1QUhuXWSRIQx9glXrNebUNJb0FCZMeNvl6Xt57ZOk=; b=hr4yeWrBSR0WT8SEm4dvmZS8Aaw8oAgabcOOM+iYkmYfopVoGjduhMYetxdLsnLcMX XNw5+rjP2NkwlD5Osk/Zp0brG3tjAM1+F4sxV4pPkNkpTRcuJGIe/uDrZQ2bGC9bQpPV 7fzOao/yvALMHiVvT1D+oCj5lSmKc9iR0+EMT8yYIHWxu/lUYxpCgfBwrebwQAU2W4SV OhYsbcqRNQibFWfH+f5g31nLrL9l832y3Wpzu6LXXbAzMdv+8vvKe0IFvycwyXqqiEmT +GXMAqaBRdqvGMx5YiTw2DyAIIHd/kQtNT9s9WnJbNcL/fKGYPcRkMJXp/6u8tf/RMKm TiGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 217.70.189.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from mails.dpdk.org (mails.dpdk.org. [217.70.189.124]) by mx.google.com with ESMTP id h5si4045996edd.237.2021.02.11.06.29.28; Thu, 11 Feb 2021 06:29:28 -0800 (PST) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 217.70.189.124 as permitted sender) client-ip=217.70.189.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 217.70.189.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9AB711CC58B; Thu, 11 Feb 2021 15:28:13 +0100 (CET) Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) by mails.dpdk.org (Postfix) with ESMTP id 8FE981CC505 for ; Thu, 11 Feb 2021 15:28:03 +0100 (CET) Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 731D61A05F1; Thu, 11 Feb 2021 15:28:03 +0100 (CET) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 084AF1A05EF; Thu, 11 Feb 2021 15:28:02 +0100 (CET) Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.133.63]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 5BF54402D0; Thu, 11 Feb 2021 15:28:00 +0100 (CET) From: Hemant Agrawal To: dev@dpdk.org, ferruh.yigit@intel.com Date: Thu, 11 Feb 2021 19:46:10 +0530 Message-Id: <20210211141620.12482-11-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210211141620.12482-1-hemant.agrawal@nxp.com> References: <20210120142723.14090-1-hemant.agrawal@nxp.com> <20210211141620.12482-1-hemant.agrawal@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH v2 10/20] net/dpaa2: add support for raw pattern in dpdmux 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" From: Akhil Goyal Added support for flow raw pattern and check that the call for dpdmux_set_custom_key() which should be called only once for a particular DPDMUX as all previous rules will be erased with this call. Hence calling it for the first time only. Signed-off-by: Akhil Goyal --- drivers/net/dpaa2/dpaa2_mux.c | 39 ++++++++++++++++++++++----- drivers/net/dpaa2/mc/dpdmux.c | 3 ++- drivers/net/dpaa2/mc/fsl_dpdmux.h | 12 +++++++-- drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h | 4 +-- 4 files changed, 46 insertions(+), 12 deletions(-) -- 2.17.1 diff --git a/drivers/net/dpaa2/dpaa2_mux.c b/drivers/net/dpaa2/dpaa2_mux.c index b397d333d6..b669a16fc1 100644 --- a/drivers/net/dpaa2/dpaa2_mux.c +++ b/drivers/net/dpaa2/dpaa2_mux.c @@ -66,6 +66,7 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id, void *key_iova, *mask_iova, *key_cfg_iova = NULL; uint8_t key_size = 0; int ret; + static int i; /* Find the DPDMUX from dpdmux_id in our list */ dpdmux_dev = get_dpdmux_from_id(dpdmux_id); @@ -154,6 +155,23 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id, } break; + case RTE_FLOW_ITEM_TYPE_RAW: + { + const struct rte_flow_item_raw *spec; + + spec = (const struct rte_flow_item_raw *)pattern[0]->spec; + kg_cfg.extracts[0].extract.from_data.offset = spec->offset; + kg_cfg.extracts[0].extract.from_data.size = spec->length; + kg_cfg.extracts[0].type = DPKG_EXTRACT_FROM_DATA; + kg_cfg.num_extracts = 1; + memcpy((void *)key_iova, (const void *)spec->pattern, + spec->length); + memcpy(mask_iova, pattern[0]->mask, spec->length); + + key_size = spec->length; + } + break; + default: DPAA2_PMD_ERR("Not supported pattern type: %d", pattern[0]->type); @@ -166,20 +184,27 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id, goto creation_error; } - ret = dpdmux_set_custom_key(&dpdmux_dev->dpdmux, CMD_PRI_LOW, - dpdmux_dev->token, - (uint64_t)(DPAA2_VADDR_TO_IOVA(key_cfg_iova))); - if (ret) { - DPAA2_PMD_ERR("dpdmux_set_custom_key failed: err(%d)", ret); - goto creation_error; + /* Multiple rules with same DPKG extracts (kg_cfg.extracts) like same + * offset and length values in raw is supported right now. Different + * values of kg_cfg may not work. + */ + if (i == 0) { + ret = dpdmux_set_custom_key(&dpdmux_dev->dpdmux, CMD_PRI_LOW, + dpdmux_dev->token, + (uint64_t)(DPAA2_VADDR_TO_IOVA(key_cfg_iova))); + if (ret) { + DPAA2_PMD_ERR("dpdmux_set_custom_key failed: err(%d)", + ret); + goto creation_error; + } } - /* As now our key extract parameters are set, let us configure * the rule. */ flow->rule.key_iova = (uint64_t)(DPAA2_VADDR_TO_IOVA(key_iova)); flow->rule.mask_iova = (uint64_t)(DPAA2_VADDR_TO_IOVA(mask_iova)); flow->rule.key_size = key_size; + flow->rule.entry_index = i++; vf_conf = (const struct rte_flow_action_vf *)(actions[0]->conf); if (vf_conf->id == 0 || vf_conf->id > dpdmux_dev->num_ifs) { diff --git a/drivers/net/dpaa2/mc/dpdmux.c b/drivers/net/dpaa2/mc/dpdmux.c index 63f1ec7d30..67d37ed4cd 100644 --- a/drivers/net/dpaa2/mc/dpdmux.c +++ b/drivers/net/dpaa2/mc/dpdmux.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2013-2016 Freescale Semiconductor Inc. - * Copyright 2018-2019 NXP + * Copyright 2018-2021 NXP * */ #include @@ -852,6 +852,7 @@ int dpdmux_add_custom_cls_entry(struct fsl_mc_io *mc_io, cmd_params = (struct dpdmux_cmd_add_custom_cls_entry *)cmd.params; cmd_params->key_size = rule->key_size; + cmd_params->entry_index = rule->entry_index; cmd_params->dest_if = cpu_to_le16(action->dest_if); cmd_params->key_iova = cpu_to_le64(rule->key_iova); cmd_params->mask_iova = cpu_to_le64(rule->mask_iova); diff --git a/drivers/net/dpaa2/mc/fsl_dpdmux.h b/drivers/net/dpaa2/mc/fsl_dpdmux.h index accd1ef5c1..b809aade5d 100644 --- a/drivers/net/dpaa2/mc/fsl_dpdmux.h +++ b/drivers/net/dpaa2/mc/fsl_dpdmux.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2013-2016 Freescale Semiconductor Inc. - * Copyright 2018-2019 NXP + * Copyright 2018-2021 NXP * */ #ifndef __FSL_DPDMUX_H @@ -367,15 +367,23 @@ int dpdmux_set_custom_key(struct fsl_mc_io *mc_io, * struct dpdmux_rule_cfg - Custom classification rule. * * @key_iova: DMA address of buffer storing the look-up value - * @mask_iova: DMA address of the mask used for TCAM classification + * @mask_iova: DMA address of the mask used for TCAM classification. This + * parameter is used only if dpdmux was created using option + * DPDMUX_OPT_CLS_MASK_SUPPORT. * @key_size: size, in bytes, of the look-up value. This must match the size * of the look-up key defined using dpdmux_set_custom_key, otherwise the * entry will never be hit + * @entry_index: rule index into the table. This parameter is used only when + * dpdmux object was created using option DPDMUX_OPT_CLS_MASK_SUPPORT. In + * this case the rule is masking and the current frame may be a hit for + * multiple rules. This parameter determines the order in wich the rules + * will be checked (smaller entry_index first). */ struct dpdmux_rule_cfg { uint64_t key_iova; uint64_t mask_iova; uint8_t key_size; + uint16_t entry_index; }; /** diff --git a/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h b/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h index a60b2ebe3c..b6b8c38c41 100644 --- a/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h +++ b/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2013-2016 Freescale Semiconductor Inc. - * Copyright 2018-2019 NXP + * Copyright 2018-2021 NXP * */ #ifndef _FSL_DPDMUX_CMD_H @@ -204,7 +204,7 @@ struct dpdmux_set_custom_key { struct dpdmux_cmd_add_custom_cls_entry { uint8_t pad[3]; uint8_t key_size; - uint16_t pad1; + uint16_t entry_index; uint16_t dest_if; uint64_t key_iova; uint64_t mask_iova;