From patchwork Mon Sep 26 06:59:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 116845 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 0FA1DA00C2; Mon, 26 Sep 2022 09:00:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5BF20427ED; Mon, 26 Sep 2022 09:00:30 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2117.outbound.protection.outlook.com [40.107.244.117]) by mails.dpdk.org (Postfix) with ESMTP id C1C4241145 for ; Mon, 26 Sep 2022 09:00:27 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F8A2UAYF9p/OE2clpDOr83Uwexqolxnc2rG26Jz4AcveSQXaCmXNioX1DGZNfyCUqMXVmHIU/PRtmSrNYQMAPfQVkSn/NIxNx3QSo2CCpZMjyF4IgVU3gYzSmkrs8RnJZqFVm1rAM5OSFcSZfKZP0YWvSHriZyJi2Opth1XWJP+B19oV/dyWZwJE7TugUFXbPFIbXMkQj5F0Vb4fYnj3hXt9i9o3f8gzrmRdn7HguSFAwgJcuCu9E7XOjRZwOgHOmqkdyQ1YJVOrnQnchywTtvgwnrSWrY/KPVvyvnl4b6EUEOqyFk9T/GHc6n5DC048JtL2DTALHQeW30L/p5SBOg== 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=4pfIN3sUaBfdwVLXUCt6XZMhxr5jP1y5pehzoRF8Hb8=; b=Wfst82L2dRYr/g9Yqdudz6GQg7dq04dgq5sGfyFUERDHz/a0anqwlunlawsPWCWhxVuFsQ467GJqV5sRplb/TcMVDlfAHBlPNJOP0BY0N1r15mRfKOooKcZP/HkL0nZxKSrouqKsPUe6ldQKc5n+pJS9HtdG7McAaP25VZPoocl0RdDtaMYjrRANzQww1CkfVjfevPGx2x9A4qliQueGks/lYyd7S0RaMEZtIhCwgAr3fj1omR3EMeP8IccTgGL5H08alVhDQB0U8EycplE1PMNrxdkQ5M0hfmBMJ//TeI1prlYpx+c6d2doEuj2DAdyy0YQ7AdTwwoAVyMwDgtB1g== 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=4pfIN3sUaBfdwVLXUCt6XZMhxr5jP1y5pehzoRF8Hb8=; b=Wd0EV9zFh8lZ+xG5UG47WnACAj9+lUTlFm/vAd184rppcRyNX6aWDgyvCPpe6d20C8puEbPD6Yfrk9zY4/JCB/C9metjwCGqD1ss0cX67xzmxR0qcOCN/djH/4iR8DO1gHjutwtGDSj01WnR7ABPnXwS7Dtp5LZXJk3xTPeUJdA= 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 SA1PR13MB4893.namprd13.prod.outlook.com (2603:10b6:806:18a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.14; Mon, 26 Sep 2022 07:00:26 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b%7]) with mapi id 15.20.5676.014; Mon, 26 Sep 2022 07:00:26 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He , Heinrich Kuhn Subject: [PATCH v10 04/13] net/nfp: add initial flower firmware support Date: Mon, 26 Sep 2022 14:59:48 +0800 Message-Id: <1664175597-37248-5-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> References: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2P153CA0005.APCP153.PROD.OUTLOOK.COM (2603:1096::15) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SA1PR13MB4893:EE_ X-MS-Office365-Filtering-Correlation-Id: f264fdab-985b-4ae4-8099-08da9f8cc9e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: avIJAIbi9p6HBdxRsjfHljGeA0tBDI63c18Tee8ED1Dxgl9b8Ujq0umpBWl5WnsSLaf5sjAVu9DxAP92Y1Vjp9ETWHRC46e63HDFT+9Lvy5pppdtYDMigqZFNsrmA5JxcDV/1tAgP8/aDnaTmulRyzP6rWRPiY9SPNP/RnkoIGuDUlwxAQYUSjYi3W7iu91Tu31PLIK7l0b7dbBdzJRpADUMOVWmYlWL+C9nY+uIWbCqVN57BIH96GqPe1vj4GmxcyPl85UO7mLvC5GkdnDxjZqClQpc3e2CQzco5fJ4mCIX6CNRxpgzjaaHzawv9jJGisaf6bOzopWi0FiFJ7/gXzRJykH9KkyoFzKAiwuS7xq4f/QJ7Z2BnyWP9CyHMcTApRahp9mZbdQW8a8ZNvscU87Rmlbvg3KZ9frsWtz7PwiOyg9Re/NH8gksM0t96D9cPv1ADgEnZuz1A2PO2UGXcTU+8HqNJFdWo9Ok7YpVbHfzfzAvqlbsn9VgBkPgNmb9tR0dT7f7WyGE67+kfWoLRjb0WjB7qykb6W+w3apIuCUwuVfy7NeouNHK0c3HBGEV4sHxOBjlgCEJrbWp1k1sMEUV0+isfnI+0iqE6LZULCx/iY/cuudZFMqu88iGyOH+DLo7f1mPxLe5yKWULVLDzQ2RtEix4PRCALDqz0MqnehaimMAro68RZsXUdikZNY1r8P44eW5FN+B/mikAD1xOIRLmoRX4axBHlmzGmpxn0DySxbeDCyreo5kOWnMoP5WPEKbL4s0YaI2VjBtanXreA== 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)(366004)(396003)(39830400003)(136003)(376002)(346002)(451199015)(36756003)(38100700002)(38350700002)(2906002)(86362001)(44832011)(30864003)(66946007)(8936002)(66556008)(66476007)(5660300002)(8676002)(4326008)(83380400001)(186003)(66574015)(54906003)(6512007)(6916009)(316002)(52116002)(6666004)(2616005)(26005)(6506007)(478600001)(41300700001)(107886003)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?snggjyrlQEEc7GV3T1e0bzAPpEQt?= =?utf-8?q?jF5jTdRrUNlxLpn0WDywAqJW+WdcXumkapAwxjTNzZpX0+86wtwN22hXYp80TILWV?= =?utf-8?q?vv28AlxKrRDj0I/egQm0H7ezeIiELdwr+qojxLyYlLkB1GrCZ1q3eiJ9WaC9Nt3xW?= =?utf-8?q?FYt5IjJlPBXxUDDpBMqiqAG8UH3NAGz/JgqBxJeHi4E3uQ68IKW/hOovEnHbjRvF6?= =?utf-8?q?Ky3MPPNeYhsxLMsLRJtExWjBM4i4vPpuzMHdLMpq8KZmJb4VVjWLQYJP+yg5amwGW?= =?utf-8?q?mjxoaRDDZSxI4dn8D8bM6TA7zkeJkpaVKW/R40GtuWNEfai5QIxtMr2Miq6t0K7r5?= =?utf-8?q?VhIrqiW7WqRgUVmTpmF5hAAXif5ILzPtbnGJqnki+ugKcXj2uBPf7lxWaiImFLRx5?= =?utf-8?q?FgeP8siUMkreK/RqfpH0N2VjQgtrUZN9fHRL8G5m+dxt1ceSW2cQMR1rXEuY1fMog?= =?utf-8?q?D85wk/p4hoOGpXB4vQnDDudz40SABrLBwjGCUOpx7MyJ4O2TD15SXW/8TSuPRPHkf?= =?utf-8?q?6YmU/LM+5uOXqDvNW2v9EtmuPmwBTWzIrZAXcf0DvBJzW1qUVTkTLRoU+9iqbHYPO?= =?utf-8?q?PlIkCIlpSHeDwU1jg3w7Uza4FRWMUCMvRzecNH8iuICpNgI4ZjEfjAuYJJxPWY+h4?= =?utf-8?q?JHQ7Ebio+dcRE5kJ7ZOVAWknL+7ahHAfFCI12rzYN52H7sC8zDc4oAwNPJMmq/fx4?= =?utf-8?q?n8Mczjqw3+HF23sIMUfK8z/GNHw4/vpZKQHhYBOAzMw1HzH3wFn93CoUxgraYwYDB?= =?utf-8?q?UYbkBoDgQ0U2xYwfPppxEqXNTtM9NCotb/4a3Go4gvMHWhRj41l0TIpXUKY8MCnye?= =?utf-8?q?YWhPRY67G3q2cdFbSdyvayRPXjAZUa5IVkz5q8xpeMeqaXOGCHJ0/T8YlCWhJsRHA?= =?utf-8?q?qgyWF262lHoifuvpC9d0HXvBgH+kLo3FkT0bvbVINNXigA97rjbRdurxbzGM6ScTo?= =?utf-8?q?nJhxMsUUFb+jSOf9q933szuIhbeQMcBw+BS+14iVuN3741w2+Wd2W8MxY4gTs8zyB?= =?utf-8?q?NtzOPygg7X509RPOzifM5cNlp8caZs6rV1yNiLw2+gAArNFACwRjrrvfu6joO4i8G?= =?utf-8?q?O93VyRINQvuV2p9fhiJut/Goce/jU+QwPW1sa29yHEtceF25Y/MKCJcYP+ABjiSuJ?= =?utf-8?q?mTpOoU3Rym1X5eKxVaT9FFNp+ZaUp4VxlnHPhFTd6+NcrTFJ9aZNGLcGsPNx++F7C?= =?utf-8?q?Qmn08mTFZOv5gCV736N1IeMd3AZxyluxAyrT0TtbNEaJB694BNc69V4mEkWmKbziF?= =?utf-8?q?dk04UMomCQzbPFHQxu/BU0lPpZ/sVJHmA6I0FqLCqQOAFLyYBLZZG0O2fBtYoutP3?= =?utf-8?q?KpytU+YiSRdFNa09zLiZWhrtOm9UCqVSqnFjRasL6CXlNMu/HCWKEqnCY7nYNfoxe?= =?utf-8?q?G2dRiB9NDYmfiAODm/GlLrytzoM2HCgd28XTWjNVRcLmR86OiGQ6E2InAOU4cecvu?= =?utf-8?q?DUr5aEYSqD50InZ+WpIYFet8fqLWTYgtIhwg84oLG5HaCJTIJoIPsPiWoCmLXJ8RL?= =?utf-8?q?dqi0pxcfdvjlzn4mzXbcMrx0y8pNu9U8Fg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: f264fdab-985b-4ae4-8099-08da9f8cc9e4 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2022 07:00:25.8717 (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: NpLQVOPTYqlX8+99o1XFRLB5wOZGyk2+FJdXXjm4bNAvOygpZ3DqzMUvJgEnk4aYbjViYljuJli55bzqDzVgB57+jY4GqFYs1apArwPUdzA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR13MB4893 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 Adds the basic probing infrastructure to support the flower firmware application. Adds the cpp service, used for some user tools. Signed-off-by: Chaoyong He Signed-off-by: Heinrich Kuhn Reviewed-by: Niklas Söderlund --- doc/guides/nics/nfp.rst | 13 +++++ doc/guides/rel_notes/release_22_11.rst | 7 +++ drivers/net/nfp/flower/nfp_flower.c | 45 +++++++++++++++++ drivers/net/nfp/flower/nfp_flower.h | 16 +++++++ drivers/net/nfp/meson.build | 1 + drivers/net/nfp/nfp_common.h | 1 + drivers/net/nfp/nfp_cpp_bridge.c | 88 +++++++++++++++++++++++++++++----- drivers/net/nfp/nfp_cpp_bridge.h | 6 ++- drivers/net/nfp/nfp_ethdev.c | 31 +++++++++++- 9 files changed, 192 insertions(+), 16 deletions(-) create mode 100644 drivers/net/nfp/flower/nfp_flower.c create mode 100644 drivers/net/nfp/flower/nfp_flower.h diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index 55539ac..4faab39 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -181,3 +181,16 @@ System configuration -k option shows the device driver, if any, that devices are bound to. Depending on the modules loaded at this point the new PCI devices may be bound to nfp_netvf driver. + + +Flow offload +------------ + +Use the flower firmware application, some type of Netronome's SmartNICs can +offload the flow into cards. + +The flower firmware application requires the PMD running two services: + + * PF vNIC service: handling the feedback traffic. + * ctrl vNIC service: communicate between PMD and firmware through + control message. diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 2e076ba..ad438b2 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -55,6 +55,13 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated Netronome nfp driver.** + + Add the needed data structures and logics to support the offload of rte_flow: + + * Added the support of flower firmware. + * Added the flower service infrastructure. + * **Updated Wangxun ngbe driver.** * Added support to set device link down/up. diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c new file mode 100644 index 0000000..87cb922 --- /dev/null +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2022 Corigine, Inc. + * All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +#include "../nfp_common.h" +#include "../nfp_logs.h" +#include "../nfp_ctrl.h" +#include "../nfp_cpp_bridge.h" +#include "nfp_flower.h" + +int +nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) +{ + unsigned int numa_node; + struct nfp_app_fw_flower *app_fw_flower; + + numa_node = rte_socket_id(); + + /* Allocate memory for the Flower app */ + app_fw_flower = rte_zmalloc_socket("nfp_app_fw_flower", sizeof(*app_fw_flower), + RTE_CACHE_LINE_SIZE, numa_node); + if (app_fw_flower == NULL) { + PMD_INIT_LOG(ERR, "Could not malloc app fw flower"); + return -ENOMEM; + } + + pf_dev->app_fw_priv = app_fw_flower; + + return 0; +} + +int +nfp_secondary_init_app_fw_flower(__rte_unused struct nfp_cpp *cpp) +{ + PMD_INIT_LOG(ERR, "Flower firmware not supported"); + return -ENOTSUP; +} diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h new file mode 100644 index 0000000..8b9ef95 --- /dev/null +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2022 Corigine, Inc. + * All rights reserved. + */ + +#ifndef _NFP_FLOWER_H_ +#define _NFP_FLOWER_H_ + +/* The flower application's private structure */ +struct nfp_app_fw_flower { +}; + +int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev); +int nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp); + +#endif /* _NFP_FLOWER_H_ */ diff --git a/drivers/net/nfp/meson.build b/drivers/net/nfp/meson.build index 810f02a..7ae3115 100644 --- a/drivers/net/nfp/meson.build +++ b/drivers/net/nfp/meson.build @@ -6,6 +6,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64') reason = 'only supported on 64-bit Linux' endif sources = files( + 'flower/nfp_flower.c', 'nfpcore/nfp_cpp_pcie_ops.c', 'nfpcore/nfp_nsp.c', 'nfpcore/nfp_cppcore.c', diff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h index 5bdf028..52dc3ca 100644 --- a/drivers/net/nfp/nfp_common.h +++ b/drivers/net/nfp/nfp_common.h @@ -116,6 +116,7 @@ /* Firmware application ID's */ enum nfp_app_fw_id { NFP_APP_FW_CORE_NIC = 0x1, + NFP_APP_FW_FLOWER_NIC = 0x3, }; /* nfp_qcp_ptr - Read or Write Pointer of a queue */ diff --git a/drivers/net/nfp/nfp_cpp_bridge.c b/drivers/net/nfp/nfp_cpp_bridge.c index 0922ea9..155628d 100644 --- a/drivers/net/nfp/nfp_cpp_bridge.c +++ b/drivers/net/nfp/nfp_cpp_bridge.c @@ -28,22 +28,86 @@ static int nfp_cpp_bridge_serve_write(int sockfd, struct nfp_cpp *cpp); static int nfp_cpp_bridge_serve_read(int sockfd, struct nfp_cpp *cpp); static int nfp_cpp_bridge_serve_ioctl(int sockfd, struct nfp_cpp *cpp); +static int nfp_cpp_bridge_service_func(void *args); -void nfp_register_cpp_service(struct nfp_cpp *cpp) +int +nfp_map_service(uint32_t service_id) { - uint32_t *cpp_service_id = NULL; - struct rte_service_spec service; + int32_t ret; + uint32_t slcore = 0; + int32_t slcore_count; + uint8_t service_count; + const char *service_name; + uint32_t slcore_array[RTE_MAX_LCORE]; + uint8_t min_service_count = UINT8_MAX; + + slcore_count = rte_service_lcore_list(slcore_array, RTE_MAX_LCORE); + if (slcore_count <= 0) { + PMD_INIT_LOG(DEBUG, "No service cores found"); + return -ENOENT; + } + + /* + * Find a service core with the least number of services already + * registered to it + */ + while (slcore_count--) { + service_count = rte_service_lcore_count_services(slcore_array[slcore_count]); + if (service_count < min_service_count) { + slcore = slcore_array[slcore_count]; + min_service_count = service_count; + } + } + + service_name = rte_service_get_name(service_id); + PMD_INIT_LOG(INFO, "Mapping service %s to core %u", service_name, slcore); - memset(&service, 0, sizeof(struct rte_service_spec)); - snprintf(service.name, sizeof(service.name), "nfp_cpp_service"); - service.callback = nfp_cpp_bridge_service_func; - service.callback_userdata = (void *)cpp; + ret = rte_service_map_lcore_set(service_id, slcore, 1); + if (ret != 0) { + PMD_INIT_LOG(DEBUG, "Could not map flower service"); + return -ENOENT; + } - if (rte_service_component_register(&service, - cpp_service_id)) - RTE_LOG(WARNING, PMD, "NFP CPP bridge service register() failed"); + rte_service_runstate_set(service_id, 1); + rte_service_component_runstate_set(service_id, 1); + rte_service_lcore_start(slcore); + if (rte_service_may_be_active(slcore)) + PMD_INIT_LOG(INFO, "The service %s is running", service_name); else - RTE_LOG(DEBUG, PMD, "NFP CPP bridge service registered"); + PMD_INIT_LOG(ERR, "The service %s is not running", service_name); + + return 0; +} + +int +nfp_enable_cpp_service(struct nfp_cpp *cpp) +{ + int ret; + uint32_t service_id = 0; + struct rte_service_spec cpp_service = { + .name = "nfp_cpp_service", + .callback = nfp_cpp_bridge_service_func, + }; + + cpp_service.callback_userdata = (void *)cpp; + + /* Register the cpp service */ + ret = rte_service_component_register(&cpp_service, &service_id); + if (ret != 0) { + PMD_INIT_LOG(WARNING, "Could not register nfp cpp service"); + return -EINVAL; + } + + PMD_INIT_LOG(INFO, "NFP cpp service registered"); + + /* Map it to available service core*/ + ret = nfp_map_service(service_id); + if (ret != 0) { + PMD_INIT_LOG(DEBUG, "Could not map nfp cpp service"); + return -EINVAL; + } + + return 0; } /* @@ -307,7 +371,7 @@ void nfp_register_cpp_service(struct nfp_cpp *cpp) * unaware of the CPP bridge performing the NFP kernel char driver for CPP * accesses. */ -int32_t +static int nfp_cpp_bridge_service_func(void *args) { struct sockaddr address; diff --git a/drivers/net/nfp/nfp_cpp_bridge.h b/drivers/net/nfp/nfp_cpp_bridge.h index aea5fdc..7fee3a9 100644 --- a/drivers/net/nfp/nfp_cpp_bridge.h +++ b/drivers/net/nfp/nfp_cpp_bridge.h @@ -16,6 +16,8 @@ #ifndef _NFP_CPP_BRIDGE_H_ #define _NFP_CPP_BRIDGE_H_ +#include "nfp_common.h" + #define NFP_CPP_MEMIO_BOUNDARY (1 << 20) #define NFP_BRIDGE_OP_READ 20 #define NFP_BRIDGE_OP_WRITE 30 @@ -24,8 +26,8 @@ #define NFP_IOCTL 'n' #define NFP_IOCTL_CPP_IDENTIFICATION _IOW(NFP_IOCTL, 0x8f, uint32_t) -void nfp_register_cpp_service(struct nfp_cpp *cpp); -int32_t nfp_cpp_bridge_service_func(void *args); +int nfp_enable_cpp_service(struct nfp_cpp *cpp); +int nfp_map_service(uint32_t service_id); #endif /* _NFP_CPP_BRIDGE_H_ */ /* diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index b0b3ef8..5a9a1bd 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -38,6 +38,8 @@ #include "nfp_ctrl.h" #include "nfp_cpp_bridge.h" +#include "flower/nfp_flower.h" + static int nfp_net_pf_read_mac(struct nfp_app_fw_nic *app_fw_nic, int port) { @@ -969,6 +971,14 @@ goto hwqueues_cleanup; } break; + case NFP_APP_FW_FLOWER_NIC: + PMD_INIT_LOG(INFO, "Initializing Flower"); + ret = nfp_init_app_fw_flower(pf_dev); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Could not initialize Flower!"); + goto hwqueues_cleanup; + } + break; default: PMD_INIT_LOG(ERR, "Unsupported Firmware loaded"); ret = -EINVAL; @@ -976,7 +986,12 @@ } /* register the CPP bridge service here for primary use */ - nfp_register_cpp_service(pf_dev->cpp); + ret = nfp_enable_cpp_service(pf_dev->cpp); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Enable cpp service failed."); + ret = -EINVAL; + goto hwqueues_cleanup; + } return 0; @@ -1100,6 +1115,14 @@ goto sym_tbl_cleanup; } break; + case NFP_APP_FW_FLOWER_NIC: + PMD_INIT_LOG(INFO, "Initializing Flower"); + ret = nfp_secondary_init_app_fw_flower(cpp); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Could not initialize Flower!"); + goto sym_tbl_cleanup; + } + break; default: PMD_INIT_LOG(ERR, "Unsupported Firmware loaded"); ret = -EINVAL; @@ -1107,7 +1130,11 @@ } /* Register the CPP bridge service for the secondary too */ - nfp_register_cpp_service(cpp); + ret = nfp_enable_cpp_service(cpp); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Enable cpp service failed."); + ret = -EINVAL; + } sym_tbl_cleanup: free(sym_tbl);