From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2A28D41CF5; Tue, 21 Feb 2023 04:11:34 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C812043145; Tue, 21 Feb 2023 04:11:24 +0100 (CET) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2101.outbound.protection.outlook.com [40.107.101.101]) by mails.dpdk.org (Postfix) with ESMTP id 63B9143138 for ; Tue, 21 Feb 2023 04:11:23 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FjKjjx+6oGDBG9u1Qxhkq5PH4dMSFeNxgHWCS47nMUI9UuJwn/vCllwDOPWT2CYJfQwCp8vCxfn+8SuiUD4Zw8ahHLho0hW7YWQpDgM/C7Q4wCrBV+KSznz9+So4KS43R6bRo1tMEysgFzfwR1troKKYzl252h/Xwc4WXH7m6vinHqzy1JLTt9FqPX0HozxnQXWb4/tzbdkMcDTvK3KrEa0EiPEuK6O33lIMm574gYptDNdbml6iCSODAoiPCzO5c9t9Xl9pQQO15y7SDyGO/df0OLrZka+D9X9Je52ehtMSx+ia7faKsr4AdfCpXUppPR+tMLmIXB87jzS1pNK2Gw== 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=1i9x1rM91w0oasQOHGmPtV99hAuWOycVjz0p1cUZiek=; b=GuXbKvo5M7B+8Z2QSh9eJVXgcP24Q8MZhGV4PuURalUtPIYyCTAxACCOWyBSwVBYeIDrH7XSKth7O4vIf+O37R8M0w8bdGrLHfd/7G2hVBpJtGkRNR07uwz1ok85cR+EEHHEcHlESH7o9ZArzozT4YrMgnbd2sICBEHfL67FYj90P69q7sfe1UychS8wONlr2FPx9UOObO7fUTCz7qoMh6O0YjwU+CrbBMyWRTpT2s4Lw5aEBgDkNek1X7/wGhp/6hUhjA0KjeDi2z0LlCPBMjDACF+hhZXbo59H3QZj4cmtM6xcE823OdzhwZTERfQVPpPvABZos/TOc23bnQDVww== 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=1i9x1rM91w0oasQOHGmPtV99hAuWOycVjz0p1cUZiek=; b=Hbg4E0A37li5wm3QIIolxbRzSA6ldifzL4CgFcfGeZXVP9RMemEN0gyN8pZAEMPtbmH4cZ85Sfo4tyPyTPiWzJq0ihgiSKnq0rEqq63d3ac2kHhuEi4jVEUjD8F/UYlnLay+V4ntAUeOCg58fcLw2vpHD8hhT+lKJC5aOW7nV1U= 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 SJ0PR13MB5658.namprd13.prod.outlook.com (2603:10b6:a03:401::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.20; Tue, 21 Feb 2023 03:11:21 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7ea4:e421:5dd5:9f4d]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7ea4:e421:5dd5:9f4d%7]) with mapi id 15.20.6111.021; Tue, 21 Feb 2023 03:11:21 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Long Wu , Chaoyong He Subject: [PATCH 2/2] net/nfp: modify RSS's processing logic Date: Tue, 21 Feb 2023 11:10:55 +0800 Message-Id: <20230221031055.5484-3-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20230221031055.5484-1-chaoyong.he@corigine.com> References: <20230221031055.5484-1-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2PR02CA0066.apcprd02.prod.outlook.com (2603:1096:4:54::30) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SJ0PR13MB5658:EE_ X-MS-Office365-Filtering-Correlation-Id: 29cc1594-3ef3-40ac-799c-08db13b94e6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 08XE6NkoBihWHelg2V1j2Eo4zhcbmbb0wp9vgH3BUDis1iLfp7teOE+5nHem9Vvi1+TD9N+r3mVltwIuaad5h31zvI8IdDYb5Ll+AXoLAezuYa5yPElzXjERJ8M4m3fl8L6QsU39pNdPW/t2NK5DEMmIpeRbThnMipHZjqr2Hv813+2k1m3AN7eo67bod1+EYxRK5neo6lfA+VXbYwql6xliVGiPC0OiSdrM660LqOKyc1F4ezrvwHc2g9jh410t2kF6sTr5vsk1ZddkuCNPl75beKiMY6y5BM0brCUS3Vlbba5/BJ+/9JZDCiUM4mm7c9ZS6ZsJ393fdVLey0u6jUqD1i3MQu3GR+6cuIH8Krk7KxbVNeMs2aiMGXAU71pCC78sMx/AhsJGarVpXgU4sjCAxMSKeQQpNAPCCmSgMKBxNHPYRqFJiOxEhhFv/yl2HaMMSQTyg/FVQWCK6xb/h2ZJz1+qCiaRARYxPFF3SYok/P2p5Kb9P/qQkLMMDob9fKnBNtyscJJBb2IZ3mU6oLhzLBIDG2oPjv3cuZ4rRQpBrbjTyNQag3cucFIT/2tmVR2GKkKM/Z2U3pqKIKobgnn2Y35JFi7jWHs8/mAytxr7CDFJhLhhwl2g+Bpypys3eKNE0JJP8K8lZEU7476uINQS3R2EYueVaVgGE7ED8G5tTHLSR3N3PHkqKXxXnfRXxYInHxTxg+mLhVqg+CEeIZlz3YnvipCOzF0P2VNCovzzzMQ0eZukgv225IEPrjKZ 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:(13230025)(4636009)(346002)(39840400004)(376002)(136003)(366004)(396003)(451199018)(5660300002)(8936002)(66574015)(83380400001)(86362001)(6512007)(6486002)(38100700002)(38350700002)(478600001)(54906003)(41300700001)(8676002)(316002)(4326008)(6916009)(66556008)(66476007)(2616005)(26005)(186003)(6506007)(1076003)(52116002)(36756003)(107886003)(6666004)(66946007)(2906002)(30864003)(44832011); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S3J4SCs2Z3U0WUxlbTRiS09kSHJoQ2tESU9EdWhBa2NMWWxrejBPWWR0NHZ0?= =?utf-8?B?UFVOb3MramJGTUZwZ05QMjdCK0pWcm54Nm90ZVd4UmFBeDRYMmlyREVQVSs0?= =?utf-8?B?YnNpY2FUcmpLdDRiZmZSdlYwZGxTWUpyNkFmNWFOdVpFUW05dkhBMVBoek50?= =?utf-8?B?MFRkWDVlbzBYT3pFMmEwZTlqZWIyMWtNSHJ6SUNUZE45Y3gxM0VKMG1hM1FI?= =?utf-8?B?ZXlaREtKS293ZUIxQ3NObnJFSXdJb3N6N0g4VngxZk8vTFBvQzhzbEdodERL?= =?utf-8?B?NEduNHRlaXJQdHVHSmh3UjErN3dCaFhtT0xjY1RmcmVqUTV1K3ZqY25pZ1Zt?= =?utf-8?B?ZERpRDlBbUJzNE5BL25SdFh4SUIzOTRjOEw2QTlXL2pOaENmQzlKZFgvbldZ?= =?utf-8?B?Zy9XYzdWSTBwekRaQTRJdW1KdjB2UEF6R3lrWU51NDhKVWJqd1NQekxwbE5n?= =?utf-8?B?VWQwU3dYRGR0U2p1alFCUGpRcnZuQlBpSHRzUktiNUgzcFpUZDB4ZnRpOVpa?= =?utf-8?B?eWRnUVFFN0NVUE8xRkJ0N0tJQWI4aXRMaVl0THd0ZXNISGR1RCtuK0VhdE5N?= =?utf-8?B?a21XRjZsZ3o2SHMzZkQ2dVphR1RTcFdhYytZNnhJaUE2blcvTGFLdzBOVEVZ?= =?utf-8?B?YW4vdTQwQjdkTGxIaDUrajJZVC9HZzNmaisxZWhtdFFtbkVZL0RLbktVK01F?= =?utf-8?B?ZCtYY3RkZUIvdjZtUEZ5Z1FMenQwY05BSmZPdkZDM2FDblBzcDdjVlRhWUMr?= =?utf-8?B?aHZ6amRQZUpNSWg4aHFaY2l2a0xGN0xncktnd3hGVjZVeEV2cUMxbmRRYnll?= =?utf-8?B?U1Z3TFNmNmJlNkV5eHc3cFJHZzgxRUg4WkJ0K3ZUTWRNQlZCQmNoWURqOWVz?= =?utf-8?B?ZWhDbWMydjdDMzh2Rk1YdUo5blgxODQ3aEJ0L3lyMllzOTFyYmJ4UU1GYUpC?= =?utf-8?B?aE8zM0ZuMXVnTURGMit6VUd6dEU3UmQxamFEeUxtNWRwZzNQSzBzdVdtUk1h?= =?utf-8?B?dGl2N09SSVhRMTMvNHd0UGJnc0lnQWVIVWtieEFKWm5EeHpuSjNOS0xJY2lH?= =?utf-8?B?TkFibmNiRGhuYUZ6WmpVemttemNkRVVzYkxQZ0hyTmhzbDN3cGh2MTlNTStp?= =?utf-8?B?VzhycmxxLzJWMmMyNkRFak9rM0xzclpyc1U3b05hZnUxaitTY3diUzRoVW5P?= =?utf-8?B?cVBVVS9jRTJiZklqMTZ6ckxxZlFSVHJiby9jOWd0ZnhnTExRRFNFZThMMG1y?= =?utf-8?B?eUJOeEZHRlpIUnZhQ0llQnJtbWN6TnJLUmZzZkxVeFdNc3lkRnAzQW9qd29k?= =?utf-8?B?VWlSZUZSdUhzVDJ6WEZVeDFkSGFrTHJ3VXo3WXJTR0xnV2dPcXFPdm5ENTNt?= =?utf-8?B?M0g5RmgrSW5WdktPUUFUd3NGV3ZObmU0cXNsUllQMy9DY3NxNkZwbTdoQk83?= =?utf-8?B?MmF4Q082UjB2bC80dTJqNUorSEJndW1WVm8yRTlrY3pOcFEvbGRHcTZtR1o3?= =?utf-8?B?YUxqU0hQZnVZMkF1VkxraTdEOWtrQThSZDVMZE9ITW5QU2ZlMjFVRVV4SGdu?= =?utf-8?B?eGRkenF6STdOM2EzcWhlUEpZTWtDeGxidVM1ZFFTdTN5SlRKTDB5YXBxa0Vl?= =?utf-8?B?cjgzMWZrdWJLQ09xNmlJRE1JWlZTUVF3MnZicVlzK3Fxa2doUkQyY1FlMHh5?= =?utf-8?B?akpkTFd4RWdScC9GS1pabVJNd1YrM21aRDVIcHlxTVVPRDhhSVB6STZ1MVhl?= =?utf-8?B?UnIwRjZlUDJYYSs2UjlsWUdJdWI4aE5teVRsZWVPYlFUcTc3dFZGczNXOGhv?= =?utf-8?B?a1FHR3dIT1VlZzFKZXF6SjRmUHE1RkNLdmdDditSb2twcUNCODRJcmdxekd3?= =?utf-8?B?VkVKTFRVcHZIRzlKVW43SzQwKzRpZ3hmdGJvUUVtNjVUVFF1b2hMU0ZZTTRt?= =?utf-8?B?bHJ6KzlVQUN6U1kzQlBoUmtMVWgzdUFoVG90Z2xXMmM0eW5RVkxvYWk1Tkwy?= =?utf-8?B?MnRvamJFOVNqM2JsbXdndFVnWEIxWjBSeFNGWUJGcytmV0plbVdlUjdPbjk4?= =?utf-8?B?b3EyM2hMbW14NlNEYzlwOGhrZWpNbDN1Umc4M0lrRzMxWjJZYjZZaG1ReTYy?= =?utf-8?B?NHRQQ3FHNGVQRFdtK1lEMTJTdE1qRm5tUFpCM0xyamJLcHRUNURRSTh1TDNO?= =?utf-8?B?N1E9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29cc1594-3ef3-40ac-799c-08db13b94e6f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2023 03:11:21.3237 (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: n430GFIwPDA8iNfH+f1Lqdh/xnCeMLoYQak92toKWxYXD3qwiLriitlJjLzTGRM9Z3RKxbvtXf2SXu32hTOJybmM7fcM7h4QrozCyc3JvpI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR13MB5658 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: Long Wu The initial logic only support the single type metadata and this commit add the support of chained type metadata. This commit also make the relation between the RSS capability (v1/v2) and these two types of metadata more clear. Signed-off-by: Long Wu Reviewed-by: Niklas Söderlund Reviewed-by: Chaoyong He --- drivers/net/nfp/nfp_common.c | 23 +++++++ drivers/net/nfp/nfp_common.h | 7 +++ drivers/net/nfp/nfp_ctrl.h | 18 +++++- drivers/net/nfp/nfp_ethdev.c | 7 +-- drivers/net/nfp/nfp_ethdev_vf.c | 7 +-- drivers/net/nfp/nfp_rxtx.c | 108 ++++++++++++++++++++------------ 6 files changed, 121 insertions(+), 49 deletions(-) diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index a545a10013..a1e37ada11 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -1584,6 +1584,29 @@ nfp_net_check_dma_mask(struct nfp_net_hw *hw, char *name) return 0; } +void +nfp_net_init_metadata_format(struct nfp_net_hw *hw) +{ + /* + * ABI 4.x and ctrl vNIC always use chained metadata, in other cases we allow use of + * single metadata if only RSS(v1) is supported by hw capability, and RSS(v2) + * also indicate that we are using chained metadata. + */ + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) == 4) { + hw->meta_format = NFP_NET_METAFORMAT_CHANINED; + } else if ((hw->cap & NFP_NET_CFG_CTRL_CHAIN_META) != 0) { + hw->meta_format = NFP_NET_METAFORMAT_CHANINED; + /* + * RSS is incompatible with chained metadata. hw->cap just represents + * firmware's ability rather than the firmware's configuration. We decide + * to reduce the confusion to allow us can use hw->cap to identify RSS later. + */ + hw->cap &= ~NFP_NET_CFG_CTRL_RSS; + } else { + hw->meta_format = NFP_NET_METAFORMAT_SINGLE; + } +} + /* * Local variables: * c-file-style: "Linux" diff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h index 980f3cad89..d33675eb99 100644 --- a/drivers/net/nfp/nfp_common.h +++ b/drivers/net/nfp/nfp_common.h @@ -127,6 +127,11 @@ enum nfp_qcp_ptr { NFP_QCP_WRITE_PTR }; +enum nfp_net_meta_format { + NFP_NET_METAFORMAT_SINGLE, + NFP_NET_METAFORMAT_CHANINED, +}; + struct nfp_pf_dev { /* Backpointer to associated pci device */ struct rte_pci_device *pci_dev; @@ -203,6 +208,7 @@ struct nfp_net_hw { uint32_t max_mtu; uint32_t mtu; uint32_t rx_offset; + enum nfp_net_meta_format meta_format; /* Current values for control */ uint32_t ctrl; @@ -455,6 +461,7 @@ int nfp_net_tx_desc_limits(struct nfp_net_hw *hw, uint16_t *min_tx_desc, uint16_t *max_tx_desc); int nfp_net_check_dma_mask(struct nfp_net_hw *hw, char *name); +void nfp_net_init_metadata_format(struct nfp_net_hw *hw); #define NFP_NET_DEV_PRIVATE_TO_HW(adapter)\ (&((struct nfp_net_adapter *)adapter)->hw) diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h index 1069ff9485..bdc39f8974 100644 --- a/drivers/net/nfp/nfp_ctrl.h +++ b/drivers/net/nfp/nfp_ctrl.h @@ -110,6 +110,7 @@ #define NFP_NET_CFG_CTRL_MSIX_TX_OFF (0x1 << 26) /* Disable MSIX for TX */ #define NFP_NET_CFG_CTRL_LSO2 (0x1 << 28) /* LSO/TSO (version 2) */ #define NFP_NET_CFG_CTRL_RSS2 (0x1 << 29) /* RSS (version 2) */ +#define NFP_NET_CFG_CTRL_CSUM_COMPLETE (0x1 << 30) /* Checksum complete */ #define NFP_NET_CFG_CTRL_LIVE_ADDR (0x1U << 31)/* live MAC addr change */ #define NFP_NET_CFG_UPDATE 0x0004 #define NFP_NET_CFG_UPDATE_GEN (0x1 << 0) /* General update */ @@ -135,6 +136,8 @@ #define NFP_NET_CFG_CTRL_LSO_ANY (NFP_NET_CFG_CTRL_LSO | NFP_NET_CFG_CTRL_LSO2) #define NFP_NET_CFG_CTRL_RSS_ANY (NFP_NET_CFG_CTRL_RSS | NFP_NET_CFG_CTRL_RSS2) +#define NFP_NET_CFG_CTRL_CHAIN_META (NFP_NET_CFG_CTRL_RSS2 | \ + NFP_NET_CFG_CTRL_CSUM_COMPLETE) /* * Read-only words (0x0030 - 0x0050): * @NFP_NET_CFG_VERSION: Firmware version number @@ -218,7 +221,7 @@ /* * RSS configuration (0x0100 - 0x01ac): - * Used only when NFP_NET_CFG_CTRL_RSS is enabled + * Used only when NFP_NET_CFG_CTRL_RSS_ANY is enabled * @NFP_NET_CFG_RSS_CFG: RSS configuration word * @NFP_NET_CFG_RSS_KEY: RSS "secret" key * @NFP_NET_CFG_RSS_ITBL: RSS indirection table @@ -334,6 +337,19 @@ /* PF multiport offset */ #define NFP_PF_CSR_SLICE_SIZE (32 * 1024) +/* + * nfp_net_cfg_ctrl_rss() - Get RSS flag based on firmware's capability + * @hw_cap: The firmware's capabilities + */ +static inline uint32_t +nfp_net_cfg_ctrl_rss(uint32_t hw_cap) +{ + if ((hw_cap & NFP_NET_CFG_CTRL_RSS2) != 0) + return NFP_NET_CFG_CTRL_RSS2; + + return NFP_NET_CFG_CTRL_RSS; +} + #endif /* _NFP_CTRL_H_ */ /* * Local variables: diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index fed7b1ab13..47d5dff16c 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -134,10 +134,7 @@ nfp_net_start(struct rte_eth_dev *dev) if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) { nfp_net_rss_config_default(dev); update |= NFP_NET_CFG_UPDATE_RSS; - if (hw->cap & NFP_NET_CFG_CTRL_RSS2) - new_ctrl |= NFP_NET_CFG_CTRL_RSS2; - else - new_ctrl |= NFP_NET_CFG_CTRL_RSS; + new_ctrl |= nfp_net_cfg_ctrl_rss(hw->cap); } /* Enable device */ @@ -611,6 +608,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev) if (hw->cap & NFP_NET_CFG_CTRL_LSO2) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; + nfp_net_init_metadata_format(hw); + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 2) hw->rx_offset = NFP_NET_RX_OFFSET; else diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index c1f8a0fa0f..7834b2ee0c 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -95,10 +95,7 @@ nfp_netvf_start(struct rte_eth_dev *dev) if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) { nfp_net_rss_config_default(dev); update |= NFP_NET_CFG_UPDATE_RSS; - if (hw->cap & NFP_NET_CFG_CTRL_RSS2) - new_ctrl |= NFP_NET_CFG_CTRL_RSS2; - else - new_ctrl |= NFP_NET_CFG_CTRL_RSS; + new_ctrl |= nfp_net_cfg_ctrl_rss(hw->cap); } /* Enable device */ @@ -373,6 +370,8 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) if (hw->cap & NFP_NET_CFG_CTRL_LSO2) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; + nfp_net_init_metadata_format(hw); + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 2) hw->rx_offset = NFP_NET_RX_OFFSET; else diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 17a04cec5e..1c5a230145 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -116,26 +116,18 @@ nfp_net_rx_queue_count(void *rx_queue) return count; } -/* 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) +/* nfp_net_parse_chained_meta() - Parse the chained metadata from packet */ +static bool +nfp_net_parse_chained_meta(uint8_t *meta_base, + rte_be32_t meta_header, + struct nfp_meta_parsed *meta) { + uint8_t *meta_offset; uint32_t meta_info; uint32_t vlan_info; - uint8_t *meta_offset; - struct nfp_net_hw *hw = rxq->hw; - if (unlikely((NFD_CFG_MAJOR_VERSION_of(hw->ver) < 2) || - NFP_DESC_META_LEN(rxd) == 0)) - return; - - 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; + meta_info = rte_be_to_cpu_32(meta_header); + meta_offset = meta_base + 4; for (; meta_info != 0; meta_info >>= NFP_NET_META_FIELD_SIZE, meta_offset += 4) { switch (meta_info & NFP_NET_META_FIELD_MASK) { @@ -157,9 +149,11 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, break; default: /* Unsupported metadata can be a performance issue */ - return; + return false; } } + + return true; } /* @@ -170,33 +164,18 @@ nfp_net_parse_meta(struct nfp_meta_parsed *meta, */ 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) == 0) - return; - - hash = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_OFFSET); - hash_type = rte_be_to_cpu_32(*(uint32_t *)NFP_HASH_TYPE_OFFSET); - } - - mbuf->hash.rss = hash; + mbuf->hash.rss = meta->hash; mbuf->ol_flags |= RTE_MBUF_F_RX_RSS_HASH; - switch (hash_type) { + switch (meta->hash_type) { case NFP_NET_RSS_IPV4: mbuf->packet_type |= RTE_PTYPE_INNER_L3_IPV4; break; @@ -223,6 +202,21 @@ nfp_net_parse_meta_hash(const struct nfp_meta_parsed *meta, } } +/* + * nfp_net_parse_single_meta() - Parse the single metadata + * + * The RSS hash and hash-type are prepended to the packet data. + * Get it from metadata area. + */ +static inline void +nfp_net_parse_single_meta(uint8_t *meta_base, + rte_be32_t meta_header, + struct nfp_meta_parsed *meta) +{ + meta->hash_type = rte_be_to_cpu_32(meta_header); + meta->hash = rte_be_to_cpu_32(*(rte_be32_t *)(meta_base + 4)); +} + /* * nfp_net_parse_meta_vlan() - Set mbuf vlan_strip data based on metadata info * @@ -304,6 +298,45 @@ nfp_net_parse_meta_qinq(const struct nfp_meta_parsed *meta, mb->ol_flags |= RTE_MBUF_F_RX_QINQ | RTE_MBUF_F_RX_QINQ_STRIPPED; } +/* nfp_net_parse_meta() - Parse the metadata from packet */ +static void +nfp_net_parse_meta(struct nfp_net_rx_desc *rxds, + struct nfp_net_rxq *rxq, + struct nfp_net_hw *hw, + struct rte_mbuf *mb) +{ + uint8_t *meta_base; + rte_be32_t meta_header; + struct nfp_meta_parsed meta = {}; + + if (unlikely(NFP_DESC_META_LEN(rxds) == 0)) + return; + + meta_base = rte_pktmbuf_mtod(mb, uint8_t *); + meta_base -= NFP_DESC_META_LEN(rxds); + meta_header = *(rte_be32_t *)meta_base; + + switch (hw->meta_format) { + case NFP_NET_METAFORMAT_CHANINED: + if (nfp_net_parse_chained_meta(meta_base, meta_header, &meta)) { + nfp_net_parse_meta_hash(&meta, rxq, mb); + nfp_net_parse_meta_vlan(&meta, rxds, rxq, mb); + nfp_net_parse_meta_qinq(&meta, rxq, mb); + } else { + PMD_RX_LOG(DEBUG, "RX chained metadata format is wrong!"); + } + break; + case NFP_NET_METAFORMAT_SINGLE: + if ((rxds->rxd.flags & PCIE_DESC_RX_RSS) != 0) { + nfp_net_parse_single_meta(meta_base, meta_header, &meta); + nfp_net_parse_meta_hash(&meta, rxq, mb); + } + break; + default: + PMD_RX_LOG(DEBUG, "RX metadata do not exist."); + } +} + /* * RX path design: * @@ -341,7 +374,6 @@ 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; @@ -437,11 +469,7 @@ nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) mb->next = NULL; mb->port = rxq->port_id; - 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); - nfp_net_parse_meta_qinq(&meta, rxq, mb); + nfp_net_parse_meta(rxds, rxq, hw, mb); /* Checking the checksum flag */ nfp_net_rx_cksum(rxq, rxds, mb); -- 2.29.3