get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/114873/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 114873,
    "url": "http://patches.dpdk.org/api/patches/114873/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1660296133-35266-8-git-send-email-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1660296133-35266-8-git-send-email-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1660296133-35266-8-git-send-email-chaoyong.he@corigine.com",
    "date": "2022-08-12T09:22:08",
    "name": "[v6,07/12] net/nfp: add flower ctrl VNIC related logics",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ca0c3fe6ff3e61817efbd9b7b1711e5a1ecff97d",
    "submitter": {
        "id": 2554,
        "url": "http://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 3961,
        "url": "http://patches.dpdk.org/api/users/3961/?format=api",
        "username": "arybchenko",
        "first_name": "Andrew",
        "last_name": "Rybchenko",
        "email": "andrew.rybchenko@oktetlabs.ru"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1660296133-35266-8-git-send-email-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 24287,
            "url": "http://patches.dpdk.org/api/series/24287/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24287",
            "date": "2022-08-12T09:22:01",
            "name": "preparation for the rte_flow offload of nfp PMD",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/24287/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/114873/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/114873/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id B9FE2A0543;\n\tFri, 12 Aug 2022 11:23:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id E76DA42C3B;\n\tFri, 12 Aug 2022 11:22:51 +0200 (CEST)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2136.outbound.protection.outlook.com [40.107.223.136])\n by mails.dpdk.org (Postfix) with ESMTP id DE5FB42C30\n for <dev@dpdk.org>; Fri, 12 Aug 2022 11:22:50 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by PH0PR13MB5284.namprd13.prod.outlook.com (2603:10b6:510:f5::12)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.9; Fri, 12 Aug\n 2022 09:22:49 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::402d:6abc:83a8:2431]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::402d:6abc:83a8:2431%5]) with mapi id 15.20.5525.009; Fri, 12 Aug 2022\n 09:22:49 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=N4fp4dCf/Z85CfB3BKZTb7nUcmbjsDL+WLOpdNTOFcYqCENGcMBdFoOhepNCra6CmLfrWvqao1keimfv/KjF1Lbuz1+HHTKp8Y6t392Ay2qax5MzyKn0JLO6dkzb7ILnIsgcq6EkHXQPf0efCCA9kQZwTek8VxhFrCS+ocAfBhOwE9a3oUQefTkZnU/LpiQ2nAJ3NbnEgwWN1U2ySI4Jag6atFUowAnR+JYoEAm9x3kRxIs0R6K82NGMrOmbdRL6BdIJQKlOCrBIqcZCMW8T8rY+Tzvw2cb56R04nwFYyYeDbEzTIEwGa8QoEEIwgKsqgO1z2pM2/dtScn9aUAH2kA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n 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;\n bh=iS7FH7IM/twmdZscXH5OCALELjQFdKhrzx1DB+8IhO4=;\n b=P1kqgjKARn+sPEEb962Q1VQq2YUvuXwEFXbzXUDjRR8YB3Q+MlJnRiwEk438DwwmZbk2f/ObibnNLBP2hg67MGc+KnCWUCAOJEfDrwTvb6pvjFVChE51D6GAj1TulrNjfEktGDkcMACDO+dHDEpd3egfeeqMQvvfeKEY2HvtWBlQp2/gCS55mfD9VmUQOk1F5M/jRx4nWVtXFqJfG3nMJMZvjq4Pd+jQgID1MdXH7AgbMnTenI1w4K7mEkRGQ38avF6TKkdm2ZG6HdCQxiuWcRlNPfqGt42Oat6+nj24DVVZB7QiFE44sk38aDjLSqFsLsnXGwWybcxgXWAzD6kMqw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=iS7FH7IM/twmdZscXH5OCALELjQFdKhrzx1DB+8IhO4=;\n b=SqVfirc7NU2ST2gaZQzKBZTi2BzW3YB0SxereAyCuaXOLNZESUQda5hs6iB5l5yFuWsdB+pmloGqcWRvJWglKLSVUBcUKHTS8l6dRBtSeQN4oilgQUcOkHLmp6vkhV7EW0QnH0SvoDXujp1vbLyxGbwj4X+8zMoBiBUPOdTKL4Q=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Chaoyong He <chaoyong.he@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "oss-drivers@corigine.com, niklas.soderlund@corigine.com,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH v6 07/12] net/nfp: add flower ctrl VNIC related logics",
        "Date": "Fri, 12 Aug 2022 17:22:08 +0800",
        "Message-Id": "<1660296133-35266-8-git-send-email-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1660296133-35266-1-git-send-email-chaoyong.he@corigine.com>",
        "References": "<1660296133-35266-1-git-send-email-chaoyong.he@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "SI2PR01CA0046.apcprd01.prod.exchangelabs.com\n (2603:1096:4:193::18) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "9c48ee49-a78d-4bf3-3ed3-08da7c4439bc",
        "X-MS-TrafficTypeDiagnostic": "PH0PR13MB5284:EE_",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n pki/O1RtEP+CVBFwvLD+fLKXPTy5ecSl1AN0ngthbZVk021iRFUhM+b2YZYH8PAHjJ8Ivp8NMoXk6DPx3kpzgCwt2Q58U9Mtyz3iBMZhRrS7ABIrUgh/lHyQFdgGaqdFsNkZj76ma6IBW0LEXSHiOTlh32TnWOxIHNpzx7JCuzKNGh3YTEaRPLJlmb6u8DcSaOUAeGTpi1aop6sBDrkmrjlgWaW4nAKji/NWMlh5DonqGwdFaq+bYRk/jpz2y1/jTVHJh4dMEJef4P20sueAkmHD1burUanGIsrxGBBgv20ZupmfiQOaqdDagfJMvCDdxLJ6eMFUB579V/Ou5DCeueCkJzzbYj2h4atY2fkqA6VuRhhTQYjDTDYujzk4HK6MR6YtdwogdEDQl5GEqZoydDuiUs9ZLV4CQZDoVOmuHmVk6BThsqdD+Cr2QjfuZ0jG7arupTQQOC5lPFZLYvWYneP6iheh/TBUYRqKxd+Lyuqh0SGDkDKG+H9AerMgl7ouV89YOoaBYfDvN1EbV8YWhM1mA4rIw9u23kL4wBPTDuhp9JVGXrCX0gVxJC610I9Jlkhyr49Evft6Pv4Jwl5/8gqHSiDLImksyiJnbbl4MnMAy8P+tQExrovCTxtLev8bT1KAOwiu2v1KPD5WWCB3yn/HsrkjSABmxC4p0LelKbPR6S2nxtFP0juLq2km40lnc9pjYo/3V+r85yU+PXr/5T37J6sLy0FfxDcXVsgntMo8jjaq0Fk29VM8TsW5gz7TSRgdpfkFs3r9xvVT0wU477D+Ba/0irV37JGJOlCuU2OBQ5q/lyPyZZaHseVdev831XhWqtj8Em6jZX7Vo7pXk6eI22RCFeqY16jpfpF0z2g=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230016)(4636009)(346002)(376002)(39850400004)(136003)(396003)(366004)(86362001)(36756003)(6666004)(41300700001)(30864003)(44832011)(38100700002)(38350700002)(83380400001)(186003)(6506007)(66574015)(6916009)(26005)(107886003)(6512007)(2616005)(5660300002)(8936002)(478600001)(52116002)(2906002)(6486002)(8676002)(316002)(66476007)(4326008)(66946007)(66556008);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?Vn8dlLU86JA0u0JCvGy5TS3Xu7PB?=\n\t=?utf-8?q?6HiL1lpOFgwoggEdJuliJeIgLC3fqTLOgnVDgf2iC2GKit1dVsPCRkTE3JvKFPHEO?=\n\t=?utf-8?q?H3Opg7LvlEZy7DlQcvv1OU39ol65oOhh6LNoaN6zRYQSdstWJ+/PSCWSCIl58iuvU?=\n\t=?utf-8?q?Yka2CLVqWffbP36kEYJ/RK59YLKuo7rOrONqc2/BlnE/eLg/6Su4gfpgLhyJsDvSN?=\n\t=?utf-8?q?PsRGzWqAXUvE9QdIHN97ZUWJDf+lZ54Vw2ImsklzXokZDy+OTbSZIq0ZkP+6z6Iz6?=\n\t=?utf-8?q?7wD5Ksi/5SV4HBz9+AQbnGrarkkCqmDUw3lLRAMR7dNIO5fE0qodNk9v7/wQQ6Ws3?=\n\t=?utf-8?q?HgTnD1aGyM6Y/BWyBYhKCJVhYYYIf2pM8USmzEIxXbtRfP7R6Cz8r/UWVat4+vjUo?=\n\t=?utf-8?q?8SLr2NywhlfRzJ7EkiMYnl8bU5YK41SUUkjnV2bser7pWjFOuhI7ez8QeFl4gT5At?=\n\t=?utf-8?q?bv270nchyp6MHxtbvh8blFiEmgxcvHJPNyvEJF2zFvr0ISA6hKTWJxuDOR6DvFqye?=\n\t=?utf-8?q?aZwIgfU4uSdAPhdSrcJuV9cp8pBHE0PTldjAGx9vm0DLXW4wo3jIRfnut4ifw8Lvz?=\n\t=?utf-8?q?0T94VPL9+JJViFNRS5lDu56rU5hyH0R1JoxQqEaR7GPgr3izEgX8oyZ/AQgpyu6/u?=\n\t=?utf-8?q?VurRjtYNp5X5u7RevoleJS+1f6iwu4PBPNsFmVGTziQynO3eaYW9YsSJ6KqDtv1Sf?=\n\t=?utf-8?q?UhJFbWubudP3ydY5h2th5iG+GGbfi2hB7SV3nJVuHMTlfN0onIqBF9Bavw0SnRN2J?=\n\t=?utf-8?q?PgxMyv68WpiXkzEYPkrEuhXuc8OZ1Y7orwiDkS5sq/jolK3Ib4k4bPQRDyUejhzVo?=\n\t=?utf-8?q?6XgbPFtRTSseAJ+PpsovayTKqgtT84c7rm5f7skv8J9dQoOovkkqls08CZXlEF1vV?=\n\t=?utf-8?q?lOEUTeWVZ335INVXMaeqbYIvOzxYNY12nyj0oky2uqpJjYbBN1g8cQBFGMmHJOIdV?=\n\t=?utf-8?q?l6axNzOtY8jG9feaS59OIDTSRWzB2cOKSDEIJh+pGuFF6UQTSQaq7oG+rhy6Or9hA?=\n\t=?utf-8?q?XRp4VVJGm/WGWQj5TAjfVlzcALSMm7SPBIYYPLnQ8dHOb2tp6G/W2nTaM7pFXygBb?=\n\t=?utf-8?q?0/msgfn42RvhRPvTinfJB7+SBqRseDZg1HgzAIfQFmX1EuPsx9pBEhHxosiuLbL8E?=\n\t=?utf-8?q?O626qoAqEg4VaB3ZuuAHj/hjKzM2BArC23njy1oFiEL4pCyNcaemyCtuk2KEQrf0v?=\n\t=?utf-8?q?FUw+SHCUNMk43Fk9JDLUOyZ+aOSkTV+P5NCAz3AYaq7joAvIUtAH+07Rm9PEcRiQl?=\n\t=?utf-8?q?gUi4PfLL3c+1Jf2MjLqqUN9IzNscyOLABJ0FhEwIj/yW+QS5cMDuh1bb/O6X6RX4b?=\n\t=?utf-8?q?Pg+ZCAyweoDw1vpyuYl+Ht1ipNQQFcwfg+qnpMzfMIpoOwxJf8G7kznSuoPThtoAC?=\n\t=?utf-8?q?sPlh9FTN99CoG2qeN8dP69FFiKNlPGuQGQ6mXNKnaJbHxwTmwYmDKoCk8LdWwNI5x?=\n\t=?utf-8?q?d8CNqVnIpAKL3xfRdyPVjUoOmnWzvumojI7W593JWO+IwG99frY0+7pW+T/mM95OE?=\n\t=?utf-8?q?Wc2c1qAftigImd2/BOaV7yLjgnkzMDbGfg=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 9c48ee49-a78d-4bf3-3ed3-08da7c4439bc",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "12 Aug 2022 09:22:49.5229 (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": "\n FkujamuazJeissAHRrWQZXRYWzFUcI569m4lWLcDSPGTC4SD04XFY8XJBvMi9SSb1VSFPkYUzUnGXSq36lH8gmXFElk6RSfgkyYLm30wFkY=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH0PR13MB5284",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Adds the setup/start logic for the ctrl vNIC. This vNIC is used by\nthe PMD and flower firmware as a communication channel between driver\nand firmware. In the case of OVS it is also used to communicate flow\nstatistics from hardware to the driver.\n\nA rte_eth device is not exposed to DPDK for this vNIC as it is strictly\nused internally by flower logic. Rx and Tx logic will be added later for\nthis vNIC.\n\nBecause of the add of ctrl vNIC, a new PCItoCPPBar is needed. Modify the\nrelated logics.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower.c        | 217 ++++++++++++++++++++++++++++-\n drivers/net/nfp/flower/nfp_flower.h        |   6 +\n drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c |  31 +++--\n 3 files changed, 239 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 43d4667..c9a4d50 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -27,6 +27,7 @@\n #define DEFAULT_FLBUF_SIZE 9216\n \n #define PF_VNIC_NB_DESC 1024\n+#define CTRL_VNIC_NB_DESC 512\n \n static const struct rte_eth_rxconf rx_conf = {\n \t.rx_free_thresh = DEFAULT_RX_FREE_THRESH,\n@@ -206,6 +207,11 @@\n \t.dev_close              = nfp_flower_pf_close,\n };\n \n+static const struct eth_dev_ops nfp_flower_ctrl_vnic_ops = {\n+\t.dev_infos_get          = nfp_net_infos_get,\n+\t.dev_configure          = nfp_net_configure,\n+};\n+\n static struct rte_service_spec flower_services[NFP_FLOWER_SERVICE_MAX] = {\n };\n \n@@ -504,6 +510,132 @@\n \treturn ret;\n }\n \n+static void\n+nfp_flower_cleanup_ctrl_vnic(struct nfp_net_hw *hw)\n+{\n+\tuint32_t i;\n+\tstruct nfp_app_flower *app_flower;\n+\n+\tapp_flower = nfp_app_flower_priv_get(hw->pf_dev);\n+\n+\tfor (i = 0; i < hw->max_tx_queues; i++)\n+\t\tnfp_net_tx_queue_release(hw->eth_dev, i);\n+\n+\tfor (i = 0; i < hw->max_rx_queues; i++)\n+\t\tnfp_net_rx_queue_release(hw->eth_dev, i);\n+\n+\trte_mempool_free(app_flower->ctrl_pktmbuf_pool);\n+\trte_eth_dev_release_port(hw->eth_dev);\n+}\n+\n+static int\n+nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw)\n+{\n+\tuint32_t i;\n+\tint ret = 0;\n+\tuint16_t n_txq;\n+\tuint16_t n_rxq;\n+\tuint16_t port_id;\n+\tunsigned int numa_node;\n+\tstruct rte_mempool *mp;\n+\tstruct nfp_pf_dev *pf_dev;\n+\tstruct rte_eth_dev *eth_dev;\n+\tstruct nfp_app_flower *app_flower;\n+\n+\tstatic const struct rte_eth_conf port_conf = {\n+\t\t.rxmode = {\n+\t\t\t.mq_mode = RTE_ETH_MQ_RX_NONE,\n+\t\t},\n+\t\t.txmode = {\n+\t\t\t.mq_mode = RTE_ETH_MQ_TX_NONE,\n+\t\t},\n+\t};\n+\n+\t/* Set up some pointers here for ease of use */\n+\tpf_dev = hw->pf_dev;\n+\tapp_flower = nfp_app_flower_priv_get(pf_dev);\n+\n+\tret = nfp_flower_init_vnic_common(hw, \"ctrl_vnic\");\n+\tif (ret != 0)\n+\t\tgoto done;\n+\n+\t/* Allocate memory for the eth_dev of the vNIC */\n+\thw->eth_dev = rte_eth_dev_allocate(\"nfp_ctrl_vnic\");\n+\tif (hw->eth_dev == NULL) {\n+\t\tret = -ENOMEM;\n+\t\tgoto done;\n+\t}\n+\n+\t/* Grab the pointer to the newly created rte_eth_dev here */\n+\teth_dev = hw->eth_dev;\n+\n+\tnuma_node = rte_socket_id();\n+\n+\t/* Fill in some of the eth_dev fields */\n+\teth_dev->device = &pf_dev->pci_dev->device;\n+\teth_dev->data->dev_private = hw;\n+\n+\t/* Create a mbuf pool for the ctrl vNIC */\n+\tapp_flower->ctrl_pktmbuf_pool = rte_pktmbuf_pool_create(\"ctrl_mbuf_pool\",\n+\t\t\t4 * CTRL_VNIC_NB_DESC, 64, 0, 9216, numa_node);\n+\tif (app_flower->ctrl_pktmbuf_pool == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"create mbuf pool for ctrl vnic failed\");\n+\t\tret = -ENOMEM;\n+\t\tgoto port_release;\n+\t}\n+\n+\tmp = app_flower->ctrl_pktmbuf_pool;\n+\n+\teth_dev->dev_ops = &nfp_flower_ctrl_vnic_ops;\n+\trte_eth_dev_probing_finish(eth_dev);\n+\n+\t/* Configure the ctrl vNIC device */\n+\tn_rxq = hw->max_rx_queues;\n+\tn_txq = hw->max_tx_queues;\n+\tport_id = hw->eth_dev->data->port_id;\n+\n+\tret = rte_eth_dev_configure(port_id, n_rxq, n_txq, &port_conf);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Could not configure ctrl vNIC device %d\", ret);\n+\t\tgoto mempool_cleanup;\n+\t}\n+\n+\t/* Set up the Rx queues */\n+\tfor (i = 0; i < n_rxq; i++) {\n+\t\tret = nfp_net_rx_queue_setup(eth_dev, i, CTRL_VNIC_NB_DESC, numa_node,\n+\t\t\t\t&rx_conf, mp);\n+\t\tif (ret) {\n+\t\t\tPMD_INIT_LOG(ERR, \"Configure ctrl vNIC Rx queue %d failed\", i);\n+\t\t\tgoto rx_queue_cleanup;\n+\t\t}\n+\t}\n+\n+\t/* Set up the Tx queues */\n+\tfor (i = 0; i < n_txq; i++) {\n+\t\tret = nfp_net_nfd3_tx_queue_setup(eth_dev, i, CTRL_VNIC_NB_DESC, numa_node,\n+\t\t\t\t&tx_conf);\n+\t\tif (ret) {\n+\t\t\tPMD_INIT_LOG(ERR, \"Configure ctrl vNIC Tx queue %d failed\", i);\n+\t\t\tgoto tx_queue_cleanup;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+\n+tx_queue_cleanup:\n+\tfor (i = 0; i < n_txq; i++)\n+\t\tnfp_net_tx_queue_release(eth_dev, i);\n+rx_queue_cleanup:\n+\tfor (i = 0; i < n_rxq; i++)\n+\t\tnfp_net_rx_queue_release(eth_dev, i);\n+mempool_cleanup:\n+\trte_mempool_free(mp);\n+port_release:\n+\trte_eth_dev_release_port(hw->eth_dev);\n+done:\n+\treturn ret;\n+}\n+\n static int\n nfp_flower_start_pf_vnic(struct nfp_net_hw *hw)\n {\n@@ -522,12 +654,57 @@\n \treturn 0;\n }\n \n+static int\n+nfp_flower_start_ctrl_vnic(struct nfp_net_hw *hw)\n+{\n+\tint ret;\n+\tuint32_t update;\n+\tuint32_t new_ctrl;\n+\tstruct rte_eth_dev *dev;\n+\n+\tdev = hw->eth_dev;\n+\n+\t/* Disabling queues just in case... */\n+\tnfp_net_disable_queues(dev);\n+\n+\t/* Enabling the required queues in the device */\n+\tnfp_net_enable_queues(dev);\n+\n+\t/* Writing configuration parameters in the device */\n+\tnfp_net_params_setup(hw);\n+\n+\tnew_ctrl = NFP_NET_CFG_CTRL_ENABLE;\n+\tupdate = NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING |\n+\t\t NFP_NET_CFG_UPDATE_MSIX;\n+\n+\trte_wmb();\n+\n+\t/* If an error when reconfig we avoid to change hw state */\n+\tret = nfp_net_reconfig(hw, new_ctrl, update);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to reconfig ctrl vnic\");\n+\t\treturn -EIO;\n+\t}\n+\n+\thw->ctrl = new_ctrl;\n+\n+\t/* Setup the freelist ring */\n+\tret = nfp_net_rx_freelist_setup(dev);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Error with flower ctrl vNIC freelist setup\");\n+\t\treturn -EIO;\n+\t}\n+\n+\treturn 0;\n+}\n+\n int\n nfp_init_app_flower(struct nfp_pf_dev *pf_dev)\n {\n \tint ret;\n \tunsigned int numa_node;\n \tstruct nfp_net_hw *pf_hw;\n+\tstruct nfp_net_hw *ctrl_hw;\n \tstruct nfp_app_flower *app_flower;\n \n \tnuma_node = rte_socket_id();\n@@ -573,30 +750,64 @@\n \tpf_hw->pf_dev = pf_dev;\n \tpf_hw->cpp = pf_dev->cpp;\n \n+\t/* The ctrl vNIC struct comes directly after the PF one */\n+\tapp_flower->ctrl_hw = pf_hw + 1;\n+\tctrl_hw = app_flower->ctrl_hw;\n+\n+\t/* Map the ctrl vNIC ctrl bar */\n+\tctrl_hw->ctrl_bar = nfp_rtsym_map(pf_dev->sym_tbl, \"_pf0_net_ctrl_bar\",\n+\t\t32768, &ctrl_hw->ctrl_area);\n+\tif (ctrl_hw->ctrl_bar == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"Cloud not map the ctrl vNIC ctrl bar\");\n+\t\tret = -ENODEV;\n+\t\tgoto pf_cpp_area_cleanup;\n+\t}\n+\n+\t/* Now populate the ctrl vNIC */\n+\tctrl_hw->pf_dev = pf_dev;\n+\tctrl_hw->cpp = pf_dev->cpp;\n+\n \tret = nfp_flower_init_pf_vnic(app_flower->pf_hw);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Could not initialize flower PF vNIC\");\n-\t\tgoto pf_cpp_area_cleanup;\n+\t\tgoto ctrl_cpp_area_cleanup;\n+\t}\n+\n+\tret = nfp_flower_init_ctrl_vnic(app_flower->ctrl_hw);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Could not initialize flower ctrl vNIC\");\n+\t\tgoto pf_vnic_cleanup;\n \t}\n \n \t/* Start the PF vNIC */\n \tret = nfp_flower_start_pf_vnic(app_flower->pf_hw);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Could not start flower PF vNIC\");\n-\t\tgoto pf_vnic_cleanup;\n+\t\tgoto ctrl_vnic_cleanup;\n+\t}\n+\n+\t/* Start the ctrl vNIC */\n+\tret = nfp_flower_start_ctrl_vnic(app_flower->ctrl_hw);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Could not start flower ctrl vNIC\");\n+\t\tgoto ctrl_vnic_cleanup;\n \t}\n \n \t/* Start up flower services */\n \tret = nfp_flower_enable_services(app_flower);\n \tif (ret != 0) {\n \t\tret = -ESRCH;\n-\t\tgoto pf_vnic_cleanup;\n+\t\tgoto ctrl_vnic_cleanup;\n \t}\n \n \treturn 0;\n \n+ctrl_vnic_cleanup:\n+\tnfp_flower_cleanup_ctrl_vnic(app_flower->ctrl_hw);\n pf_vnic_cleanup:\n \tnfp_flower_cleanup_pf_vnic(app_flower->pf_hw);\n+ctrl_cpp_area_cleanup:\n+\tnfp_cpp_area_free(ctrl_hw->ctrl_area);\n pf_cpp_area_cleanup:\n \tnfp_cpp_area_free(pf_dev->ctrl_area);\n eth_tbl_cleanup:\ndiff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h\nindex f6fd4eb..f11ef6d 100644\n--- a/drivers/net/nfp/flower/nfp_flower.h\n+++ b/drivers/net/nfp/flower/nfp_flower.h\n@@ -21,6 +21,12 @@ struct nfp_app_flower {\n \t/* Pointer to the PF vNIC */\n \tstruct nfp_net_hw *pf_hw;\n \n+\t/* Pointer to a mempool for the ctrlvNIC */\n+\tstruct rte_mempool *ctrl_pktmbuf_pool;\n+\n+\t/* Pointer to the ctrl vNIC */\n+\tstruct nfp_net_hw *ctrl_hw;\n+\n \t/* the eth table as reported by firmware */\n \tstruct nfp_eth_table *nfp_eth_table;\n };\ndiff --git a/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c b/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c\nindex 08bc4e8..22c8bc4 100644\n--- a/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c\n+++ b/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c\n@@ -91,7 +91,10 @@\n  * @refcnt:\tnumber of current users\n  * @iomem:\tmapped IO memory\n  */\n+#define NFP_BAR_MIN 1\n+#define NFP_BAR_MID 5\n #define NFP_BAR_MAX 7\n+\n struct nfp_bar {\n \tstruct nfp_pcie_user *nfp;\n \tuint32_t barcfg;\n@@ -292,6 +295,7 @@ struct nfp_pcie_user {\n  * BAR0.0: Reserved for General Mapping (for MSI-X access to PCIe SRAM)\n  *\n  *         Halving PCItoCPPBars for primary and secondary processes.\n+ *         For CoreNIC firmware:\n  *         NFP PMD just requires two fixed slots, one for configuration BAR,\n  *         and another for accessing the hw queues. Another slot is needed\n  *         for setting the link up or down. Secondary processes do not need\n@@ -301,6 +305,9 @@ struct nfp_pcie_user {\n  *         supported. Due to this requirement and future extensions requiring\n  *         new slots per process, only one secondary process is supported by\n  *         now.\n+ *         For Flower firmware:\n+ *         NFP PMD need another fixed slots, used as the configureation BAR\n+ *         for ctrl vNIC.\n  */\n static int\n nfp_enable_bars(struct nfp_pcie_user *nfp)\n@@ -309,11 +316,11 @@ struct nfp_pcie_user {\n \tint x, start, end;\n \n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = 4;\n-\t\tend = 1;\n+\t\tstart = NFP_BAR_MID;\n+\t\tend = NFP_BAR_MIN;\n \t} else {\n-\t\tstart = 7;\n-\t\tend = 4;\n+\t\tstart = NFP_BAR_MAX;\n+\t\tend = NFP_BAR_MID;\n \t}\n \tfor (x = start; x > end; x--) {\n \t\tbar = &nfp->bar[x - 1];\n@@ -341,11 +348,11 @@ struct nfp_pcie_user {\n \tint x, start, end;\n \n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = 4;\n-\t\tend = 1;\n+\t\tstart = NFP_BAR_MID;\n+\t\tend = NFP_BAR_MIN;\n \t} else {\n-\t\tstart = 7;\n-\t\tend = 4;\n+\t\tstart = NFP_BAR_MAX;\n+\t\tend = NFP_BAR_MID;\n \t}\n \tfor (x = start; x > end; x--) {\n \t\tbar = &nfp->bar[x - 1];\n@@ -364,11 +371,11 @@ struct nfp_pcie_user {\n \tint x, start, end;\n \n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = 4;\n-\t\tend = 1;\n+\t\tstart = NFP_BAR_MID;\n+\t\tend = NFP_BAR_MIN;\n \t} else {\n-\t\tstart = 7;\n-\t\tend = 4;\n+\t\tstart = NFP_BAR_MAX;\n+\t\tend = NFP_BAR_MID;\n \t}\n \n \tfor (x = start; x > end; x--) {\n",
    "prefixes": [
        "v6",
        "07/12"
    ]
}