From patchwork Mon Nov 28 06:53:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120181 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 531DFA0093; Mon, 28 Nov 2022 07:54:25 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F0D7A4067C; Mon, 28 Nov 2022 07:54:24 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2130.outbound.protection.outlook.com [40.107.244.130]) by mails.dpdk.org (Postfix) with ESMTP id 733D740156 for ; Mon, 28 Nov 2022 07:54:23 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cYtB3QLUJgYIfPULtJRvHZ6pLTFfHkYaCze9cvsGoijwmhikD5lClyYnciLxFVzhMesk9i1XU/viIE1NkpM5QbX04byaCOU7D8JxZAVrZE/JtOgYFeNeh/lLznsBNQJfD2aTzfuQJgpMWOOzX4Me0SK/xS4UUFZvOZ82XeC6wnp4K84B0JShqg7pxXkG63o9xvtFOHd6tStNJ7D+LCvMqslYQWj1D5gdi5/uZKpgSiVWpvsSJE/sTi9LwgBHMGhvt6jySoDKB1t/Fczfu8ges+/IWubewboAW9aL5TFAQfR0ouERLKQYF+ptBu1v2WTJbMRbSl6OLq9bMC6I1gv13Q== 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=A3RHx+Vp5uZgGjG2WZuhzeQm03AtHpLB3S+vW3TtuU4=; b=G9/J3K9o27wsTOdtE5ls6Bzzsu/HH7TKIB3wIzawM4jN056aWUjyOSKcEpOcVHuc7hTNU2xM5T6WgEMOns4svD/8TqAuJv2+SMju8gYgDN0xGPSWt4vNIzyCcsSNYZrCEK87rwNq5ePCPJ++5CoVgQ7uiAydCdGJeMPaUQSH+9QXtEJwBQr3GrVp2GMFVekhLtwBHAApl9tm6UPp+5sG9TVNK7tZ1aJWJL/+tSogtGKqoY8qNEAE4nA6INm5jAeLB429NHbtWXrXQn2BUZASbBxZSXz1Q9+XyhEQk9DTFVgcrP8P+fpt3ZFaT8kpeEyxABLNjaDJ+ccUKBzhzzPQlg== 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=A3RHx+Vp5uZgGjG2WZuhzeQm03AtHpLB3S+vW3TtuU4=; b=SRPZb540+nX9CJI5I80hH+H2zO+uBBxkvjKPDT7fMTUveVoKNFPRwvoUxTavXeJt446xQWL+SxszDi58uPVVizvds6rf7rmcgHi8p+gmn9o6gBRYqAGJOp+dFhfG7tGhF/6pBx22v5yMlgI/HbJ3qQd2RN0CrDTVmKTuAbf6yzs= 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:21 +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:21 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 1/8] net/nfp: break out function to report device information Date: Mon, 28 Nov 2022 14:53:52 +0800 Message-Id: <20221128065359.12737-2-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: 697728c3-2194-4a48-1dc1-08dad10d6062 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hhlFuy0cCjylml3uqu9e9k6kPvjvaGhingRP7yG/VbOlNXbAC7iBzioIy3wD81O1VnwZ1NFvwWpOFW4+8eVw0cgF5X0qSnvC1iYc1i790uSB85RyOEOCAWU8qVM/+TVgK8E8BJVAbCubm/URo5mwqF3tpcNnRu0OTfRW9xY6gjIQ6YmPPjyGURQg6AdG5wXB++sB/pt5/xSjkUwbRHHC3xgo6C+j4NdaRaDkgDZ2sEwXkK4f/95XDICY7+q+KAjmepy2mkWbPeFa0SseFnuSXXf0JmDIFqlHI9KXItgWsOm7nkwgKgAk5uf33ovdMHDjVsTnyOLPP6hawJKmsEiuTQ9mrX9Ejt3m3I1unOCuCB7f9FKNU7QD+obFwpgUPndIkOC1NHqz3zzznEvlitYqlqijuMi26mqxD2zmFssjtDOlg94Y3Lkmn4yHgnGZsujBOhGpyIINHL9e+dxg8kgf/Dw7jZHfpv+vfHN4fTZa7NqZ7/1l2iLbCtqr4bFa/k0uWqFuJvWvLuNtZkZW/4r07Fe6zWyJgNq63cj4KZUDYpUsj/z8yT5savMwAWb2YmOIxfv+JTU/yLOrlATIbkl1xwvYc5NpIgt1I2KFbIpCqwb8I6lGnxjA35QNtQPzyXNYx4tVGPAa2I2TzEIst41DxvHfsR9mowJLYhB9s3324G2e02F0dOM1GopoHAwa/P+hXdHk3jTBOeLDpbG7t/NB28PF3uwtKBl96hG0zb4oBzRrxXunCzYRDe3s9qDvKNvJ 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?KNhifUqcCj9DLzZzlzlFjOXz441G?= =?utf-8?q?LyC5fT1a75iMZdpXf6Me4td6IdzLEA7hcRmO04Cd8XnKi46zM6EmF7LAUkoOPZwO5?= =?utf-8?q?62zhsQKXYHEkM9wc8MWmgWzH5QAmMa7evzKaAIQB7FEfwskvF/tcgvQo4dUXUxUDt?= =?utf-8?q?6EyZIWsFSeYL6YV+LEvOBU71vq4mQ6ed/Yek93BoASt3U0FqKMWnfiJwDMTeIiDYr?= =?utf-8?q?fSH32zOzszYjHUd2JWzzHbZH8Z6W2TzOA6dZ+ebpS1BEbqyZrOk1VW0bUNPsac0Zw?= =?utf-8?q?070PjGYErG3gItxhFGtq8oUtdDM1p68g40eg3purRxz7va7EGg2FLmZ2gW7l0BR3i?= =?utf-8?q?+AF5qUtxB6qs2o/Rf7RbY0a6sTR4Hr+sIq6OJwno42QwWJG7uZ81HU6ksd7jUbifp?= =?utf-8?q?YPUa5QIgQDTWHleQ5qj/bekbmAbKVTAEW60HVyXMnevFp/7tS1pw4IVYNufnUx/xV?= =?utf-8?q?asSsso+BN5ci6i1p7ASlmnGjj4cKqnReRJyoMA6ivELVmdA/wYZWRFuBZ7stnkubq?= =?utf-8?q?VQ/SS01hm5wNUoa881Ozu7IpbQ9RufYl5S+e7pTe/rRcGK48kYjQVCgXzINdPfHLf?= =?utf-8?q?B9DRS6OoLPvcSiNOMrIkCzBKM85ggJyfV2qfwFjFZ2ozWmBjBpwuyyvxSh8VMbHXG?= =?utf-8?q?cvykrg2qAZgYp0FvwaDaobenE64r2s3A84sNfowc29SMWaFE3QRqvM2RzO2BCXgS0?= =?utf-8?q?PZZE9gMu0GgAM77vjqd5HmJDgdSUse3xVt9EwAcm0YToBux1XmTOIYggLj/SDAU94?= =?utf-8?q?vqk85D4uskb7KKRzrv7D4KiYKOBqfw2tF//psq4dwh2Mf8WhCDxiR3mLc+uiCK6v+?= =?utf-8?q?g5mDdh7yF1I5DPEdvSQZxEW1CspuqGSyjbDR7gBQi40KYxLfDJRHpAUHTRFJatXS3?= =?utf-8?q?Jl8rnOjpkTrZnSecZGFQrEJ7zVDAQLpVYtaIWqpLw74DPk7X/qdh3RDMTzalQGPu1?= =?utf-8?q?PJVUU56KclGO4N/lANNYHUmafUTWZA+Ghqgcg1DMGxSn2DZDzxTRuusnHoPQ+Iw2p?= =?utf-8?q?ho237NSWtBjFpGxpY4/yc9cz304SVFPCBDuaKtFmQ1eNcnOWKhVLuCGV+bkUHxxDw?= =?utf-8?q?mXalauWoCajkfww+/583wGEcSC/9NkWDKj2X9Ue1aiRbt1aMX/O6KhIddeyG/GFKM?= =?utf-8?q?1exWnKDU7qBuPga3LRcZU6cKmD11qICh6GtwABbc3Ox999x+unpOfl8ePslJnjUtR?= =?utf-8?q?Mo31267Mn8BsCr4vs0m+BFs4H4er6pQ56W4h8gkyBTNb3+WCFxPceZzH5SWGdWmFN?= =?utf-8?q?XoBfOfVdCDHtfFOVJP50eg664Bm9blHeho/kXHY17vWM66lzfhrxd2WWG4dAnAWWh?= =?utf-8?q?pzvItVvZT/2dtTvJ4l2lYTu2nmjNBr1HxeufvXYVsN17PO3zCINJtmXv9+zc5tnGF?= =?utf-8?q?uiPMW1d+0ly7CTZu6IDY6oQBASfKbRHM3K5ymK2+gVHdvVDJsI0PifFCrsLWD3Ec/?= =?utf-8?q?gSzmf2Mr+VM8EJ0ozQMExt2cBqDQkoZxoeqpyQ/tXO/Q+b+fS6nniFvo2bc7/S0uM?= =?utf-8?q?hrlGjz5jKrajxgW+yVEfTBBxAbZUxU4XvQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 697728c3-2194-4a48-1dc1-08dad10d6062 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:21.0200 (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: EZNaPVXxjmAoyZxAlLcNfGJqVJMFJqKVK3OHlm2N6v7ytEOUmwfrggRbD28pmOez+ipwAxKrzps4jWSX6Vkqqu1WGydQ8Xrq0GHgDjekWv8= 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 method to report device information to the log is the same for both physical and virtual functions. The implementation is however open coded in each code path, break out the reporting logic to a helper function to reduce code duplication. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- drivers/net/nfp/nfp_common.c | 27 +++++++++++++++++++++++++++ drivers/net/nfp/nfp_common.h | 1 + drivers/net/nfp/nfp_ethdev.c | 23 +---------------------- drivers/net/nfp/nfp_ethdev_vf.c | 23 +---------------------- 4 files changed, 30 insertions(+), 44 deletions(-) diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index 71711bfa22..f112a70980 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -188,6 +188,33 @@ nfp_net_configure(struct rte_eth_dev *dev) return 0; } +void +nfp_net_log_device_information(const struct nfp_net_hw *hw) +{ + PMD_INIT_LOG(INFO, "VER: %u.%u, Maximum supported MTU: %d", + NFD_CFG_MAJOR_VERSION_of(hw->ver), + NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); + + PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, + hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", + hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", + hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", + hw->cap & NFP_NET_CFG_CTRL_RXCSUM ? "RXCSUM " : "", + hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", + hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", + hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", + hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", + hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", + hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? "LIVE_ADDR " : "", + hw->cap & NFP_NET_CFG_CTRL_LSO ? "TSO " : "", + hw->cap & NFP_NET_CFG_CTRL_LSO2 ? "TSOv2 " : "", + hw->cap & NFP_NET_CFG_CTRL_RSS ? "RSS " : "", + hw->cap & NFP_NET_CFG_CTRL_RSS2 ? "RSSv2 " : ""); + + PMD_INIT_LOG(INFO, "max_rx_queues: %u, max_tx_queues: %u", + hw->max_rx_queues, hw->max_tx_queues); +} + void nfp_net_enable_queues(struct rte_eth_dev *dev) { diff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h index 36c19b47e4..02612dbb58 100644 --- a/drivers/net/nfp/nfp_common.h +++ b/drivers/net/nfp/nfp_common.h @@ -404,6 +404,7 @@ nfp_pci_queue(struct rte_pci_device *pdev, uint16_t queue) /* Prototypes for common NFP functions */ int nfp_net_reconfig(struct nfp_net_hw *hw, uint32_t ctrl, uint32_t update); int nfp_net_configure(struct rte_eth_dev *dev); +void nfp_net_log_device_information(const struct nfp_net_hw *hw); void nfp_net_enable_queues(struct rte_eth_dev *dev); void nfp_net_disable_queues(struct rte_eth_dev *dev); void nfp_net_params_setup(struct nfp_net_hw *hw); diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 0956ea81df..f661819fc0 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -619,33 +619,12 @@ nfp_net_init(struct rte_eth_dev *eth_dev) else hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); - PMD_INIT_LOG(INFO, "VER: %u.%u, Maximum supported MTU: %d", - NFD_CFG_MAJOR_VERSION_of(hw->ver), - NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, - hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", - hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", - hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", - hw->cap & NFP_NET_CFG_CTRL_RXCSUM ? "RXCSUM " : "", - hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", - hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", - hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", - hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", - hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", - hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? "LIVE_ADDR " : "", - hw->cap & NFP_NET_CFG_CTRL_LSO ? "TSO " : "", - hw->cap & NFP_NET_CFG_CTRL_LSO2 ? "TSOv2 " : "", - hw->cap & NFP_NET_CFG_CTRL_RSS ? "RSS " : "", - hw->cap & NFP_NET_CFG_CTRL_RSS2 ? "RSSv2 " : ""); - hw->ctrl = 0; hw->stride_rx = stride; hw->stride_tx = stride; - PMD_INIT_LOG(INFO, "max_rx_queues: %u, max_tx_queues: %u", - hw->max_rx_queues, hw->max_tx_queues); + nfp_net_log_device_information(hw); /* Initializing spinlock for reconfigs */ rte_spinlock_init(&hw->reconfig_lock); diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index d1427b63bc..170f7eeb93 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -376,33 +376,12 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) else hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); - PMD_INIT_LOG(INFO, "VER: %u.%u, Maximum supported MTU: %d", - NFD_CFG_MAJOR_VERSION_of(hw->ver), - NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, - hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", - hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", - hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", - hw->cap & NFP_NET_CFG_CTRL_RXCSUM ? "RXCSUM " : "", - hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", - hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", - hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", - hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", - hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", - hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? "LIVE_ADDR " : "", - hw->cap & NFP_NET_CFG_CTRL_LSO ? "TSO " : "", - hw->cap & NFP_NET_CFG_CTRL_LSO2 ? "TSOv2 " : "", - hw->cap & NFP_NET_CFG_CTRL_RSS ? "RSS " : "", - hw->cap & NFP_NET_CFG_CTRL_RSS2 ? "RSSv2 " : ""); - hw->ctrl = 0; hw->stride_rx = stride; hw->stride_tx = stride; - PMD_INIT_LOG(INFO, "max_rx_queues: %u, max_tx_queues: %u", - hw->max_rx_queues, hw->max_tx_queues); + nfp_net_log_device_information(hw); /* Initializing spinlock for reconfigs */ rte_spinlock_init(&hw->reconfig_lock); From patchwork Mon Nov 28 06:53:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120183 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 E3FC5A0093; Mon, 28 Nov 2022 07:54:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0295B42D15; Mon, 28 Nov 2022 07:54:27 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2130.outbound.protection.outlook.com [40.107.244.130]) by mails.dpdk.org (Postfix) with ESMTP id 51DA54067C for ; Mon, 28 Nov 2022 07:54:24 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X3t4M04Uqgt50rA8sPmxAHuwRp3ESx5LwKiU/Q0191HZaIJ/t2VPz3+eOuRelWKFfGTEIHK9XnsmBIFD5Oxjve/qInWX6XvWqebWfsj0S30xjxE8OfK1wEZjK9gzRrr043rZNMKIZA2EVXnFnK+QyhA8wcDDoagLBDha/ZvE3uVAhR70g9psw3a65fnXdbBdsVsk4yZII+7sNWbB89ihIyMrkxcx9r283AMDW0Rg4IODyJVy4F5QkYI+0Y8NgFL9bUczrXYYTqfyVlGQ1JXNbZXAfcZ4XHRYKUBnO0HgAtSPVS7P+V3wmPVHEjOHcwIt5YrCLT7i9uYnXgx+CY45PQ== 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=AS0yF1BWE7zMCiL0bLmcKqJX0vv7hwa9jsV1sq3XTIE=; b=fuZ3+sxmT7nT7socifl/4AS2NmYPXXiTpVYXFpP5vkUJH5sc9A+PulnxpuDYnD+gCZN6mY1mriDUPJugMKJf64rgIk9N/qo6mH9qnnIYpi2Jg6daNUxDCIB9g1zKh+7VOr+I5u5e1cz9NybfbRlrR4q/vpjm450YE/JJ2QMIEovEeWlPRYSsOoKFxcq5J7wZmEyTbI3kmRle9w/3Vitdfk572tW3x4Uy1WaEvR2ujK8Wh/Rxlu0/g2BlB8gGVviaAEzFDlF4ihAcmSHMTs+E3FceHs1hboFYO+ixElGyrweVebIQldVcXL7QrJ1CzohMMyTSIExmkZdtqUXDl6y/rA== 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=AS0yF1BWE7zMCiL0bLmcKqJX0vv7hwa9jsV1sq3XTIE=; b=Z3BRFWr7kUVGUdk5LzzZW7tKbu4n3xBlvg9mwMi5BtoLBQH72ZCsj4eF7lK6XfKSkr27qTzzzWBHO6XKq3dNmN6r8NTl2evNEXgUUI9ZXZhgN5LIEMY3maljTmau7+Yc1tY40DTV+PDg8bU2sHBM2A6bAt+jjtxeLD1235ofcuc= 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:23 +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:23 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 2/8] net/nfp: modify the logic of parse metadata Date: Mon, 28 Nov 2022 14:53:53 +0800 Message-Id: <20221128065359.12737-3-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: e5ebb688-cb8c-4409-e1a1-08dad10d61af X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: h73DuHLFVXujXE14bzvTZdHL3mOAvF8QHYrN1fHR1MSrw317VdvhYds9LCcJkulGRiK2ODd57kcD+xFSAh7a+YNPY4/ZebC0IYGn0L1+ynKsBQoTRQTJsNuZSNnCZnd3EcN3d/ecQuznxQ2xC2JV338u5tfXvk1s3JJpEZuJq9sH7T+COugNDT1NxCQTYSRkfvUOiiC6XlY8nPLnVtmYWj6IeWlE7LRh0+G3smAokOZz6rJvIwOK67fL4jacudXFrqp+FUqGNxt68bJfGr+mbB3khsvJPjUGnRnv2TQID4mrzjxNAzTAHW3hl2dHoV5lwMiuYwFSQAWHHJrPTZhe8oI8+6p0N776p/KR9pZb1l30uaSTqDCNsxSS3cQ/zWvL6n8AHv4pc313nnZHG0pA/fByo7hc617bN8shEK9XfpPpV29s0dney9CZITAtKJDnQBpuFaHRpD+EK/MagS6hWgRpZu3mjPo0epb9LcIbOtkqOQ7IFo567Q6woX3TkZmmECYHXTKjembBlhkmIfB+dxte3T7FjRNQ4edMqJXt07sPQczAPd2BoKDCiDPwb6Fy3Fsp8LdtmWVGAFF2bRrKCtu/ht36remS3Nit0CLCNjLGT7hS1wTGa0ZvyIDFLRGepW387UvtJ5Elfp81OeYlXjVe3AN2NPDhA3XmzhFZ/r0LAmk72r3weM1CSr7EgX5bnuUAGgUbvmbiH5DhD+24nNDgHJthohr1oug4Uf+seQrKUg5Ucp58cL1FnukXPJpH 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?6tCbb+85el4cNaZthL2z3cGsPsoT?= =?utf-8?q?ImEFp8HkyQZfJm6HfuCxgURQhvqaABzxnemRJnh30yu/FEbcHAiGUb78OeIivt3Es?= =?utf-8?q?UWzzfidSLheF5OyhFSTmVqt3gmQJE17IsYbH0OcL1ZSCXoINhq0W+mmu5VTROn7YR?= =?utf-8?q?iR729dnfynaaVD4jACqAnqEIZcJ+Dz1bC73KJCFekQ75N6+8Pcs0FmlYjsl10H+J4?= =?utf-8?q?zXN6jta4Orp6RS20MjS1qPIIV6v8OqDfFDQodCFUJqnkTNc+8CyDE+laheAVANKkA?= =?utf-8?q?TpxM0w1x+vkM0yR/DmALVpy3ZyItS0unOgMEyHYUfCiDOLvjE/4mFpyaEQPeOj1EL?= =?utf-8?q?H3u8XR5o3vJ9PV95G+LKgiN5D4cmArMebZv/H1QvsBAb1t5q9EdvILNFaImxV5+fS?= =?utf-8?q?oK/QePLV4P/KpEZ4jAfFGjbHPJ5MFc1LGs0py+WfgxjHdWOjYpKgxZKmMCzZp5WvC?= =?utf-8?q?Q/6bbjZ/RDVuuPLzfPW/2xH+Ks4jSrpCUqXPClAQqecLtRo22MjTg3HPsU2nU1kJI?= =?utf-8?q?V7P6cjgMhvx5VXSWaFwBGFOEnP7Gq+bxgnrcEYeWN5BOnlInaUuRwiJJUknZ4REnl?= =?utf-8?q?8FOuvVslSqCqn5ZAfc91oPVLmylX5bP6TGtJwdMg6dnaO2x9fedQ35FzeHm3pqwMQ?= =?utf-8?q?MTZRlLKUi90OzeZysBhcroIC7kC4cs2JpQ2qVlwfZREiErfIzjDWTEbSSPf9QMRjh?= =?utf-8?q?m29rXHdvb94gwWLSaJ6EwdhnScRAsVelp/+377CHwvivZ52mHCeJ1eZGTiwXxUasm?= =?utf-8?q?v46jX1lbhQHNo6nyD4YD9jV8bc+d2Z/c54CAVZiCkpjFusHMTkdIP9HKLDa0Wi0CY?= =?utf-8?q?rZc0VgXl6g96cifFCgQXJzxP92gV5n9HfMjbRP3w5i8Ofqypn3rLmmPThXPbwpLHB?= =?utf-8?q?Yt0laAjZgucp/kjW6+tA50s+dOEPt0wul5lmZ9DQKr0mqhQcECAoppBq25k6QDK6+?= =?utf-8?q?+Q2J2Uhn92VXuw/Y6zb+O4HD8zJG6Gec87HAFO0G22XRzH2CCroek7eQZOpgviOnc?= =?utf-8?q?cQz8QoWJGTEAu1GDziwUc3fZdacHt7qwpTqddUqEPfr1ZyoR+OEi4bmJ4qrkJVQVj?= =?utf-8?q?rJC/UsmEnsIJG7LsJlwFR8u2fE3y6kzR8H4g6uVRGlv9UFCP1+O31D4CBINtEK1e4?= =?utf-8?q?wUUrxCF9gfpOHE66u4VWqZpLi1YNoJAx7gfsjEr+5Mhhjf0AWhtMcOwUTE65vSToj?= =?utf-8?q?RYemLDHO3ogPLbaQY+4+9RMtg6SGNm71uTtpoyTTyO9HHFzu9li+5bTA/FufjdTOB?= =?utf-8?q?k1PDyJjy1awMeAw/+snw0wVnW2fKAb5eeGYelBkDC27iX///Ng60Bdd3ejl+hVk7w?= =?utf-8?q?N3izqWeESjEqG7+KJ2B7CqzzZBjULmwHSDppJk0J1qcSpeeAevuLd7NjaIpMveX0l?= =?utf-8?q?QdOvXNkrVQQig8dGXGAcCIElXTo5ys59xF9GQgkVImjx6sj9yUJqDksZ2S+XaY3Es?= =?utf-8?q?7U7UTwlHF9RKm4a6DMxVLj9XHvds2lRRSMM1bRCGO3dJyLLD5AACAk1FB0fwXEg55?= =?utf-8?q?ZwyJfqQOoL5mWYDsenJNwkFjEle9f+61SQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5ebb688-cb8c-4409-e1a1-08dad10d61af 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:23.3635 (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: Z5PdNV/qdi9WO29mxQVbhrR4xgTCDwmjqO54bTBDncN8h/v+mnsgnuFGdZF9J7nIa+Gx1dCPNikVes/1fGRuEZ6qdW6HaUSiwk82zOB55Ic= 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 Previously only one metadata type was supported, now we need support many different types of metadata, in order to achieve portability and extensibilit, so adding the new struct nfp_meta_parsed to modify the logic of parse metadata Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/nfp.rst | 58 +++++++++++++++++++++++ drivers/net/nfp/nfp_rxtx.c | 94 ++++++++++++++++++++------------------ drivers/net/nfp/nfp_rxtx.h | 14 ++++++ 3 files changed, 122 insertions(+), 44 deletions(-) diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index b74067c875..8034b2a668 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -213,3 +213,61 @@ PF vNIC. The ctrl vNIC service handling various control message, like the creation and configuration of representor port, the pattern and action of flow rules, the statistics of flow rules, and so on. + +Metadata Format +--------------- + +The NFP packet metadata format + +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 +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. +:: + + 3 2 1 0 + 2 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type7 | Type6 | Type5 | Type4 | Type3 | Type2 | Type1 | Type0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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: + +RX +~~ + +NFP_NET_META_HASH +The hash type is 4 bit which is next field type after NFP_NET_META_HASH in +the header. The hash value is 32 bit which need 1 data field. +:: + + ----------------------------------------------------------------- + 3 2 1 0 + 2 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Hash value | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 01cffdfde0..320387eb7c 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -116,60 +116,65 @@ nfp_net_rx_queue_count(void *rx_queue) return count; } -/* - * nfp_net_set_hash - Set mbuf hash data - * - * The RSS hash and hash-type are pre-pended to the packet data. - * Extract and decode it and set the mbuf fields. - */ -static inline void -nfp_net_set_hash(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd, - struct rte_mbuf *mbuf) +/* nfp_net_parse_meta() - Parse the metadata from packet */ +static void +nfp_net_parse_meta(struct nfp_meta_parsed *meta, + struct nfp_net_rx_desc *rxd, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mbuf) { - struct nfp_net_hw *hw = rxq->hw; - uint8_t *meta_offset; uint32_t meta_info; - uint32_t hash = 0; - uint32_t hash_type = 0; + uint8_t *meta_offset; + struct nfp_net_hw *hw = rxq->hw; - if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY)) + if (unlikely((NFD_CFG_MAJOR_VERSION_of(hw->ver) < 2) || + NFP_DESC_META_LEN(rxd) == 0)) return; - /* this is true for new firmwares */ - if (likely(((hw->cap & NFP_NET_CFG_CTRL_RSS2) || - (NFD_CFG_MAJOR_VERSION_of(hw->ver) == 4)) && - NFP_DESC_META_LEN(rxd))) { - /* - * new metadata api: - * <---- 32 bit -----> - * m field type word - * e data field #2 - * t data field #1 - * a data field #0 - * ==================== - * packet data - * - * Field type word contains up to 8 4bit field types - * A 4bit field type refers to a data field word - * A data field word can have several 4bit field types - */ - meta_offset = rte_pktmbuf_mtod(mbuf, uint8_t *); - meta_offset -= NFP_DESC_META_LEN(rxd); - meta_info = rte_be_to_cpu_32(*(uint32_t *)meta_offset); - meta_offset += 4; - /* NFP PMD just supports metadata for hashing */ + meta_offset = rte_pktmbuf_mtod(mbuf, uint8_t *); + meta_offset -= NFP_DESC_META_LEN(rxd); + meta_info = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); + meta_offset += 4; + + for (; meta_info != 0; meta_info >>= NFP_NET_META_FIELD_SIZE, meta_offset += 4) { switch (meta_info & NFP_NET_META_FIELD_MASK) { case NFP_NET_META_HASH: - /* next field type is about the hash type */ + /* Next field type is about the hash type */ meta_info >>= NFP_NET_META_FIELD_SIZE; - /* hash value is in the data field */ - hash = rte_be_to_cpu_32(*(uint32_t *)meta_offset); - hash_type = meta_info & NFP_NET_META_FIELD_MASK; + /* Hash value is in the data field */ + meta->hash = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); + meta->hash_type = meta_info & NFP_NET_META_FIELD_MASK; break; default: /* Unsupported metadata can be a performance issue */ return; } + } +} + +/* + * nfp_net_parse_meta_hash() - Set mbuf hash data based on the metadata info + * + * The RSS hash and hash-type are prepended to the packet data. + * Extract and decode it and set the mbuf fields. + */ +static void +nfp_net_parse_meta_hash(const struct nfp_meta_parsed *meta, + struct nfp_net_rx_desc *rxd, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mbuf) +{ + uint32_t hash; + uint32_t hash_type; + struct nfp_net_hw *hw = rxq->hw; + + if ((hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY) == 0) + return; + + if (likely((hw->cap & NFP_NET_CFG_CTRL_RSS_ANY) != 0 && + NFP_DESC_META_LEN(rxd) != 0)) { + hash = meta->hash; + hash_type = meta->hash_type; } else { if (!(rxd->rxd.flags & PCIE_DESC_RX_RSS)) return; @@ -245,6 +250,7 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) struct nfp_net_hw *hw; struct rte_mbuf *mb; struct rte_mbuf *new_mb; + struct nfp_meta_parsed meta; uint16_t nb_hold; uint64_t dma_addr; uint16_t avail; @@ -338,11 +344,11 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) /* No scatter mode supported */ mb->nb_segs = 1; mb->next = NULL; - mb->port = rxq->port_id; - /* Checking the RSS flag */ - nfp_net_set_hash(rxq, rxds, mb); + memset(&meta, 0, sizeof(meta)); + nfp_net_parse_meta(&meta, rxds, rxq, mb); + nfp_net_parse_meta_hash(&meta, rxds, rxq, mb); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index ced05fde90..4cbf4080c5 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -25,6 +25,20 @@ #define RTE_MBUF_DMA_ADDR_DEFAULT(mb) \ ((uint64_t)((mb)->buf_iova + RTE_PKTMBUF_HEADROOM)) +/* + * struct nfp_meta_parsed - Record metadata parsed from packet + * + * Parsed NFP packet metadata are recorded in this struct. The content is + * read-only after it have been recorded during parsing by nfp_net_parse_meta(). + * + * @hash: RSS hash value + * @hash_type: RSS hash type + */ +struct nfp_meta_parsed { + uint32_t hash; + uint8_t hash_type; +}; + /* * The maximum number of descriptors is limited by design as * DPDK uses uint16_t variables for these values From patchwork Mon Nov 28 06:53:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120184 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 26CD2A0093; Mon, 28 Nov 2022 07:54:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3E70F42D18; Mon, 28 Nov 2022 07:54:29 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2103.outbound.protection.outlook.com [40.107.94.103]) by mails.dpdk.org (Postfix) with ESMTP id 3596D42D18 for ; Mon, 28 Nov 2022 07:54:27 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e53AtZK3gf6u1H+fVD/L2IR+uJNftYi+PBF9/yBnwFYG6lVLSs1/AARfh7WHj/WJxyaxA66MTmUJRuPzYAuRF2XD/HuXExFn01IM/fL59J5YNnqIUARSolhxkhskr1X7nSxo/fb4MhptFBG4yoyzIY30mNqdezh3XmljoEm0lnl3gfQ0m46I6wLtfge1VmmyUttetNhYYy7M6gEVp8dqBd9ey+rgGL36hv9A10T5q+CyE/JNuSGYMUPJRvsF9yAuKWZgRTyDS6cms4TdxlZYh/mLWaUwC1Ptu2n+M0NjQH30I0Wrt8h16FRKrzF7qvbTBcvhJsqhr5Gl1X+mS0jwBw== 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=y4DzO262+BW8QTokZHpgWstxoJyGdRVV91NppnpJQ9A=; b=NABNG60edVCkajjKih+ECb0y0i+HHp5QEiKOlPxe46iHDsj4KSBMyLJ+mpzw5VqDacoJ50mg4WoHR1fzoJulesJjZdEKMdNDU4V2BIBAN/9RCr+Ku/PNAaQSspm43H/hsteLsH62rkThLWr70PbteDOOOVxcrAaNqfejT6oMsuJx6g0La/S2+d91rz2j+Kro6KT6/6b7N0VNSglrEGKjjvxGf9fuzDXADk4ZApvsbmt1tPbCM5eZCutr1mUbW3nJZa0/+wYDSqxx/cHJc6IuLN7eF8RBsvM/XCCJASfWfeIi6NRcgxnPk0ejJZ1Im71WLPZWGGcEFhe1FVM5L8NfPQ== 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=y4DzO262+BW8QTokZHpgWstxoJyGdRVV91NppnpJQ9A=; b=o1vJgC/uk7HoXDRVmNAFEkpb04ZqAfs2/3y2ekcCas2XNmrmcq73q7U3sd+GxO/biny4MYq9aJ79WefujcNNvV94aX4t3xt0+n3GFs9pPaBVKLLw0OsC803O6qMdI5hdcVWhkQMro1gSQKFN2GalHZsQ+OnsxAaDLGJWWn9kIg8= 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:25 +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:25 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 3/8] net/nfp: add new metadata type for achieving VLAN strip Date: Mon, 28 Nov 2022 14:53:54 +0800 Message-Id: <20221128065359.12737-4-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: f084a35e-fd0d-40e8-42c2-08dad10d6313 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x4kvWYpZ4o9Tics0KVICK82Swsawp0EnD2gRiZ1WH5wZAW/3+OsMT8JJEMhQpZ73I4H9vo92B0dm1MDpSLnOizkAPGcrCtLoo2BgEl5zleKwaMhg0mE3Ffp8JCvGlmDmx3OQlyF8T3ldNtUPtkwuHxgJGHZZ0RSYDKSp89oFLNB41Pr10YY0jqLyp3gII9/sR6N6bthB578tEHp333LJD5TDoQJyTfETZSq+UuLkFxNGyNAaUqfuSLZ/NZZY5avj42wCw72Fkjo9QJ7/eXUJHMYepJmRfUHEanF6C30X9PRvOYWR59nkWxAY2p3Y+qcwS5ZNR1Pcc1KZJxjyQzVpKSqiSUnmfZhLNf6Pxu/xUeK3YeTkNnUriQ6jX3ncIffGJRkobJuzMg0vKeEGKy+L+GqZfF3zsWOTPAr0cfoCUFUff2tFzAoJUqrFDbcuZeElGRthlZiVYupMSJCaSznOhuYAqcfggVfal828wRF2CBqWEWO4VwnJb+bR1AxXQhXwKHbGgowStJZJElDgH2JCE2hfrm9Dgp4WiZ+5N5sWJ4RsjKWHzhLgWA7zg5ZV8BTmNROAvIO9COa4lZh6rVZFQDb1so/i/3/4OJj2S4YPSUhVwqLyE1tM7xiwFKIw8djprvN9wgzyJDCvaOK9UCus4KfKSoHqx40+zA66Cfqr7mHrKr9UBUx1yG/56Ks8kQJQbJ2GtlIpwY8RsQ0U6VWdnuswpheyvMUbx17/U6yj162fcA14DDeSfGsIPZkOUDTu 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)(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?+E/V4Ty/RqklfrvCXGuHES7VwsEE?= =?utf-8?q?ObW3Q6we3bM/dNk7QmzWoEJSDFdEMaomWOxPOzTOZaR72TXPp9mqvONYd46GQVhrw?= =?utf-8?q?doZMMJltI+MbGzY41GGQsHu/HVq4iOUHv92Sxa31EAcaXYdP+zN3V3Wb88cvJGOcX?= =?utf-8?q?Kn008j6OMpUehAZnS6XWzi0ykIwRPDuSRIEAePgeH+uL+By1srj9PU4AW45IhD5BZ?= =?utf-8?q?R5zfbV1EFybyO7QoArPfYdAxdHRhNAFllilsorBqssqrx6FMdxeDLD56NrkyJW+Ja?= =?utf-8?q?Xg91eAS088/43Yij09SIotB5pcO6brNPAHhQtUsX8SDR72A3PkyHyV35Zk+kNoDxb?= =?utf-8?q?cjmeOp+/Fib8/qFwGGCTHEbQf1WzDG8PLOvHX+4C5vdW8OmD+q+uO+a5hwkKWmSWx?= =?utf-8?q?vy9vTnUS6SmW1mwA3fwF+/JgJqUiCV18R53NtFopY9jr3N2z4p59Af6POOC4LbqYh?= =?utf-8?q?mZaneyPZZYlPPwHFZZJTaR37qTMbmroDsbI/r71G6Ej9MDL1ZEKUgWk8ZWIX+xZMN?= =?utf-8?q?0ulBAiWGLKtIsMJsVO24arE1WNKzfbaqIgHnVHyh4s7HWOpNj8MJjwbUQ4dJvkU4Z?= =?utf-8?q?XV+SVhl8I4qh6vzsFBJV2muzkf9zUPdE0k4d+yTOdmFU732vnLtl7I7a/I9iJ2ZTh?= =?utf-8?q?4acofaQNt5AN5mtJx9DT93Gy72md5YF+XrO7Hzk+Aa7SdFKIsyVGlAXsGTXfInZba?= =?utf-8?q?zk26I6BVUjNbV7oDmk8mINq+3qoftsgT3vyAHy5OeiRHOTN2BINrSvvWKqIWZ4Apj?= =?utf-8?q?gGrlqizfWYoux+7auyINIB59DRCjZDpAYFos22jwgjSU2QGhi/3IKvBbHvP3DVEOl?= =?utf-8?q?hhAkAfYdzebbgPnlyD4GPMfZM8nrEFBYtpuZZWqsggYTMwWnjovrROXExEThxsqJi?= =?utf-8?q?tg9pS4HkhIKGRMGIF6kIp4q47JVTcXkNzkP/Fz/137/9C5nlKEg/5bi1/KFkfrZJm?= =?utf-8?q?puUYibW3nZHwU1Fa/ST/IjXwbFPWGdfCEF6KG7EqinWuVb/94z0PFb/261TXna7yd?= =?utf-8?q?toLaNBgJ4egIJiCzk7GZhpEk+9twDRVzA0wHZWF7bGDOs2rYGaHfpg+aU+CrlzZnO?= =?utf-8?q?JwHD/bZkoyR0mRmhPukW1citwvigC2CSMLBrrJsGGZ3zRWlCnYWnOiRAGMfgFrxIv?= =?utf-8?q?C2aghKGTZZRb3qpxbmjmPB8Dr2LhzIQ0IAdZr0SMmVJEbx31cQnic+HGYu7fSQHYO?= =?utf-8?q?QhQlhAacHhNiFo79gWoa3HipLK9ruUZMts5cnGLYIaZZpZlhA5i8FMynfQwEVnjsv?= =?utf-8?q?HuTP0VFRRpIo6MqKPGQaNa01ICgSu+QEZHkHAKHdENH+qydKOLIUTYGQRZm1GSxBD?= =?utf-8?q?RBuDTsVIibGNoPPA9v9vveQe2JDRMKFO6zDIbuCMGmb+Ceaj6aLl+oJzUhkTR3XGa?= =?utf-8?q?tztOk0K8Yrm4sJsaLIDdPbSYday1UI4g5Cal7BPV2RjO08w9vTR9WmCJVasVcb42O?= =?utf-8?q?12VG8/W5Z9Jpry+cyGYJhP7dmyv11zktArSZJ1X2I2umttjjig9xkSGItQvKbhNUa?= =?utf-8?q?nCDvHi5NzAxk7+KLnDn7YhuLQ0O8m9elFg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: f084a35e-fd0d-40e8-42c2-08dad10d6313 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:25.5519 (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: QnyKwOHT94aEddLLK1jfX4600tbEBzkDwYs6qjqun3N0pp7Fcw5TR1bQosaaK41qhIseNmyXpc366h1Q5qbb/lwFaHrECHBW5IIQk7mvZrg= 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 strip information is stroed in packet metadata. The field of this VLAN metadata includes VLAN TPID, VLAN TCI and offload flag. The new metadata type is NFP_NET_META_VLAN. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/nfp.rst | 22 ++++++++++++++++ drivers/net/nfp/nfp_ctrl.h | 10 ++++++++ drivers/net/nfp/nfp_rxtx.c | 51 +++++++++++++++++++++++++++++++++----- drivers/net/nfp/nfp_rxtx.h | 22 ++++++++++++++++ 4 files changed, 99 insertions(+), 6 deletions(-) diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index 8034b2a668..fffff00f1e 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -271,3 +271,25 @@ the header. The hash value is 32 bit which need 1 data field. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hash value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +NFP_NET_META_VLAN +Metadata with L2 (1W/4B) +:: + + ---------------------------------------------------------------- + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |f| reserved | tpid| PCP |p| vlan outermost VID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ^ ^ + NOTE: | TCI | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + f 0 -> not stripping + 1 -> stripping + + tpid 0 -> RTE_ETHER_TYPE_VLAN 0x8100 IEEE 802.1Q VLAN tagging + 1 -> RTE_ETHER_TYPE_QINQ 0x88a8 IEEE 802.1ad QINQ tagging + Tpid just be stored, now we don't handle it + + The vlan[0] is the innermost VLAN diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index 372d537462..a90846fddf 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -30,8 +30,18 @@ #define NFP_NET_META_FIELD_SIZE 4 #define NFP_NET_META_FIELD_MASK ((1 << NFP_NET_META_FIELD_SIZE) - 1) +/* Working with metadata vlan api (NFD version >= 2.0) */ +#define NFP_NET_META_VLAN_INFO 16 +#define NFP_NET_META_VLAN_OFFLOAD 31 +#define NFP_NET_META_VLAN_TPID 3 +#define NFP_NET_META_VLAN_MASK ((1 << NFP_NET_META_VLAN_INFO) - 1) +#define NFP_NET_META_VLAN_TPID_MASK ((1 << NFP_NET_META_VLAN_TPID) - 1) +#define NFP_NET_META_TPID(d) (((d) >> NFP_NET_META_VLAN_INFO) & \ + NFP_NET_META_VLAN_TPID_MASK) + /* Prepend field types */ #define NFP_NET_META_HASH 1 /* next field carries hash type */ +#define NFP_NET_META_VLAN 4 /* Hash type pre-pended when a RSS hash was computed */ #define NFP_NET_RSS_NONE 0 diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 320387eb7c..fb271e6d96 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -124,6 +124,7 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, struct rte_mbuf *mbuf) { uint32_t meta_info; + uint32_t vlan_info; uint8_t *meta_offset; struct nfp_net_hw *hw = rxq->hw; @@ -145,6 +146,15 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, meta->hash = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); meta->hash_type = meta_info & NFP_NET_META_FIELD_MASK; break; + case NFP_NET_META_VLAN: + vlan_info = rte_be_to_cpu_32(*(rte_be32_t *)meta_offset); + meta->vlan[meta->vlan_layer].offload = + vlan_info >> NFP_NET_META_VLAN_OFFLOAD; + meta->vlan[meta->vlan_layer].tci = + vlan_info & NFP_NET_META_VLAN_MASK; + meta->vlan[meta->vlan_layer].tpid = NFP_NET_META_TPID(vlan_info); + ++meta->vlan_layer; + break; default: /* Unsupported metadata can be a performance issue */ return; @@ -213,6 +223,40 @@ nfp_net_parse_meta_hash(const struct nfp_meta_parsed *meta, } } +/* + * nfp_net_parse_meta_vlan() - Set mbuf vlan_strip data based on metadata info + * + * The VLAN info TPID and TCI are prepended to the packet data. + * Extract and decode it and set the mbuf fields. + */ +static void +nfp_net_parse_meta_vlan(const struct nfp_meta_parsed *meta, + struct nfp_net_rx_desc *rxd, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mb) +{ + struct nfp_net_hw *hw = rxq->hw; + + if ((hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN) == 0) + return; + + /* + * The nic support the two way to send the VLAN info, + * 1. According the metadata to send the VLAN info + * 2. According the descriptor to sned the VLAN info + * + * If the nic doesn't send the VLAN info, it is not necessary + * to do anything. + */ + if (meta->vlan_layer >= 1 && meta->vlan[0].offload != 0) { + mb->vlan_tci = rte_cpu_to_le_32(meta->vlan[0].tci); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } else if ((rxd->rxd.flags & PCIE_DESC_RX_VLAN) != 0) { + mb->vlan_tci = rte_cpu_to_le_32(rxd->rxd.vlan); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } +} + /* * RX path design: * @@ -349,16 +393,11 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) memset(&meta, 0, sizeof(meta)); nfp_net_parse_meta(&meta, rxds, rxq, mb); nfp_net_parse_meta_hash(&meta, rxds, rxq, mb); + nfp_net_parse_meta_vlan(&meta, rxds, rxq, mb); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); - if ((rxds->rxd.flags & PCIE_DESC_RX_VLAN) && - (hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN)) { - mb->vlan_tci = rte_cpu_to_le_32(rxds->rxd.vlan); - mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; - } - /* Adding the mbuf to the mbuf array passed by the app */ rx_pkts[avail++] = mb; diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index 4cbf4080c5..a24ec9e560 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -25,6 +25,9 @@ #define RTE_MBUF_DMA_ADDR_DEFAULT(mb) \ ((uint64_t)((mb)->buf_iova + RTE_PKTMBUF_HEADROOM)) +/* Maximum number of supported VLANs in parsed form packet metadata. */ +#define NFP_META_MAX_VLANS 2 + /* * struct nfp_meta_parsed - Record metadata parsed from packet * @@ -33,10 +36,29 @@ * * @hash: RSS hash value * @hash_type: RSS hash type + * @vlan_layer: The layers of VLAN info which are passed from nic. + * Only this number of entries of the @vlan array are valid. + * + * @vlan: Holds information parses from NFP_NET_META_VLAN. The inner most vlan + * starts at position 0 and only @vlan_layer entries contain valid + * information. + * + * Currently only 1 layer of vlan is supported, + * vlan[0] - vlan strip info + * + * @vlan.offload: Flag indicates whether VLAN is offloaded + * @vlan.tpid: Vlan TPID + * @vlan.tci: Vlan TCI including PCP + Priority + VID */ struct nfp_meta_parsed { uint32_t hash; uint8_t hash_type; + uint8_t vlan_layer; + struct { + uint8_t offload; + uint8_t tpid; + uint16_t tci; + } vlan[NFP_META_MAX_VLANS]; }; /* From patchwork Mon Nov 28 06:53:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120185 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 8587EA0093; Mon, 28 Nov 2022 07:54:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9DFF342D27; Mon, 28 Nov 2022 07:54:31 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2118.outbound.protection.outlook.com [40.107.244.118]) by mails.dpdk.org (Postfix) with ESMTP id 1132340A7F for ; Mon, 28 Nov 2022 07:54:29 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nId7CrvYqgGlrSg0p+6/DDw1UMcbEXqjGFmen5y66XgcpCWuztGdt3ij2m/nFrhlhaQjFPqWmCyTwcCmdKnlepPexRN7VJgnQsRO3mpiFIjFjnO3EziEmJwe3//K6P1uVzFDfOLzW+0rCugh67pJDwBjvku+8gb8X4K3Sfydp6PqVqw6p8XSSa7SIjv/2FMLpxzv4EY78d+wicRCBiPy0pCaLU6EAVkTQ9BAeNuT8kLMNd3RPsISgMPmCiFKA1jDw6b5IO33Gx3fdMdJXwYqCSB6vrOTOaOHI0y0YdOFxR64pgASrivJ3r84v+zBbt6cvoBZ1CA7O9B7Bt22CndNLw== 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=bWF2uDJNOVc5hZcZJZHzfUxtuuLZK3FxoNsnJewS4oM=; b=AxN9w+ZSlgnW5S+vKBJQQ0fYDsaZAhDK9DDc26P+HE/RX6X7cHryJuI0ikmeZh2VBCWeo3n3XBIZNmu1EMyerXQaLkkZzLHgK5ZJFojsMCSAqlIvi0/tfPrEB8wpFf04ROOB/tN78uzAxZGpnyTOBQjRVkMTu5Sz4mnTtZEicbilVmDRTBYc2MRQouLujSmu2tOl7n+KVlFsLMOI0ZKM4B50VNZyjGm9g0CQC3KrBM/5eXTwRgAYfKBFlIs+MLy9ddb68WvytDZsNsYIwBZQ1HjqlgCef4cS5TQ1ZjW2a4JvB4lxidI/ynFcChI9DRFv1cEyi8zSEGLfjBVYPRyMhw== 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=bWF2uDJNOVc5hZcZJZHzfUxtuuLZK3FxoNsnJewS4oM=; b=uomg9q7yROZ0OokfaLT0NOx9QVW6k+d6VbdOwy6Ax0LodlQIlmjHJ9VoeJskhTk7c1DukFgsLPHARrNljDMQ1l8rPgph/JiB9/yL3hhvinL9FsukRG3ZIoGNcU1pCsSAlV0geljcd2PMMNJxM4pOLJ5lhXj2cKxS+EGx0Na5g50= 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:27 +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:27 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 4/8] net/nfp: add support for QinQ strip Date: Mon, 28 Nov 2022 14:53:55 +0800 Message-Id: <20221128065359.12737-5-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: ae94095f-e5ef-43a0-dff4-08dad10d645f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5BVZAzTUFJHBuIAoyWXoxFfSc28YnZkc6k3VjGLk0N8xT1oelnubo6sMaKjw7XWjqIhxKeSSI055GtNFRz0rcu5SE24MV0P5cpdZynlHP8Q0cjiNcDUKgEk2KHdsZOKchKGfL/mXbZBfiCal70QKkjL7M9LuAv26WkWDqArRMNjsk9AdQO9HkUXTtV0W/q+A2vvuJWESZ8MYcuXzpM3B1fRE+H/EyHV+j6g1e2QR9QJMo++fmyOQEYP+ACayY0Kp7kvVeUEgKKH8LBlnEeuihK3Op990ffLylJMRc8LyVG7jD6ilb9EGIopYMsPpr5QlpGqGafeClPf1pIOKrHdN8wj8S5ZxA38GTUYCsepszo3qP+xN0jVkcZa/Lwn4Vco/Gj72d24pILB306obApJ9AxqjpZbFyDmhxhWpZzkY6Vu/F9LHfkTfS+Gbsnc861BbOE/SdmCGTH5jWZanepuLQsYSa0j/P6zKkK81WxIVlKVUkaSUjQfeuS8sxHeFMZWXnr2GeP9j2Fq252bTmNqk8jc7FItD+06rGZRYfmHvJxjKo09Cyro0SLtK/EzfHhAMrqPCEcZTn8UlGkKj+Mg3tJBH3vIDjx8gK5kvQGS9WQ/otbO/mXy4T/Q5fS10jw7ZmtKh8PjSBH2mKbf7I8v9HTX9bUN2SDXxN0cnIhMdAQ0HiMmV7KKngkawPt8PodYhF/P0qn74KuHo+kZNkz2f/yvMeuhDBZWAgA1cSmVueFdf5nfPBkGZRGIuhGZms9PR 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?8u81aL5BFqKXvatWagdiyc6OoOkb?= =?utf-8?q?R2RjXTz3JXHdVQSQNi7HOWgDerCgf0h6V6aBMotA0aqpUKwQkMgvB3rL1ZDhVYuL7?= =?utf-8?q?bFvvzANlFiCSvCtt0le8e6u6ntdJPFNM3MBHgoxXv+n0JV1tCmb5zxC5sSPNWGZRs?= =?utf-8?q?X++jkRtQl4IF94O5WqpjAdBIGi0ZJHlp8V44mVEHw97JY/s/it8YMhebyGcOQiEvt?= =?utf-8?q?RCBw9PZBkuZKtogAPx6Vx7FlLrkaO8w5u4ugzfXncouOvtevVFBc3IfVVL5GgDzui?= =?utf-8?q?dgLYUELeAdd1AQgfewBmdqxIzU6BKG9wEnFQoDAECxwumhAufsrcl212hcAxGhfCN?= =?utf-8?q?Xjz+aUPWzAdGzevqAklbiQkeXn5rRs3JSZUuK4/PrVI28nLFMj0D7GQIat70xTbsz?= =?utf-8?q?9gyYbInTGorDixiOppUrEHcvjvW58TUyXM9Y03X30k8eq96aan/T8hBokq3zkJGMl?= =?utf-8?q?fxYQZrqUprIyevwFKobe09txAABv/3gAFSxP+9FYUrziqdzImuvuNcWSxBCPCWCdw?= =?utf-8?q?vAk9xAV3lQJGKZDVA8qmsbGXuMT0AjJvvxcrMl9LbgrAWr87SOqhOAJlhFUwD2ICe?= =?utf-8?q?H4TBsu7HBOlySlPLU3YSOO+0zYK7hUAGYdzJMGPVYwZFUryjcgY/geHKcFM5UUy1i?= =?utf-8?q?z42EonUduOtWR8aqA3JUv9ONYl9uYvTWfN+miRJTqHsUFdH2tsZR4Zb8+7ROBx6lL?= =?utf-8?q?Z/rurII461uL2nkoTOSNdk5MHeNn6FIMjuAVCKpdYKh8N871aLMfNUEp0J7rK3Tn5?= =?utf-8?q?kWU4snHTSSfVpSF/vAj78rsyrtrHCIGbf7rDi3ZFJT/d5/c/5umywGDIz5/m1szcF?= =?utf-8?q?amLpcx5qbhw0VxRnxD0B7ipE3yrZRvXH9AvFlDlyF17/p+UfIt8hshKUY0Du0tc0+?= =?utf-8?q?XKkS13ZVeGB5D8QDskZz5IUqr5zM4r36W5gXuigzyswihRpPB/Cx+YF9e3wy0cGOZ?= =?utf-8?q?crURB8HN1v7CbNmLzsoKP8gwzNROHxMxIJsItvQgKjSQ7H+j2zNM9NMyO9R7robMG?= =?utf-8?q?tUtrX5dGJjs+42ujpRFfsh54D/Pn1tBslIHwFHpvAkQeC2TjctHRp1fQiMXnRDjqI?= =?utf-8?q?7HXb96zRNELiXmDfVdGvFDYVu0ng+cqSl1PEBPqzfkh3/+BxBzvaPmGv+5PmFpOgj?= =?utf-8?q?whmgUDx/AoVyP0R8eGEcbCU8DgdoZut1MjIaAKyJpiIxU0teQz7htn7F2QH955C3/?= =?utf-8?q?Dtiqbv1pnV9Gp/kP4g4fArXoS/TCXasdMOczx5KjQlDhzG7TiU91nM/gG8SCTic/R?= =?utf-8?q?6zROnOPDG7SqsIu4U1uvuOLQwD0Z5H8w//v3g28zsM3yTldtpwnJap8oA3DqwYfLC?= =?utf-8?q?9rjTFaAHjHdMu+XZCygT1zqI0PkHKrCpiaSDxTFqtOxeWzaFfVEadygKjF4vs8hB6?= =?utf-8?q?H3aWy06yRBpW5J5TAhldn77yeSJ+rOzBj1x2AV9J9Ir6eA9yUyxlP80umPnWodUjq?= =?utf-8?q?M6zbPLqM0KDNX5vQn98PAm52iCigCqia8o1jxN2bu2y5boD0MJMtdZyjEe73lLMPS?= =?utf-8?q?h7IilMxTgTUvJD083JjZd2PsQfYerQ+8Dg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae94095f-e5ef-43a0-dff4-08dad10d645f 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:27.7161 (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: yDs/tF3ZBbSty9AjS87KYTmUsV8xZdNDr4CnFkG7B8ImF0Tst023s7A6tDYjAwvZRDkybIvUeXKTGJYg9Ai/rlym7dEqhNCUrUSJBmXYWFM= 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 Control the offload of outer layer VLAN strip in QinQ mode through the RTE_ETH_QINQ_STRIP_OFFLOAD mask bit. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/features/nfp.ini | 1 + doc/guides/nics/nfp.rst | 1 + drivers/net/nfp/nfp_common.c | 19 ++++++++++++++- drivers/net/nfp/nfp_ctrl.h | 1 + drivers/net/nfp/nfp_rxtx.c | 41 ++++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_rxtx.h | 3 ++- 6 files changed, 64 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 9e075a680b..b15a1ec52c 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -17,6 +17,7 @@ RSS key update = Y RSS reta update = Y Flow control = Y VLAN offload = Y +QinQ offload = Y L3 checksum offload = Y L4 checksum offload = Y Basic stats = Y diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index fffff00f1e..2be15b63d3 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -293,3 +293,4 @@ Metadata with L2 (1W/4B) Tpid just be stored, now we don't handle it The vlan[0] is the innermost VLAN + The vlan[1] is the QinQ info diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index f112a70980..d1822f6b71 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -195,7 +195,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) NFD_CFG_MAJOR_VERSION_of(hw->ver), NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, + PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", @@ -203,6 +203,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", + hw->cap & NFP_NET_CFG_CTRL_RXQINQ ? "RXQINQ " : "", hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR ? "LIVE_ADDR " : "", @@ -401,6 +402,11 @@ nfp_check_offloads(struct rte_eth_dev *dev) ctrl |= NFP_NET_CFG_CTRL_RXVLAN; } + if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) { + if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) + ctrl |= NFP_NET_CFG_CTRL_RXQINQ; + } + hw->mtu = dev->data->mtu; if (txmode->offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) @@ -751,6 +757,9 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) if (hw->cap & NFP_NET_CFG_CTRL_RXVLAN) dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP; + if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) + dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP; + if (hw->cap & NFP_NET_CFG_CTRL_RXCSUM) dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_IPV4_CKSUM | RTE_ETH_RX_OFFLOAD_UDP_CKSUM | @@ -1042,6 +1051,14 @@ nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask) new_ctrl &= ~NFP_NET_CFG_CTRL_RXVLAN; } + /* QinQ stripping setting */ + if (mask & RTE_ETH_QINQ_STRIP_MASK) { + if (dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) + new_ctrl |= NFP_NET_CFG_CTRL_RXQINQ; + else + new_ctrl &= ~NFP_NET_CFG_CTRL_RXQINQ; + } + if (new_ctrl == hw->ctrl) return 0; diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index a90846fddf..106779c080 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -93,6 +93,7 @@ #define NFP_NET_CFG_CTRL_SCATTER (0x1 << 8) /* Scatter DMA */ #define NFP_NET_CFG_CTRL_GATHER (0x1 << 9) /* Gather DMA */ #define NFP_NET_CFG_CTRL_LSO (0x1 << 10) /* LSO/TSO */ +#define NFP_NET_CFG_CTRL_RXQINQ (0x1 << 13) /* Enable QINQ strip */ #define NFP_NET_CFG_CTRL_RINGCFG (0x1 << 16) /* Ring runtime changes */ #define NFP_NET_CFG_CTRL_RSS (0x1 << 17) /* RSS */ #define NFP_NET_CFG_CTRL_IRQMOD (0x1 << 18) /* Interrupt moderation */ diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index fb271e6d96..40f1702bde 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -257,6 +257,46 @@ nfp_net_parse_meta_vlan(const struct nfp_meta_parsed *meta, } } +/* + * nfp_net_parse_meta_qinq() - Set mbuf qinq_strip data based on metadata info + * + * The out VLAN tci are prepended to the packet data. + * Extract and decode it and set the mbuf fields. + * + * If both RTE_MBUF_F_RX_VLAN and NFP_NET_CFG_CTRL_RXQINQ are set, the 2 VLANs + * have been stripped by the hardware and their TCIs are saved in + * mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). + * If NFP_NET_CFG_CTRL_RXQINQ is set and RTE_MBUF_F_RX_VLAN is unset, only the + * outer VLAN is removed from packet data, but both tci are saved in + * mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). + * + * qinq set & vlan set : meta->vlan_layer>=2, meta->vlan[0].offload=1, meta->vlan[1].offload=1 + * qinq set & vlan not set: meta->vlan_layer>=2, meta->vlan[1].offload=1,meta->vlan[0].offload=0 + * qinq not set & vlan set: meta->vlan_layer=1, meta->vlan[0].offload=1 + * qinq not set & vlan not set: meta->vlan_layer=0 + */ +static void +nfp_net_parse_meta_qinq(const struct nfp_meta_parsed *meta, + struct nfp_net_rxq *rxq, + struct rte_mbuf *mb) +{ + struct nfp_net_hw *hw = rxq->hw; + + if ((hw->ctrl & NFP_NET_CFG_CTRL_RXQINQ) == 0 || + (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) == 0) + return; + + if (meta->vlan_layer < NFP_META_MAX_VLANS) + return; + + if (meta->vlan[0].offload == 0) + mb->vlan_tci = rte_cpu_to_le_16(meta->vlan[0].tci); + mb->vlan_tci_outer = rte_cpu_to_le_16(meta->vlan[1].tci); + PMD_RX_LOG(DEBUG, "Received outer vlan is %u inter vlan is %u", + mb->vlan_tci_outer, mb->vlan_tci); + mb->ol_flags |= RTE_MBUF_F_RX_QINQ | RTE_MBUF_F_RX_QINQ_STRIPPED; +} + /* * RX path design: * @@ -394,6 +434,7 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) nfp_net_parse_meta(&meta, rxds, rxq, mb); nfp_net_parse_meta_hash(&meta, rxds, rxq, mb); nfp_net_parse_meta_vlan(&meta, rxds, rxq, mb); + nfp_net_parse_meta_qinq(&meta, rxq, mb); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index a24ec9e560..e3e8b00b48 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -43,8 +43,9 @@ * starts at position 0 and only @vlan_layer entries contain valid * information. * - * Currently only 1 layer of vlan is supported, + * Currently only 2 layers of vlan are supported, * vlan[0] - vlan strip info + * vlan[1] - qinq strip info * * @vlan.offload: Flag indicates whether VLAN is offloaded * @vlan.tpid: Vlan TPID From patchwork Mon Nov 28 06:53:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120186 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 4291DA0093; Mon, 28 Nov 2022 07:55:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8E5D342D1D; Mon, 28 Nov 2022 07:54:33 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2138.outbound.protection.outlook.com [40.107.94.138]) by mails.dpdk.org (Postfix) with ESMTP id BB70C42D2A for ; Mon, 28 Nov 2022 07:54:31 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yjm/qTHtED/xwaO4GnIpqkgG2UdaTyJHs03N7eCm2g1t+xIAhaYhgahB3ZBGen+p8/jP6Ty36KdxTPsSNUfKELodUv3qkmJ7psKIJxBcfhJr8ObDcJRtGdSqEGIoRVkPt1YC8BOCicsHLTza0vKDqqcnGEc3soaus7Lj/5aIvBx0W8pLSC8H2IbEJ2SggDp8k5vKRs9vPTABUaf+nwZihwDB7aItS59iIlQnZ5tiqDXuPii/MoUyTcOeQw2M2n8GruOYdO8VGNhAofK5NKlPhEauw8XZ1w0vHJXfe67t4Z3/UOQ0uE+QzeE5yVkbsMJZyY+c8k7mcD7ErbBQVLDiEQ== 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=zu6OjFM0vafAuehRPJYwGyfF5axibFj6TrMTK8x87oE=; b=k31Eej0g8BklaEr/Yc6nyCIyj1CQZpSDAcDFTmQjJHNTKzrvsTvmVjXEvi3G6zEoC5+QifH/VjV+pLzTbGXRisWXy132SYxTQvmGBmVpbDSzuQ6TJYhouZtvRSmnj2VQC2JFpogvqp9worpPeCIKvVqx8gVYn9LWTI6Ei+2X85SypXopuoDRaiYvjdjYgeOw4ves1lbQce6f637zTxyQ1SC3hFqstfwOGKEauYVgkJjIgk0oIeTzb4hfHg2ohkyWyJDYOi0fc/WTgZcB7mVmMFEw3L3aqqTNtC78pLYSyjqEzneXQzx2LSvwEv8byYFiy9mswj9Koz3V0dDLEU8akw== 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=zu6OjFM0vafAuehRPJYwGyfF5axibFj6TrMTK8x87oE=; b=ezyebiKKb8a1d9LqTKYRdDCYqzTkzg5zJyzpFwtukN2ggrr8e+9AwvZFTrx2Qez2xPs8H+TCDj35TkOIr7Zm/9wJlbV9HZlpZVqSEpdmfcU/XbkvLQi1VM1Ol7sTWEGN6A0cF1o2xtTrekxB3OUCVw/nKARcdydM84n2JzupK6M= 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:29 +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:29 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 5/8] net/nfp: add support for VLAN strip V2 Date: Mon, 28 Nov 2022 14:53:56 +0800 Message-Id: <20221128065359.12737-6-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: e1f12981-47d2-4faf-9964-08dad10d65ab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CqEwiuJcrxJTz57OGEi1BzrlHlBVD4VGEiizfCcRkU7zViWru+b9bHH3XFJhXq5wwA7VyA9WZzcC+mYlQ5oRtjJE3sq9yCFcZarfXGJgPaZsuZOkr1XkPMy8r0c5SdfCK3v1Y8Oc+FYxFvBE+j4aAqH3hVT5JmpBsMNpF836z9b1xaKYS4QEPCEDQXpUPGx84zqXp4780SvKlCS9otC/dr4Xb/Ymg4UfhRyzktjpFC0Ek4p5vPrM80SgHQli/rpEq7Nv+/cCf2aTFefg2pYLjsvBwewsAPDLsdz6mEDJ/p5KLJ3JWTylE8cz7f3zqKTLuYgRxU6yNGdGz0829Ftq8q7A35qEUV4uCkBbGrmoWYGvJViOuP2vVxmST8hJ7FWtqkrj2hm0CNmR6d+GaKHYZRjRP/jyp4038tG/Jyu/xa+6GQSwLRrXcZhULZNgpvDhuoc8iDDufbBH/ikgeHpOS3KVQJh+0X7dCkcLaWLCulscS9h+BXqMifZRA0nWXqmzpUi2UC+OnSCuF7bgFKsBR31Pe7S30NPdNUJo7suJMugfINsZvjxH+Q7S9Eb1asFoLSnai/yL8VNfpB4C1hpzNHV4QYlGHUCGjAE0tKr9uyBWnuM9YDDOZWe4LLFcJGIhZPCzTbW0JFV8k3Yj3L/YDt9DZEB/D/ZzKTLQFP4hRxWekX/gLrTrIzjZvPCQHiKyzNsvwTbAZPaJBZyjAaox7IFEpsTA5cKaMzoNlGmngCpJBP+D5NBTNaQsO2cdRA+X 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?wp75+2HqCrs921+doc8G1vNHF+SG?= =?utf-8?q?OajWbjtXHLXCA2r1Xly7S1kNd8+1I6qfg5WvqXQM1tb+U3sl6QOmCWdmFmd2dQI97?= =?utf-8?q?wqpDGHopBw1deda9vUqTK5NWIsDBqmuHJ1nDaQiFWhoxIvMRudcKqPoFG9t83TWpP?= =?utf-8?q?5k6D4pPIKdIgR95iVX1OYcxRhocE2XOm8LPPmu11CN8nxJbFOKXAmN0xPMMxI2GiI?= =?utf-8?q?hgbPfUWghZk5756XfVfbDqdRp3bPf3oEmGIlsfKGThwmI6cAhTyjAoVtwfISkXuye?= =?utf-8?q?Vc4ZoM4gA4J/+nFrD8d7HHTQpX9KlSZCgSCDs1QSjdli312CrRed74lASvNnIY2Jj?= =?utf-8?q?Lei+oHY81iiHCokDVlqXbTCaZJyqoGLd5u0m17M/PT08YONSblocE4ftro7LYzDuX?= =?utf-8?q?cPMFhtTeMzRkWKBky1UWxaxcbi8ztDh128fsTDVf/uzapn6DcpTMfSTyZbl0AU9as?= =?utf-8?q?eMFtKvzkxw67j8U0axxsdQAdkSmR1/WNiSBLd/jXi84VWyMILinbT90ZRrpbeJFmr?= =?utf-8?q?1xt8mnGY3le+1Mid2bQIkpVQ6WQNUH4Nv8T2azLxIoB9fYHh0G9ZomFsQf8Hl+VMy?= =?utf-8?q?hRVkgHuGKnbXFwBMoFMnC3WzLPduZ+cm7YIDKZ+va92Uym2U80z0+Ks3jKOhgaOHh?= =?utf-8?q?eAPFzjHaKtoTTAkSALZxT2+NiyWz2CVM6JMSGTd6Sh1EHWUMGsTabW2LcJkOWi4/0?= =?utf-8?q?k20UkT0IzHU8K/Un3Onu1oukN2BYMV/xUWdrWWewpnSgQVLz+1OEJ2rI+2JT3EnXb?= =?utf-8?q?OhZh94ny+eJgeHB4vO8GjQc291yKe4UOaiQC/qIoTmKw0RABOYG/I2Xz15jWdXb/6?= =?utf-8?q?SJC9RxInczubFc0ORpPhzpQd/BIjAYXYpD52Ks/1J7ZbJqeuaRfXBeAYaUd6kEi/1?= =?utf-8?q?23hIGa7GEerWzAMYTNaytFMsZ3ToivIokjgUoRh0d+s+2YD4Tvxdh1rs13IrqqiFX?= =?utf-8?q?wPMLR3uXJ7cIGZ3PHjIGdjFzQHupoKRDo0N4DzHIs58ixW0qA6lXT8EPR5IxQzTBx?= =?utf-8?q?dWpUmOQhAMBARC+TfK75y0sC4VKC+BgoKhEfmgda290I1T6U1xTcce2grWfkcW2GS?= =?utf-8?q?K//Bz1NJgYdiP5tceQ2Y1rkEOQZCw2OgJpafUCAeK2ef/On/PZ3eqdLzlb6Vm94Jv?= =?utf-8?q?UacrHX0WTZzo4lHDLK2CbhYeqs2IO45vntARD+rk7U5U0vzXFgBQtgRsPvNJbI1HZ?= =?utf-8?q?uHsvYMXKGM9Klrnbr72kPmsr7TO/2bDcCr1IHwUmcqKPQnUpjAROaIhpn7HPlP6J5?= =?utf-8?q?jO8jVM5tSBe5teC9u6Q3CrK3fqWzFuhJSog2Jh9XFL2o4PdVoCrR2QCqhrlObMro0?= =?utf-8?q?2ju40eOFy/stgIKpW868Pj/QRP0lkzGOVlv0WCfrJhJdDB3jCJAAH/BeVPZDaVHBx?= =?utf-8?q?Bx4nTL3LFEbARZTd8jsvgdxJeojoSHaEuZpqxyceI/vutfSbTFmSaIHls4VI5XI+O?= =?utf-8?q?vsg++6olp4EKUTDE+5jVdDxMZbSESS1HcSN7mQoewG+TDfxYeQqrUPs6VE9tfgCx6?= =?utf-8?q?OGMFGLl7I1rlWlblckNxNRkIhOxP2qGnDw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1f12981-47d2-4faf-9964-08dad10d65ab 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:29.8914 (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: VeFUVl1/+DOdcXCMUuNKa0FEPZF1kDnn3JE62FGTyNVLrgryulsnyt0ERPmEgQUXPfQFZ5IDLLK7XE1IYKRJO0GYGGmWl3xmbY/VKF9C0AE= 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 VLAN information can be stored in the descriptor or in the metadata. Add a new VLAN strip V2 bit to distinguish them. When VLAN strip is set, the vlan information is stored in the descriptor. When VLAN strip V2 is set, it is stored in the metadata. Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- drivers/net/nfp/nfp_common.c | 33 +++++++++++++++++++++------------ drivers/net/nfp/nfp_ctrl.h | 1 + drivers/net/nfp/nfp_rxtx.c | 25 ++++++++++++++++--------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index d1822f6b71..a62a7386ab 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -195,7 +195,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) NFD_CFG_MAJOR_VERSION_of(hw->ver), NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, + PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", @@ -203,6 +203,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) hw->cap & NFP_NET_CFG_CTRL_TXCSUM ? "TXCSUM " : "", hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", + hw->cap & NFP_NET_CFG_CTRL_RXVLAN_V2 ? "RXVLANv2 " : "", hw->cap & NFP_NET_CFG_CTRL_RXQINQ ? "RXQINQ " : "", hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", @@ -216,6 +217,15 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) hw->max_rx_queues, hw->max_tx_queues); } +static inline void +nfp_net_enbable_rxvlan_cap(struct nfp_net_hw *hw, uint32_t *ctrl) +{ + if ((hw->cap & NFP_NET_CFG_CTRL_RXVLAN_V2) != 0) + *ctrl |= NFP_NET_CFG_CTRL_RXVLAN_V2; + else if ((hw->cap & NFP_NET_CFG_CTRL_RXVLAN) != 0) + *ctrl |= NFP_NET_CFG_CTRL_RXVLAN; +} + void nfp_net_enable_queues(struct rte_eth_dev *dev) { @@ -397,10 +407,8 @@ nfp_check_offloads(struct rte_eth_dev *dev) ctrl |= NFP_NET_CFG_CTRL_RXCSUM; } - if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP) { - if (hw->cap & NFP_NET_CFG_CTRL_RXVLAN) - ctrl |= NFP_NET_CFG_CTRL_RXVLAN; - } + if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP) + nfp_net_enbable_rxvlan_cap(hw, &ctrl); if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP) { if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) @@ -754,7 +762,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) /* Next should change when PF support is implemented */ dev_info->max_mac_addrs = 1; - if (hw->cap & NFP_NET_CFG_CTRL_RXVLAN) + if (hw->cap & (NFP_NET_CFG_CTRL_RXVLAN | NFP_NET_CFG_CTRL_RXVLAN_V2)) dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP; if (hw->cap & NFP_NET_CFG_CTRL_RXQINQ) @@ -1034,21 +1042,22 @@ nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask) uint32_t new_ctrl, update; struct nfp_net_hw *hw; struct rte_eth_conf *dev_conf; + uint32_t rxvlan_ctrl; int ret; hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); dev_conf = &dev->data->dev_conf; new_ctrl = hw->ctrl; + rxvlan_ctrl = 0; - /* - * Vlan stripping setting - * Enable or disable VLAN stripping - */ + nfp_net_enbable_rxvlan_cap(hw, &rxvlan_ctrl); + + /* VLAN stripping setting */ if (mask & RTE_ETH_VLAN_STRIP_MASK) { if (dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP) - new_ctrl |= NFP_NET_CFG_CTRL_RXVLAN; + new_ctrl |= rxvlan_ctrl; else - new_ctrl &= ~NFP_NET_CFG_CTRL_RXVLAN; + new_ctrl &= ~rxvlan_ctrl; } /* QinQ stripping setting */ diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index 106779c080..c7ebcf43b3 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -94,6 +94,7 @@ #define NFP_NET_CFG_CTRL_GATHER (0x1 << 9) /* Gather DMA */ #define NFP_NET_CFG_CTRL_LSO (0x1 << 10) /* LSO/TSO */ #define NFP_NET_CFG_CTRL_RXQINQ (0x1 << 13) /* Enable QINQ strip */ +#define NFP_NET_CFG_CTRL_RXVLAN_V2 (0x1 << 15) /* Enable VLAN strip with metadata */ #define NFP_NET_CFG_CTRL_RINGCFG (0x1 << 16) /* Ring runtime changes */ #define NFP_NET_CFG_CTRL_RSS (0x1 << 17) /* RSS */ #define NFP_NET_CFG_CTRL_IRQMOD (0x1 << 18) /* Interrupt moderation */ diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 40f1702bde..2bc0eb2625 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -237,23 +237,30 @@ nfp_net_parse_meta_vlan(const struct nfp_meta_parsed *meta, { struct nfp_net_hw *hw = rxq->hw; - if ((hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN) == 0) + /* Skip if hardware don't support setting vlan. */ + if ((hw->ctrl & (NFP_NET_CFG_CTRL_RXVLAN | NFP_NET_CFG_CTRL_RXVLAN_V2)) == 0) return; /* * The nic support the two way to send the VLAN info, - * 1. According the metadata to send the VLAN info - * 2. According the descriptor to sned the VLAN info + * 1. According the metadata to send the VLAN info when NFP_NET_CFG_CTRL_RXVLAN_V2 + * is set + * 2. According the descriptor to sned the VLAN info when NFP_NET_CFG_CTRL_RXVLAN + * is set * * If the nic doesn't send the VLAN info, it is not necessary * to do anything. */ - if (meta->vlan_layer >= 1 && meta->vlan[0].offload != 0) { - mb->vlan_tci = rte_cpu_to_le_32(meta->vlan[0].tci); - mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; - } else if ((rxd->rxd.flags & PCIE_DESC_RX_VLAN) != 0) { - mb->vlan_tci = rte_cpu_to_le_32(rxd->rxd.vlan); - mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + if ((hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN_V2) != 0) { + if (meta->vlan_layer >= 1 && meta->vlan[0].offload != 0) { + mb->vlan_tci = rte_cpu_to_le_32(meta->vlan[0].tci); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } + } else if ((hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN) != 0) { + if ((rxd->rxd.flags & PCIE_DESC_RX_VLAN) != 0) { + mb->vlan_tci = rte_cpu_to_le_32(rxd->rxd.vlan); + mb->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED; + } } } From patchwork Mon Nov 28 06:53:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120187 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 BA974A0093; Mon, 28 Nov 2022 07:55:08 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E697942D39; Mon, 28 Nov 2022 07:54:35 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2133.outbound.protection.outlook.com [40.107.244.133]) by mails.dpdk.org (Postfix) with ESMTP id ABA2242D2B for ; Mon, 28 Nov 2022 07:54:33 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SSlNK2u4CT42dwL8+RyDOIzQhUoJTEH5ZB7sngB4fWejUAYPaTAHx3froi+SyBlJ00KsTJ8gM1aHI3xXWx2bSG+h32YRn2IapkZw/WM03sp5T+raFt0AZPo4rs7tohc3RuWrLIwt3Ac1RIXn7DtiQmdZWwwhFy68uqWY/4PV+jnmXvixOrQLWbGcjEke4wBHXNqPrjJNQuMB5hEGp8NFQhEOK4DFthW/Q23T9kITl/M3sdf5doMx1oM2yx4GoFOXoIZa3JzyrbAaIJ46bgirNqcqYHSMPFAwRwORaG+Ci4s9HGAHFst+Ho/cJ94yQUuiJszF2+rmdJa90PzMtFDUAA== 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=U3sqSda8tVsvspPXgAA/PP9jGaETjS2IWGYIU8uxP/Q=; b=YO+yI6bLeY5uwNDTQU46vtAlb5mL0Du1sA8YyIHiw7zIr1Q3Uxqt1eTTYpqfDGBj+5hqMbO9Il18POpSDXPihbJ2OuzC+KOBrukr4L5ofreT541UHP7hwdH0YBqb2HIsgZwqSMwshpUeA8jqoYMGXLAG8UUuW7V0e4E7puvh3A9727+b9pup2IfGoSIl7odpi0oys+TDZ7RliI1U45vvqAQpxjcMAC8ZQ28iBARJ8ySV51xDjTOYa/811AOsM7IdTnWJyVSwmWNrz5Yyssa42K0uZZf5OBldC9enNkmSrkHzlmTdaL9n+JxGr/ucowurXKBfTLLovs5GjnpJAErPdw== 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=U3sqSda8tVsvspPXgAA/PP9jGaETjS2IWGYIU8uxP/Q=; b=XEJRpynet+LS2c5VLf00Q43PibOJGrN10eJtKLZxr3+lzaObjNpU8eF/TS8rYvXRnoI7hVKLGMtR7MGX1voaC5Nuv7aCcAdJ28NrKTXow4qaIWk3ipstbR1Yu7krSZVYENHvvZuOLl0KSCSkNHh7E+1o46ou4e6oaTKSlQnHfNo= 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:32 +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:32 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 6/8] net/nfp: add support for VLAN insert with NFD3 Date: Mon, 28 Nov 2022 14:53:57 +0800 Message-Id: <20221128065359.12737-7-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: 67cc0f82-ecf0-48a9-8327-08dad10d66f9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ze+UIgop6Bml6Bj1Rt7hsj2JdccHRXkcL6tu6+pHgQAjnHZcPfBGDKqRGxLjEIjtPvzzhW7DTBLYZzBahkyRuygwLlcO7FZuOUG9AfAZnDXQTIB13T9M38V+YT2FT30JHKfjiwZO7auZgXOiTJQJcTDGtOoj5S+SBO2RMIdB8JyHGSTKmgf3ECRcbrm7A4n5+3jSg4PbO3G2HVl7TwQqzTrKXMQnjMU4pVtPaB6XJZlzu0jQ6RQIs4ux2ut+Vo4GBxe5PgNUbhr/NQf9+2a2LH1NLUy3FUvnLR1TldMrv8urM9uNzt5WpK9SYgMjX3mdXmN8wFhFPrYfSL8eBgP1+Rl4s2JL3ftHzJRvBdh7kIsC8xp4G5wtwl6NytwlhEVES/+4Z/w7F/VPOUb70diZf4cVC9SUmYXvjXtZtoghwFQ4AzHIgQEut6ZgblLQw5ALnE5dkQvPeQV6V8RUtsPVP2orECIZ4iS5oY7rJrsUDaBchx/OmhOjUhPw1r77GkWMHN63TiMrbhAXiAsdXnipmzLie5NcJZOKDy18i5QwuMYo8wNSHwnMcmm0Rh0EJdtmI4cX3tYKlR+SlrEnvP8T6VAzJ9upmAITIrHhRAyCcxl+9lXZzv3YRDia0c8g71wod0H6QLaZuy7wkxpCsRiBtq4bToZVRCx7FBO/y1Y84xyZGN/HnJCll7RPQzvnGMKHhRmJfwecrdpN/nRSsfL05L2qAJRZ/usVoR16oU/soCtgOE/r8jU03TvzonWega3w 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)(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?6PW1Y/xkzZniCv8lmmavLW6s/QxT?= =?utf-8?q?KvIwqNDneKe2+XG48jAs+pClpWcbCud0HarGHs5ss1HLNkgzgy0SnxusBnBuEig3A?= =?utf-8?q?JhGlREbjbaLbmnEiYF7y6BvGs660FPPs2cPmcJbJLaU+42bRnz64OYWYa6mmsaiQG?= =?utf-8?q?qrQlRDcTEqcSqB377RraMC0wCWSDEad3JBX/WRDC46It05YrPVeGk6QJ43uW4wId/?= =?utf-8?q?B1ULuPrDSwQTIoPxzkOduDAYveMq3ZBQYr+XJRs4ZLQo0wSlS6wxHLBMs4jv/0ikX?= =?utf-8?q?+KFY72m9/8+cBSt49vcSQPtdZlRjbM85Quy9FvRJ/zUTTqabOfDN41Z3tkC23YSje?= =?utf-8?q?Alu4nr/7wB4bMu1b4xYX/jC9aQfGvv0vWB2gec4aHUW7oQx+TtJLQ2sausnWOCSxW?= =?utf-8?q?JfMbaHlBHPi8x0pvw4FJRw65Utp+A4t2Gx90GZPv1UPZr2SWSoF27HKCE5OQQQDVH?= =?utf-8?q?G/ScvVNq1zP/Lkg7ZF36QJzzO6kHKv07iAnQaROUkj97O4CX/EDDkjyW3iMcGsAZA?= =?utf-8?q?ojP2tc6a4Vn/1Ny1gxwrb7wF7F8n4XoUkHQMYcBxzFeQRa05S9jw3li2sZfN2R1v/?= =?utf-8?q?9yk1+C2LOLi3tiTIAA6eeCa2XXQRHPzKgNmHYEnEcaXg1KcQMyliy3hUyM+N9cU/a?= =?utf-8?q?agZRTHm0LDzns+ZD2PaOcPQN4o3Ou1f5zd+gXzTkpILXHXefh46qTEn3FfIrLwfYO?= =?utf-8?q?rY0wOg22x8KibkmG0oSMObFNZ+yWkNNjv6q1GUc6uLbToISC7bM8a4rGTchPZun3/?= =?utf-8?q?YZqs5bf4Sbeaj2zoCpzqBqoeNE3LS7aWYxAxHccOeLf7iusiRP8CmEKBIeBs1m8YB?= =?utf-8?q?wUjZCKVjfolvYRWwbr2Q8+C1o2eF3rrp2KpBw9ym0aUc8fErpCd0j0AWaZ6xWIA5H?= =?utf-8?q?yFIG7ZO0An3Bvuhu/yA2gF41ECKoeSRx7p+NT+tVQ/hEjCGa+bV9h6qn2QAckDOnk?= =?utf-8?q?xfeDMF4dCplKXYmwl3UOptcBmEYEIZU0Vf1mOINRQicgJ4tsx3cyPBOy2mkHpwP1V?= =?utf-8?q?YzNFxff5rMeFrJR0JcbBT+k9E/MNX3dJ5RRErZxoGhqlteT/Eol9KYNxSTZSOzQff?= =?utf-8?q?37IPLOPz/LEQlz4cGNrJRII6GoGcYVGN53iSwq7sBotYOk/PppDrxTJ2I3rTMPLjF?= =?utf-8?q?5pSPJ0ZJXArimCZ9GZCgoPJMxEFvnmq5wSgDpH4PCmUDF0gQ/mBlJXest9uh0Bd0q?= =?utf-8?q?VXEnn4egJyPSPKBrPYNOOloOOBNSdpf71ZyPQTVeI4bl4LG5eKv5c9MIgbx8TougI?= =?utf-8?q?Uci0h6RZiadS+2sFt0SZM4a9m1muEf6CdXdo4aw4G8lWnkulKYttz7ODDHl9QuMMu?= =?utf-8?q?eEeSWdOOqc+7d+UKEG7F2bvjjNB1UUVhArK0PIcL1BxRiwSV+5jc6OfZi0E5LOa7x?= =?utf-8?q?95F8za975zEN8gJ4CQ4/1T2ti58aP/agne5dhcTbif9eSdIGSitoY/U2Q7BkPgRJJ?= =?utf-8?q?t2xBxI0xilA3D6iF41TEupav3h0uvh9Y6hRG23RLFpbeeLq6PUzFLX3TtzGFF5TH0?= =?utf-8?q?zQH1H9+QjFYSniHfRwatfyMbPSeaHYVXzg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67cc0f82-ecf0-48a9-8327-08dad10d66f9 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:32.2661 (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: 6W1wUIJ5gdt/iwJDlyxLnUP9GNfuzO8PNWIU+Owki9csah1YviouI2W9VVJk3UM3uzi0f648571FrqGR8RifmysOxv2158EsqB7SgSzxFG0= 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 As the firmware with NFD3 change, using the metadata sends the VLAN info to the nic to achieve the VLAN offload insert. The VLAN INFO consists of 16bit TPID + 16bit TCI Signed-off-by: Peng Zhang Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- doc/guides/nics/nfp.rst | 16 ++++++++ drivers/net/nfp/nfp_common.c | 6 ++- drivers/net/nfp/nfp_ctrl.h | 1 + drivers/net/nfp/nfp_rxtx.c | 77 +++++++++++++++++++++++++++++++++--- drivers/net/nfp/nfp_rxtx.h | 21 +++++++++- 5 files changed, 112 insertions(+), 9 deletions(-) diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index 2be15b63d3..a636fd0fde 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -294,3 +294,19 @@ Metadata with L2 (1W/4B) The vlan[0] is the innermost VLAN The vlan[1] is the QinQ info + +TX +~~ + +NFP_NET_META_VLAN +:: + + ----------------------------------------------------------------- + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TPID | PCP |p| vlan outermost VID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ^ ^ + NOTE: | TCI | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index a62a7386ab..9c740ee9b5 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -417,8 +417,10 @@ nfp_check_offloads(struct rte_eth_dev *dev) hw->mtu = dev->data->mtu; - if (txmode->offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) - ctrl |= NFP_NET_CFG_CTRL_TXVLAN; + if (txmode->offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) { + if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN) + ctrl |= NFP_NET_CFG_CTRL_TXVLAN; + } /* L2 broadcast */ if (hw->cap & NFP_NET_CFG_CTRL_L2BC) diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index c7ebcf43b3..bffdd8345e 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -29,6 +29,7 @@ /* working with metadata api (NFD version > 3.0) */ #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 /* 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 2bc0eb2625..200886111e 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -833,12 +833,77 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, return 0; } +static void +nfp_net_set_meta_vlan(struct nfp_net_meta_raw *meta_data, + struct rte_mbuf *pkt, + uint8_t layer) +{ + uint16_t vlan_tci; + uint16_t tpid; + + tpid = RTE_ETHER_TYPE_VLAN; + vlan_tci = pkt->vlan_tci; + + meta_data->data[layer] = rte_cpu_to_be_32(tpid << 16 | vlan_tci); +} + +static void +nfp_net_nfd3_set_meta_data(struct nfp_net_meta_raw *meta_data, + struct nfp_net_txq *txq, + struct rte_mbuf *pkt) +{ + uint8_t vlan_layer = 0; + struct nfp_net_hw *hw; + uint32_t meta_info; + uint8_t layer = 0; + char *meta; + + hw = txq->hw; + + if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) != 0 && + (hw->ctrl & NFP_NET_CFG_CTRL_TXVLAN) != 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_info = meta_data->header; + 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_info != 0; meta_info >>= NFP_NET_META_FIELD_SIZE, layer++, + meta += NFP_NET_META_FIELD_SIZE) { + switch (meta_info & 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])); + } +} + uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct nfp_net_txq *txq; struct nfp_net_hw *hw; struct nfp_net_nfd3_tx_desc *txds, txd; + struct nfp_net_meta_raw meta_data; struct rte_mbuf *pkt; uint64_t dma_addr; int pkt_size, dma_size; @@ -868,6 +933,7 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk txq->qidx, nb_pkts); /* Sending packets */ while ((i < nb_pkts) && free_descs) { + memset(&meta_data, 0, sizeof(meta_data)); /* Grabbing the mbuf linked to the current descriptor */ lmbuf = &txq->txbufs[txq->wr_p].mbuf; /* Warming the cache for releasing the mbuf later on */ @@ -875,6 +941,8 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk pkt = *(tx_pkts + i); + nfp_net_nfd3_set_meta_data(&meta_data, txq, pkt); + if (unlikely(pkt->nb_segs > 1 && !(hw->cap & NFP_NET_CFG_CTRL_GATHER))) { PMD_INIT_LOG(INFO, "NFP_NET_CFG_CTRL_GATHER not set"); @@ -893,12 +961,6 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk nfp_net_nfd3_tx_tso(txq, &txd, pkt); nfp_net_nfd3_tx_cksum(txq, &txd, pkt); - if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) && - (hw->cap & NFP_NET_CFG_CTRL_TXVLAN)) { - txd.flags |= PCIE_DESC_TX_VLAN; - txd.vlan = pkt->vlan_tci; - } - /* * mbuf data_len is the data in one segment and pkt_len data * in the whole packet. When the packet is just one segment, @@ -948,6 +1010,9 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk else txds->offset_eop = 0; + /* Set the meta_len */ + txds->offset_eop |= meta_data.length; + pkt = pkt->next; /* Referencing next free TX descriptor */ txds = &txq->txds[txq->wr_p]; diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index e3e8b00b48..d16d557fd3 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -27,6 +27,25 @@ /* Maximum number of supported VLANs in parsed form packet metadata. */ #define NFP_META_MAX_VLANS 2 +/* Maximum number of NFP packet metadata fields. */ +#define NFP_META_MAX_FIELDS 8 + +/* + * struct nfp_net_meta_raw - Raw memory representation of packet metadata + * + * Describe the raw metadata format, useful when preparing metadata for a + * transmission mbuf. + * + * @header: NFD3 Contains the 8 4-bit type fields + * @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. + */ +struct nfp_net_meta_raw { + uint32_t header; + uint32_t data[NFP_META_MAX_FIELDS]; + uint8_t length; +}; /* * struct nfp_meta_parsed - Record metadata parsed from packet @@ -121,7 +140,7 @@ struct nfp_net_nfd3_tx_desc { uint8_t dma_addr_hi; /* High bits of host buf address */ __le16 dma_len; /* Length to DMA for this desc */ uint8_t offset_eop; /* Offset in buf where pkt starts + - * highest bit is eop flag. + * highest bit is eop flag, low 7bit is meta_len. */ __le32 dma_addr_lo; /* Low 32bit of host buf addr */ From patchwork Mon Nov 28 06:53:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120188 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 301E4A0093; Mon, 28 Nov 2022 07:55:14 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 341C342D38; Mon, 28 Nov 2022 07:54:37 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2097.outbound.protection.outlook.com [40.107.244.97]) by mails.dpdk.org (Postfix) with ESMTP id E11A942D38 for ; Mon, 28 Nov 2022 07:54:35 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H1XRwg5zv/mmOT0q+9S334p1ANu5ur+epmigUCukgjG7pkrZIKWznvwLM3Zm/C7rntnFLXPxgzguWyCDqxnxkupcBUUiHqT0l83q4rNbki4I8gSEwYL2p3U+sikXwKslwgG2VQrLpx0XXpST864o5vU4aw1vKmyEy3U7tYEwMb3noi68kqtI86sxhEZWdm3llcF02mT28/qTPtBDYlLyRYWKCf8TFMMr1f3ejqP9FyJHEmjLXpHAv8zL4ewt2XmuaXIlxAg9cLFBfIVqgfPZh/vgCql5IVOmD52/5SJX783ytLO06NmV2wHJPP5KokO09WM9hE6ysn23xTQ3blmTrg== 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=2f5i2XfbRSBdadBdXfsuDrOEyI0wLyhO8Ph/nJHadfM=; b=eMqywu4HnqV9bxyTlGsZGU1HTRp/1bM3pGJILDFNZQCEgLnx9SzMp4LcjTQ+JJhUgWuz3komDlmp4GVO+N8axlCyKUd0mp1dFmr5qrBDGZxxKnzkG7ZYZ1uHQPdXr/OtxTQkUi94S6MFKFNJaBGg9n7ykMSffTs8BxMqxkMv3YVmeDBc+RJglw+hwlQIdwFa4f0LZGC1dxEe/c41Tbs7QaDZOLsvLVeqzrjtU7wLbIOZv/hZf8c2eYf/FmtnnI7rCRy/Ko84BQUyyt+zFFDWf1Zg1bX881idhdXfd50cyfORhUiceUZ2/PmMbRJMW7J8qV+o/WdkQ4J786B3wR+Qgw== 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=2f5i2XfbRSBdadBdXfsuDrOEyI0wLyhO8Ph/nJHadfM=; b=hv8GCcqkOmMAtC09RL6R4ZoFU4dXpl3fv77lDwOSQTbHu/G6JTPOzclnNHRcmT8u4HZBHY9GiW3dFnXbtlrIsR8WzwciTciV167MMgBIRAS7AJ85iPlI0d9StaobGlKPc9dyM+BBMtVl/cZxTDV4wGDlDn7+mK1D+M6WPfnXZfw= 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:34 +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:34 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH 7/8] net/nfp: add support for VLAN insert V2 with NFD3 Date: Mon, 28 Nov 2022 14:53:58 +0800 Message-Id: <20221128065359.12737-8-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: e60363ca-5ce6-43a1-a7ae-08dad10d6861 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YFbEkEdoBVyYGeNkcL8Pc8aob3Gphb/PER2JCGrW7VWT+9r3R1KekdYA+yrCnBsAjfEVsZXCzZMbmMXBiog0m5xRvEkeZymvHhZKl8hLeSwQJZ86pnxha2glt1sQrxBTuEawWjUBEscX5h++Yn0ufFxRT//8lEnuq2ZhQonpuTLnxILutz7+8xDI09Z7TdMPZBxjmYIRR6zyQzUUUkufmm6WUsJbTAt9bNg9RftFcEoU00EvPKLxbz3TNwc0Nmcs6jz8O3NHc7uhYW67iuSCNQVRMSwDRIkc6/5g4gMhHu8OtH54Q0L86Z+QRTsoS2AnjxSx/bvtgGTUOZ9sJVV1Bv6K4Mrc2TFFR4hIJiTE39ixo2/FFQ+kB2LwyFZ9eYWxcg645SkADn1iLbU6Rf/nywBf4WgyUxRaYD6JkWMDxdRtaAYerQ35kNQLYe01UjDr7qdVowxDgyHMCj6+4aezEztDQWgbZQRK31b7XOwA4Klha1gR826A6rG+5Rx4k56dr1SP8fPRkED7D2tMmtOmVmRpgk7bsLTdqAeLM0IyU+1fywLRjgXKgxmJ74LwX7hoHKuPE6EAlFwPOspm0/RNvoAJyVqBEA4mAf5Z1kTJ/qQ9jRDteslg2ZL8JxzH/vu7GY5zUQ9pkUeKED/0uuMdLBQha/Ur2pzrbGanP0B+w5fhRv3MJRaeGVOV+rEW6iWHWNDOUWRjQ1DX4h4jefddioqQ5K7PVj0ilNYQ+cveLUdBP8AF7ltaJ2ssxFqCUKXa 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)(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?c8lZ2S8m4tr3R0QBIi4dZbdeWGvn?= =?utf-8?q?wkoDkZuinxTdAjXPHQ4CteYXhJaC77yioyXCS6/nkpEoaIoWtKBPM3/+3VV2Lp78r?= =?utf-8?q?3f3kYqoBHAWCdO0gzgeiq8BQkyyZg1gHPmgb2OytuNNLc/K9df0/REItXFQVprIca?= =?utf-8?q?w5i4KHF0d+MMXO1uratIDN7dnFSn8ksMBzysDVPVb9smDcATt0gc6Er3agZd0e9AQ?= =?utf-8?q?u7cmEIJ1ykIpeoUv7C0fsE8enLQvgq+PgMk38yQ/dA07YJ2Q2dVFyT1/SLFcSZFO4?= =?utf-8?q?lA81N7pSu3R2dt9OyJuSS0bPka6Ct0uS19bVaymjNnmnFVwviJM0kcvCB7Ze8P0tV?= =?utf-8?q?f6VR8pUAkbrf117ASaH0yn/Xszrvb9P/rQ165v4bplTk20Nlo/OmMj4icEcU83rLL?= =?utf-8?q?7pw9DuJsSXNljjztzZVHxg9fUejxDWFbktELaAW6JHIgw1bZG/hK28UI6sOM5Pza9?= =?utf-8?q?A2MoVszPXgXokoOGd6heS+7EM2TlctXL3BfDOwKZouHP1Us8Jy/v6biQHaLsCas6X?= =?utf-8?q?s7VKfCp6mwKp4JjaDgZDLq97ZJScGQWn6MXCfph9LlnPYlmU8ZIJEGTBXv94DrRqN?= =?utf-8?q?Bw8H77sAx6C31f3ZlUyBX6SuE+Qgkra4EGIfVszzw7eKBnKr3JzwFSEa81cZLPFez?= =?utf-8?q?o9Cq2DTohwbP4iiHFuBMQiR5R9+vFqKrcBdRBhJ2jBj3soGT/vdwL9u8fuWTLCZcj?= =?utf-8?q?eaGR4mCZecDMgGQLWqRtsspRBjD+MVdFDXnJuwtbleKOn/alJUo1JAPIQEjJdvH9t?= =?utf-8?q?r2QKSAMxEBef5NQUnwb/gNBTmktY/MngAhgY0VF7pVBO5KMh7rhoB/KwvojAuHc5d?= =?utf-8?q?FEURfRSe37gbGND9DZe78d7aA1W1bNM5NqFDwAwhU3nRbVYoWvP1KkI/ReLABm8mG?= =?utf-8?q?XYBAPyFsUy7cVmz0mSllZZtc0q2r8AB/62o7MB6knaabd4HvCSsSVuSNYaBfg5qZa?= =?utf-8?q?OGiGUejRS9TmXgHzWwfz8uMizjlVImJZyN4pFBZc2+sxzDBg4Pkb+jyB4DPq3ZRhB?= =?utf-8?q?SmF8agTQ6V3OmeYzm3KQMtSqJNiWu9RGUxVbmqwEnD0NrPV8ldk3LQB4gvmi+lXSx?= =?utf-8?q?n5tnFnmtJv0JPrp2ccrLcFCUesrOxh37qw6E5eP8Vg1CCOYRLoB418aXTyWp/aZG0?= =?utf-8?q?MkT7MRz6gvG0CJgua7iFJjFa7p3I1jc0VAd0RFtehMFt8Moj1jSil62jcagAJW92a?= =?utf-8?q?SnTlJtX+Gj2rxy/tNafEiUfCBo3YTPd8ZhBrynLfuWKcOQgURE4VmEUh5GuG09fjR?= =?utf-8?q?PFtVJaYXFpg/VPTfD8NJgA1ZjuUx2K7bsimVbEm5vO8xMRcRoajGYEKnSK61MWIdQ?= =?utf-8?q?g6lBS2LHYUFYYboTN3ctOV26H+UELdwHfCUgZam5KuVCNP01y42I7sLgKpvlB+7NT?= =?utf-8?q?B8xnFjIItO/yz/aVJ9djP9VPjcvp/rKykQHSJ4ZAyLqFPMiMuLBqxxOkOMzRmiXtJ?= =?utf-8?q?9CQ8c9/G7tXQrhdSbPyQ++wtqU+VPIdEXsdPpY/J4pGOYgg7ngZCpDMrBdzbPthc8?= =?utf-8?q?cj7FBwxkv5izmxbbZCKU1O7L6CapHIzhkQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e60363ca-5ce6-43a1-a7ae-08dad10d6861 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:34.5169 (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: rkb+CNSKxjsVxqBfQhctnMRJD+yEYIGFRKcoCt579w32iq6HHjLfXJJ0oAfK/Ck3iMt+3CLbvQnfmU3YxcNnJbvRvCsfGMluJ+oL7KIUWIE= 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 support VLAN insert with the descriptor or the metadata. So adding a NFP_NET_CFG_CTRL_RXVLAN_V2 bit to distinguish them. When VLAN insert is set, sending the vlan information with the descriptor. When VLAN insert V2 is set, sending it with the metadata. Now NFP_NET_CFG_CTRL_L2SWITCH_LOCAL isn't used, so 0x1 << 23 is used by NFP_NET_CFG_CTRL_RXVLAN_V2. Signed-off-by: Peng Zhang Reviewed-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_common.c | 9 ++++++--- drivers/net/nfp/nfp_ctrl.h | 2 +- drivers/net/nfp/nfp_rxtx.c | 30 +++++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index 9c740ee9b5..853eb4a3f7 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -195,7 +195,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) NFD_CFG_MAJOR_VERSION_of(hw->ver), NFD_CFG_MINOR_VERSION_of(hw->ver), hw->max_mtu); - PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, + PMD_INIT_LOG(INFO, "CAP: %#x, %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", hw->cap, hw->cap & NFP_NET_CFG_CTRL_PROMISC ? "PROMISC " : "", hw->cap & NFP_NET_CFG_CTRL_L2BC ? "L2BCFILT " : "", hw->cap & NFP_NET_CFG_CTRL_L2MC ? "L2MCFILT " : "", @@ -204,6 +204,7 @@ nfp_net_log_device_information(const struct nfp_net_hw *hw) hw->cap & NFP_NET_CFG_CTRL_RXVLAN ? "RXVLAN " : "", hw->cap & NFP_NET_CFG_CTRL_TXVLAN ? "TXVLAN " : "", hw->cap & NFP_NET_CFG_CTRL_RXVLAN_V2 ? "RXVLANv2 " : "", + hw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2 ? "TXVLANv2 " : "", hw->cap & NFP_NET_CFG_CTRL_RXQINQ ? "RXQINQ " : "", hw->cap & NFP_NET_CFG_CTRL_SCATTER ? "SCATTER " : "", hw->cap & NFP_NET_CFG_CTRL_GATHER ? "GATHER " : "", @@ -418,7 +419,9 @@ nfp_check_offloads(struct rte_eth_dev *dev) hw->mtu = dev->data->mtu; if (txmode->offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) { - if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN) + if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2) + ctrl |= NFP_NET_CFG_CTRL_TXVLAN_V2; + else if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN) ctrl |= NFP_NET_CFG_CTRL_TXVLAN; } @@ -775,7 +778,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) RTE_ETH_RX_OFFLOAD_UDP_CKSUM | RTE_ETH_RX_OFFLOAD_TCP_CKSUM; - if (hw->cap & NFP_NET_CFG_CTRL_TXVLAN) + if (hw->cap & (NFP_NET_CFG_CTRL_TXVLAN | NFP_NET_CFG_CTRL_TXVLAN_V2)) dev_info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_VLAN_INSERT; if (hw->cap & NFP_NET_CFG_CTRL_TXCSUM) diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index bffdd8345e..6e2601d174 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -103,7 +103,7 @@ #define NFP_NET_CFG_CTRL_MSIXAUTO (0x1 << 20) /* MSI-X auto-masking */ #define NFP_NET_CFG_CTRL_TXRWB (0x1 << 21) /* Write-back of TX ring*/ #define NFP_NET_CFG_CTRL_L2SWITCH (0x1 << 22) /* L2 Switch */ -#define NFP_NET_CFG_CTRL_L2SWITCH_LOCAL (0x1 << 23) /* Switch to local */ +#define NFP_NET_CFG_CTRL_TXVLAN_V2 (0x1 << 23) /* Enable VLAN insert with metadata */ #define NFP_NET_CFG_CTRL_VXLAN (0x1 << 24) /* Enable VXLAN */ #define NFP_NET_CFG_CTRL_NVGRE (0x1 << 25) /* Enable NVGRE */ #define NFP_NET_CFG_CTRL_MSIX_TX_OFF (0x1 << 26) /* Disable MSIX for TX */ diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 200886111e..293769f240 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -833,6 +833,33 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, return 0; } +/* + * nfp_net_nfd3_tx_vlan() - Set vlan info in the nfd3 tx desc + * + * If enable NFP_NET_CFG_CTRL_TXVLAN_V2 + * Vlan_info is stored in the meta and + * is handled in the nfp_net_nfd3_set_meta_vlan + * else if enable NFP_NET_CFG_CTRL_TXVLAN + * Vlan_info is stored in the tx_desc and + * is handled in the nfp_net_nfd3_tx_vlan + */ +static void +nfp_net_nfd3_tx_vlan(struct nfp_net_txq *txq, + struct nfp_net_nfd3_tx_desc *txd, + struct rte_mbuf *mb) +{ + struct nfp_net_hw *hw = txq->hw; + + if ((hw->cap & NFP_NET_CFG_CTRL_TXVLAN_V2) != 0 || + (hw->cap & NFP_NET_CFG_CTRL_TXVLAN) == 0) + return; + + if ((mb->ol_flags & RTE_MBUF_F_TX_VLAN) != 0) { + txd->flags |= PCIE_DESC_TX_VLAN; + txd->vlan = mb->vlan_tci; + } +} + static void nfp_net_set_meta_vlan(struct nfp_net_meta_raw *meta_data, struct rte_mbuf *pkt, @@ -861,7 +888,7 @@ nfp_net_nfd3_set_meta_data(struct nfp_net_meta_raw *meta_data, hw = txq->hw; if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) != 0 && - (hw->ctrl & NFP_NET_CFG_CTRL_TXVLAN) != 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; @@ -960,6 +987,7 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk txd.data_len = pkt->pkt_len; nfp_net_nfd3_tx_tso(txq, &txd, pkt); nfp_net_nfd3_tx_cksum(txq, &txd, pkt); + nfp_net_nfd3_tx_vlan(txq, &txd, pkt); /* * mbuf data_len is the data in one segment and pkt_len data 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)