From patchwork Mon Nov 28 06:53:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120189 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 2DC8EA0093; Mon, 28 Nov 2022 07:55:21 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9309B42D43; Mon, 28 Nov 2022 07:54:39 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2119.outbound.protection.outlook.com [40.107.94.119]) by mails.dpdk.org (Postfix) with ESMTP id 3175942D3D for ; Mon, 28 Nov 2022 07:54:38 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dlwNB95RFmfwXyYYBP0j0QjFqrVSfp73F1CLawtYu99exkI19cWOKnss8rRRdeDRYSD8qAhCfHJ5PtriG+GZd/UcQCF27wcXkNtNfeWbrYzw5TLxMKF42XKX0EhVhmGDhf4xiUKlJ0W+/MAXkpkTRGFxpgZtOk4r9J38mtgzJQPOte7sNhhc6mkFzldNbxv02LEzV/3Pzakn8IJ0gnK++DIdKnCdFrRhAvLAseddgvFwvGCdGENsJYmWCur7dOPf1QruAZctv5amZDxl0XK8BEQxh1NIvAwjg+7iNF2EUJ1tujsOdsmvmmTvfd2ehGp0ijNjsvfGPs4IfmOqQs1BTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zafZNPVTUcjX49Gzybbcy6/iOlL5gPb6PrP28+e4GmM=; b=US+dZPksKRbOgS6bmen9ppEAEWthw2o9nNTUnsRMs7zUW4ypRIl7bpcVm/pwNmnU/x5+KT4zmMT1ndfqLLNe5mDL21iFRs5DQ1dHT3Qt8UHSyvVKG5NxYXCh4lw7J6FNd0tDivPgVYolPK6iR/z+vG7xSNH8t1n5xrWXP2WNyccskbF4g5gJlvmwlpWvXTUExWVA+tCJyF9RgEdGW3FHVQS7jyDxm0ydkVQ93viRsnCG0fo7iFCy8/5mUAUySDR/r23d/N2wuaz1bwXfN/T6smgL4GHctQwCgdyxqSzcdjr9S5lUQt9mi98/QtLS5/sTwbLKI31vx4GLf5JG0qn01w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zafZNPVTUcjX49Gzybbcy6/iOlL5gPb6PrP28+e4GmM=; b=nuaJWDax9BkEoX26C4XV4XxVhT8/XZLYOQJZex2efHnkMl/GlX5lntOSOTNtfJvxhkZ+BuCit6WjTg8EuNwSGfg+ruIHC2PEIlHQuBfA6gwDyyh6ivmAFL2O7kBc0RVdv0lMIoqxvGtx8yuOKa3CLeKH7dJF+W5EcqBPZQ+ELqQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by CO1PR13MB4952.namprd13.prod.outlook.com (2603:10b6:303:d9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.23; Mon, 28 Nov 2022 06:54:36 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7%4]) with mapi id 15.20.5857.021; Mon, 28 Nov 2022 06:54:36 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 8/8] net/nfp: add support for VLAN insert with NFDk Date: Mon, 28 Nov 2022 14:53:59 +0800 Message-Id: <20221128065359.12737-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221128065359.12737-1-chaoyong.he@corigine.com> References: <20221128065359.12737-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG3P274CA0019.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::31) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CO1PR13MB4952:EE_ X-MS-Office365-Filtering-Correlation-Id: 1a876f8f-ec52-4b6d-83f8-08dad10d69bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WEsf8oEwcCHrjLPJ5YI9AfUq1fNzxcBrhzLoqhr9tD6A/SafGqBh7fsGeHU4hSQI3ciOWeowM6QS0beyxwFnS37GPMhrLQ65GdyTa760VASDKhAIt+GuyXohLgIYdgMSs5k4NkU0MWHjMybjGNQX9MAR3p0zKpiy3YIIm85wB71pojNg5SlI1pRbDkpZIWb8d0rh6/6v5F1pkxoCuvzN3+TUEBwokKoFVWBXsSPGUrAjOJE/sGBoZ/OZyZAUQ6WpjsN2EfNL/Vgvf8gpcWeBth3mNbhjWrR6QVC+1Aa8qZuofFodYQ2gLBOCzzob5/05mmqDVUCH296m2iZCH8pRs4q+0JwMLjT8JPzN1dFVtpWE8EDg50dugTaqA4lsjAUQzpXtuh+16aE/I9g2Il9fkbCsLrxVQzGxGuIjvP9VmbD2rkBYY7j3kK97X2sSDJgM8uVKgTc4p/P2VZ1Go/CjJV7Y/ZqoqLPbS+/eh1DupMDIdE2AtD5nbH7fTTxlhZfDB5tS+ScrHzwTAHmGK01B7b2TVPC/idJrBvlSfBukkw6BiZqOtt5UlatC/MMvaC9WfADBvHlIjdoY362oXXDRmEmEpY4SBN0/2PUAI3VQmbUstjw/uxum92h17W3afHdjFKhRj3QXzNPPS81x6Yn7nIvmBwlwps+TYMIhJj83Z5b4sMJYGbjDGwpdVzYbBjHOMdxJasAsePjsG5vYB/fuOD+7CjyB/gLQJOU+ACY6mNGVn+UdJb/4rzikekSG8Z4a X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(366004)(346002)(396003)(136003)(376002)(451199015)(38350700002)(6486002)(38100700002)(66556008)(66476007)(66946007)(4326008)(41300700001)(107886003)(6666004)(478600001)(36756003)(8676002)(2906002)(54906003)(316002)(6916009)(8936002)(5660300002)(86362001)(44832011)(2616005)(83380400001)(66574015)(1076003)(186003)(26005)(6512007)(52116002)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?4pamEY440s55A3oJJtuwYJk7WNE9?= =?utf-8?q?ypyP15bvf93OkUdMPt1P8nx90dqZySOhL81SzE+fN1N6syB+K/nuSBAzdxscBFSbN?= =?utf-8?q?YKRucw/0lkUSHpZZYEO6tZrt+fx3r2igsse18YLm5mds8W+SSlZ020BE8A4McoEox?= =?utf-8?q?zrfIxzKGHzK9Ao8t2zSKqd8+oWuX+NBIGSco1tlGkNeq7P4vUxNiyTCF7Zkhkk62e?= =?utf-8?q?8TdO+qXqe1P0WjEQJbgbe76GmhXbEQhU2SF5H4kPU51f/2SEr3daOjINGW+IN1P5M?= =?utf-8?q?dBO+ApGTF/NLQLhE0dBptc1TdScH/L5rcDZJWA+DhirJLbCD5wCBLBMTluRJ/C/jZ?= =?utf-8?q?vgX40XQYkGk2zL9SAW8RVaTB+XgoKdhbAL/kcTCGZlriXi9bokRWReNH1RVg/40nt?= =?utf-8?q?pECr0aIN63njgls0/y+mhYs4kx7WfOINaw+SWKWvpurSLtwgFzfgvwfTfOY6pbHAH?= =?utf-8?q?KU5ZS0lqcOmHw4BUWQUrnIv197uhL60YRkE9OpBCBPGUhR9JME8Efp5ZEZtVI2KqT?= =?utf-8?q?Eyl4lwlF7cDCAyoaiLSgTbk1NO07XHWyUr+tpCqp204XniIFFgmDjWbUjuQ6umBJA?= =?utf-8?q?XHvhBDRTzHG9NiIQ+t9Ul2jfNlf/trSw17jAJ+vq1S03R837reCj7zLlUnYVrw6Fn?= =?utf-8?q?6eTeDP5ZSJo3V0zVjk3ekDoFOIRm40ff0yy3PNHFoXSO0LQ3wmCXh40UN93EKGWiW?= =?utf-8?q?nUYnqVOAsnZo/4uZU7vbz85C0v4uC1O1fEvJLSzA49HsFBfIVs7zgbvb3a50rbFeG?= =?utf-8?q?iv7vVK7Y7jy/g3EcjI6vFE3hswPXO/St5QE9Euw8vwTTCOv9M/6oe+bqCRQl7YqeO?= =?utf-8?q?LbOVvCS7EvP/rF7HKcDkZoxkDLezoDoMpjfg+7BZSuz+cA/UKhxE9gvjnLuAzbTfE?= =?utf-8?q?9NiiZPwQwkXc0/lfW5CvIUjwDIfJvM7QHl3Z6UhvidLFaOvZTJ/1BS466BihBFyGh?= =?utf-8?q?qG5UJs2jGCmFYsibOGohuLMaVfA5AnyNyhyc7EBSSI3l9tRtZuYmlVLUk+oZrWVtA?= =?utf-8?q?TRjmnzJhCiH5qCiLl8aMuN0VJQ0Pcj4rmsWSJgpDfl8hFzX7C3VjKrv5SZHYR0SFN?= =?utf-8?q?63nR5Ycf7HkDdqTRF62mc5MxB7UdUNtnI9kmhGOGOUXMhjwcqYb4KVT5PcQLlk6qC?= =?utf-8?q?rsOur5qE5rHS6G1Sgmwv+CHxqGw+BC5LbDLnrM3+YKTrkkkLGLSHREHz35p3/t8hw?= =?utf-8?q?L/793ulk+0h3OJmZTl9nkVIr1jd+yvw5b0R7mygIWUBpIl43Y0n7Ub6CfzZPfXGyT?= =?utf-8?q?LmRY/qSJL1noXPUQigxKKreSqDf775HWIUkmUsTVjrQuk0lfZ3SAiSRbjMNqduX5t?= =?utf-8?q?ySpG7Lipwb7Anu9cY4DdVnAIfBr/qVFvTAZ+uwH/GX12cUW9g2xLZyOkTQCpKiyEt?= =?utf-8?q?xMRBiZlcsmzHnJyje4q/a6KiN9Fi55q9HAaM4dpI9l2oAjFq0olGvvV6VfHoLPPto?= =?utf-8?q?ACJAyVwhFN2f61vYjv81Ddq5fvba6DmjDmYsGaLI6NXRxj0a3umsDD87zeVlKrgi6?= =?utf-8?q?pa6qzPWMUzvjTkKLmvWfeE1qB2NrY0PnLQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1a876f8f-ec52-4b6d-83f8-08dad10d69bb X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2022 06:54:36.8147 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EW/FtgfInxjt5+FzNEgwut2m3rhLAHi0AwYBQjIdCl1nTJBFN6i8mkvQ3dJRSY45DPA6PRY5ZjIosT/JtNq21qAq8gcTJBpWkiJdSta8t7A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR13MB4952 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: Peng Zhang The firmware supplies VLAN insert information as packet metadata. The field of this VLAN metadata includes VLAN TPID and VLAN TCI. Configuration control bit NFP_NET_CFG_CTRL_TXVLAN_V2 is to signal availability of VLAN insert features of the firmware. This feature already was implemented with NFD3, now it can be supported with NFDk. Signed-off-by: Peng Zhang Reviewed-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/nfp.rst | 42 +++++++++++++++++++++++++++ drivers/net/nfp/nfp_ctrl.h | 1 + drivers/net/nfp/nfp_rxtx.c | 58 ++++++++++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_rxtx.h | 3 +- 4 files changed, 103 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index a636fd0fde..a085d7d9ae 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -219,6 +219,9 @@ Metadata Format The NFP packet metadata format +NFD3 +~~~~ + The packet metadata starts with a field type header that can contain up-to 8 4-bit datatype specifiers (32-bits in total). This is followed by up to 8 32-bit words of data for each field described in the header. And directly @@ -254,6 +257,45 @@ be wrote N times in the heads. | ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +NFDk +~~~~ + +The packet metadata starts with a field type header that can contain 8 bit +metadata length and 6 4-bit datatype specifiers (32-bits in total). This is +followed by up to 6 32-bit words of data for each field described in the +header. And directly following the metadata (header and data) comes the +packet. + +The order of type is correspond with the data, but the nums of data field are +decided by the corresponding type, if the type need N data field, it need to +be wrote N times in the heads. It is the same with NFD3. +:: + + 3 2 1 0 + 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type5 | Type4 | Type3 | Type2 | Type1 | Type0 |metadata length| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data for field 7 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Packet Data | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + There are two classes of metadata one for ingress and one for egress. In each class the supported NFP types are: diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index 6e2601d174..1069ff9485 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -30,6 +30,7 @@ #define NFP_NET_META_FIELD_SIZE 4 #define NFP_NET_META_FIELD_MASK ((1 << NFP_NET_META_FIELD_SIZE) - 1) #define NFP_NET_META_HEADER_SIZE 4 +#define NFP_NET_META_NFDK_LENGTH 8 /* Working with metadata vlan api (NFD version >= 2.0) */ #define NFP_NET_META_VLAN_INFO 16 diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 293769f240..8f5e9a8e82 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -1058,6 +1058,63 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk return i; } +static void +nfp_net_nfdk_set_meta_data(struct rte_mbuf *pkt, + struct nfp_net_txq *txq, + uint64_t *metadata) +{ + char *meta; + uint8_t layer = 0; + uint32_t meta_type; + struct nfp_net_hw *hw; + uint32_t header_offset; + uint8_t vlan_layer = 0; + struct nfp_net_meta_raw meta_data; + + memset(&meta_data, 0, sizeof(meta_data)); + hw = txq->hw; + + if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) != 0 && + (hw->ctrl & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0) { + if (meta_data.length == 0) + meta_data.length = NFP_NET_META_HEADER_SIZE; + meta_data.length += NFP_NET_META_FIELD_SIZE; + meta_data.header |= NFP_NET_META_VLAN; + } + + if (meta_data.length == 0) + return; + + meta_type = meta_data.header; + header_offset = meta_type << NFP_NET_META_NFDK_LENGTH; + meta_data.header = header_offset | meta_data.length; + meta_data.header = rte_cpu_to_be_32(meta_data.header); + meta = rte_pktmbuf_prepend(pkt, meta_data.length); + memcpy(meta, &meta_data.header, sizeof(meta_data.header)); + meta += NFP_NET_META_HEADER_SIZE; + + for (; meta_type != 0; meta_type >>= NFP_NET_META_FIELD_SIZE, layer++, + meta += NFP_NET_META_FIELD_SIZE) { + switch (meta_type & NFP_NET_META_FIELD_MASK) { + case NFP_NET_META_VLAN: + if (vlan_layer > 0) { + PMD_DRV_LOG(ERR, "At most 1 layers of vlan is supported"); + return; + } + nfp_net_set_meta_vlan(&meta_data, pkt, layer); + vlan_layer++; + break; + default: + PMD_DRV_LOG(ERR, "The metadata type not supported"); + return; + } + + memcpy(meta, &meta_data.data[layer], sizeof(meta_data.data[layer])); + } + + *metadata = NFDK_DESC_TX_CHAIN_META; +} + static int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, @@ -1383,6 +1440,7 @@ nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk RTE_MBUF_PREFETCH_TO_FREE(*lmbuf); temp_pkt = pkt; + nfp_net_nfdk_set_meta_data(pkt, txq, &metadata); if (unlikely(pkt->nb_segs > 1 && !(hw->cap & NFP_NET_CFG_CTRL_GATHER))) { diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index d16d557fd3..4c86b2b775 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -36,7 +36,7 @@ * Describe the raw metadata format, useful when preparing metadata for a * transmission mbuf. * - * @header: NFD3 Contains the 8 4-bit type fields + * @header: NFD3 or NFDk field type header (see format in nfp.rst) * @data: Array of each fields data member * @length: Keep track of number of valid fields in @header and data. Not part * of the raw metadata. @@ -118,6 +118,7 @@ struct nfp_meta_parsed { #define NFDK_DESC_TX_TYPE_SIMPLE 8 #define NFDK_DESC_TX_TYPE_GATHER 1 #define NFDK_DESC_TX_EOP BIT(14) +#define NFDK_DESC_TX_CHAIN_META BIT(3) #define NFDK_DESC_TX_L4_CSUM BIT(1) #define NFDK_DESC_TX_L3_CSUM BIT(0)