get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 135577,
    "url": "http://patches.dpdk.org/api/patches/135577/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231226072824.3163121-9-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": "<20231226072824.3163121-9-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231226072824.3163121-9-chaoyong.he@corigine.com",
    "date": "2023-12-26T07:28:18",
    "name": "[v6,08/14] net/nfp: add bond firmware creation initialization",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "2bba398ef804e51f885605f3a1c4411f66d6e8d5",
    "submitter": {
        "id": 2554,
        "url": "http://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20231226072824.3163121-9-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 30668,
            "url": "http://patches.dpdk.org/api/series/30668/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30668",
            "date": "2023-12-26T07:28:10",
            "name": "Enhance the bond framework to support offload",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/30668/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/135577/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/135577/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 2DF3B43795;\n\tTue, 26 Dec 2023 08:29:50 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id E751E40A6C;\n\tTue, 26 Dec 2023 08:29:02 +0100 (CET)",
            "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam02on2138.outbound.protection.outlook.com [40.107.212.138])\n by mails.dpdk.org (Postfix) with ESMTP id 67AAF406B4\n for <dev@dpdk.org>; Tue, 26 Dec 2023 08:29:01 +0100 (CET)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by CH3PR13MB6506.namprd13.prod.outlook.com (2603:10b6:610:1a3::20)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.27; Tue, 26 Dec\n 2023 07:28:59 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7113.027; Tue, 26 Dec 2023\n 07:28:59 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=NfybTaySFqDWxKsb9XLqfNLiZVxc2uuxBvNZ4RmEA/3sD1ZZ1JC9Uq8pn0AIwVHhQDXJCyEl6zpdCMjz4hDBrDCzlaVsGH1RQxTsfbzOn62JDZ4McbJQGm5wCyPceO3YuQZF/cdXvBeG40sLI4QrUKxs7krZpPv9rzkl6t8IOgc6tuSuFGYh6EJjOs2pYMQfbWNUaejQDFlO/yUh5IAUY/kmdnmQ8l8bohAkjCaH1c567HKHgwl9jYJO4A4ZrhTDL16XaYfETi74P3EEoKPWj/82Le0Gx5IZzMfoeQQxVG4pfbMGQZb3M/JoW0lkhhIysfxzMHRQOCc4N6Bj8R/oKA==",
        "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=Thevn4fm02KKH852VJyuieaWeZ8q+NjXqUTDBJjmcwY=;\n b=VPNxcFKRVEnvPDpR5A61f5tZfbVj8J24gowfW5nyBwBWoORci/3jH6ceguQsbIWmr2C1+tXrnNmqvqN/dNnhkERaG3l74KipfE1QXg4MkDYZsfI+nKeDMFMBgDthKyOKs1yUiOKaTA7dPzMm0Z9DYDrx8m/K1kDU6TjTyVgavHru+lOMvCINaAa2lcaxmoUn9xfun6SeVoPwzEYbJeJqjfXNnRofWBYsUX04aXZwF7Cg5Ge88xahUH0RpBePMf+qw6axAZt5J0Ou46z7AGA7nb3mAs891iaEuHW5GSDP/YsrobkeyKurwGr2DV7jY0oaOtttDBtNtR/d778dTmagGQ==",
        "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=Thevn4fm02KKH852VJyuieaWeZ8q+NjXqUTDBJjmcwY=;\n b=SgCZoD6TwrKdu37hikYBZq7q/ABIIXcX7J5PHXQQcix9NYZ7etwrGbSkIAU5L1TO0L0ETxkxLeaTJz3nVJEtA3YOn4sRSfNcPXZX4/qJWXWh2ofgYiSJub2m6sZPyUrL6lktXysDmlEITAy/rd5qa8VKZLovETXwbEwXWlwqik8=",
        "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, Long Wu <long.wu@corigine.com>,\n Peng Zhang <peng.zhang@corigine.com>,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH v6 08/14] net/nfp: add bond firmware creation initialization",
        "Date": "Tue, 26 Dec 2023 15:28:18 +0800",
        "Message-Id": "<20231226072824.3163121-9-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20231226072824.3163121-1-chaoyong.he@corigine.com>",
        "References": "<20231226023745.3144143-1-chaoyong.he@corigine.com>\n <20231226072824.3163121-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SJ0PR03CA0239.namprd03.prod.outlook.com\n (2603:10b6:a03:39f::34) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|CH3PR13MB6506:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "1c6172ad-ec77-4567-fbe7-08dc05e4539a",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 3bAToVgQw6yh/BTBctIkyz8S7P49xWwcI+yQiLF0HGm4EqOYIz20fybjPq/4pcgfTs+j5eLp2MSnbJTeTGJQSJq5SqUDarKSnAAOkbRLudiGhWACsqC5u7WuC92krC1GAThMltMvLxUIEjcgZNG2rKKIIzDhy6EBCY2coHykU2N4+2Kt1Q2eym2tk1thZYVwB4EvKCdHOvlLNb5WuWRMZRirAcFfUJf4MUkTPxJj8vVmcsrVXOvdnbOxVWo1Pmsz9Y4OiHAToFBoo4w0su0G/LfUtQiZ9lBPx+WsfJtk8gagW6NWvs2dWfas3p994ZCcgKvGj8wcQwNlXmem1I95PcyWyLjhDiROh3taaScPRopwTDYl0BmpZMF5OjXpLUQmbSkY15MnhY9e/k1eURuJKPSBwTA1orDCtqsdPOK35ZhylXRw2CXr/eli/DOLqLGatqeXM4Oo+ImZBC7qKKHPQaMaDCemd6UQV1EiMfs6uVmeIESXx14aqpgSyRjl8dUJFrKCueV49DkJopsSW/pI3TpOFfJtZqHuWPNeF7CCf/VYZ144UukGxH6fjqrEAUjldZXdbZTNMWyWil95js6BpJObGbz2/FLdSl/IghlW2cL/tQsENFZTjHi5Pz9Ge7kUn6+fYM5AAATEwnTcrLxZ2jsKd+XdI29D1pO2X+r+Sqc=",
        "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:(13230031)(376002)(346002)(136003)(396003)(366004)(39840400004)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(107886003)(26005)(1076003)(52116002)(6666004)(2616005)(6512007)(83380400001)(5660300002)(44832011)(4326008)(8676002)(41300700001)(2906002)(8936002)(6486002)(478600001)(316002)(6916009)(54906003)(66476007)(66556008)(66946007)(6506007)(86362001)(36756003)(38100700002)(38350700005);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n bToiGxX8e2UArg8MS1+bmwenJrgKeCDxAEMoC6K4uWF9EBU6nRrBuVHtX3PJlar1CoaWlVNI5jr2EarSH21Qs5XLajPZicQZXxURR0Fb8/m7Y2bcRwAPQ05mcTTmz64wmJKQgNT2SVeEFnKvBxarNfJ8e9UeSE8ihHeFqE1ONemUtqNAPMIWGR8K1xDyrNnn39xfObW0i5n2L550WYI69FiuU2dWPRLbHxYsP9h103nqf7Z/PK4yhpkIEKdBoReTB/nfCh89+A/HwiDxH7zYz5LEf+evZ7/o32TZ/O1H74n6U8LFyrUSiHOk3ZuIxg1J7subsLuBjseg/OtiEBf6TUT13E3/Tz8Wlh973iIyLEv4JpimCJTf+x1ErWZtKdgr3nciQ/eVT5ApeIyAt4z1TNCi6NOxc8W8rIRu1ZqdxtUeyP41qe7LYEOd8XrtUsB1ew9bjWrpKOKqKJBx76h1bo2+zLQLsv/xNA/DVaCBxbrIJ0puMNerPr9pvczS4qoj+cC+hWPLAkJZ+EQSRJCHMWnnJlgiJFieUPNvbR3zE1rjoQlTC++1KQ9PP553OsNmbf+J+Lt2sr5Qexuv44839YZpox5chixt6lCtrCybErfO+GlAgs7pglIDJZQTNktNAfuKQw9FU58L3SUzoopTLOeVapKs1jemxzif0Ub8Z4tVv50hxbpMYJnUIq8LT+wMFncPEXdRlTTl+dZo3I9jPD7nXmgvnI77cyOpNAcktfzpibDay9NoIxq1XBxCBMA0+AlnGn64uLVf2W1IXH9p3wo1lJ9cSJxo/hzBagtx/RJEAQgDVFAlRhND0n42xyZQ6G0Ggwb+yNmmjP0dIOmwRud7XkQ8BxPnM3XlcBFYhKbbJLvKmLH+JvVg47zNYqF+FF2FGCLqTQHC+d6rO3126hIqG8P9R43Jq9zrdxyY6K34VDioHc3HK4vsIXgIoJO8ewPRPkjYC7WO3JP3iXUadoVSTZQetnGgfdSjMl5GQZZkmrTZB7hfH1Nye2ZXrwj8A3YACkc5JWvpzQPayp4xxFKfkMiLfvKZHxmnMopn3LoXyExhN7lYLx8Cu6AZX2kyVl1DssOv0t1+enenlmfANrz7XHwq5/a7KEx+L8YzfDLkFsNU7ufy3h9swMPn/TZ2ra7JijSFpZtj0xucQ9KnC5TSHRRhTLSOdD8+CX50xQ+Np5/kAygU8LazbHuCWWZStHGU45NMDV1hZveod5C4ziuxapJ1CQvcOWPQXD2DmY7UGrEHdY1Gifkmp77Gs2cLFbYVrLVkm7f+U69XUw0VP2lPW3JC5RMzY3AqwqBxCBAL8EhZI7L8hwxHSvkltAb0528kn+GW7jjaDMBDZxnldwaliy6+DARnzInMtCu6pCk7Pn0YFK/LJhLUZwYF+e7yQXgHe8KtTLO+gjEP+HSo9hyk3jRY5Rld8AFoKjKZAL+BRcCt5wnWss3cwCzC2e6A4OS3/LSFKKe7b5SO1b7fe3gNjDYiRHnbnyoq/K4ZE601eWua0eAuv97Va6gJvWJw2fGhTyI6OX/oSAEkCbGP7+NvwaUieIjJLAuptNw1c+IGk/9Q3kYZdikIIiOcjzkk0ZbK+rbboMASBp0akaYq8Q==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 1c6172ad-ec77-4567-fbe7-08dc05e4539a",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "26 Dec 2023 07:28:59.5763 (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 z1sVZdpl8YenSvlKVuFG145MM2ocCIAuraogBQygPC1Lp7Eg46zQnWCoT/RFWSaus108+yLNYwr7cDHjcR+oSzxA2dU8qQDK4T7WLL58UU4=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CH3PR13MB6506",
        "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": "From: Long Wu <long.wu@corigine.com>\n\nFirmware supports several features and bond firmware creation is one\nof the features. Driver notifies firmware that driver supports bond\nfirmware creation feature by CPP bus write. If write successfully,\ninitialize driver configuration.\n\nSigned-off-by: Long Wu <long.wu@corigine.com>\nReviewed-by: Peng Zhang <peng.zhang@corigine.com>\nReviewed-by: Chaoyong He <chaoyong.he@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower.c      | 64 ++++++++++++++++++++++-\n drivers/net/nfp/flower/nfp_flower.h      | 13 +++++\n drivers/net/nfp/flower/nfp_flower_bond.c | 59 +++++++++++++++++++++\n drivers/net/nfp/flower/nfp_flower_bond.h | 65 ++++++++++++++++++++++++\n drivers/net/nfp/meson.build              |  1 +\n 5 files changed, 200 insertions(+), 2 deletions(-)\n create mode 100644 drivers/net/nfp/flower/nfp_flower_bond.c\n create mode 100644 drivers/net/nfp/flower/nfp_flower_bond.h",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 94b50611f0..195960e00d 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -16,6 +16,7 @@\n #include \"../nfp_cpp_bridge.h\"\n #include \"../nfp_logs.h\"\n #include \"../nfp_mtr.h\"\n+#include \"nfp_flower_bond.h\"\n #include \"nfp_flower_ctrl.h\"\n #include \"nfp_flower_representor.h\"\n \n@@ -228,6 +229,42 @@ nfp_flower_init_vnic_common(struct nfp_net_hw *hw,\n \treturn 0;\n }\n \n+static int\n+nfp_flower_bond_feature_init(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tint ret;\n+\n+\t/* Notify hardware that driver supports hardware creation of bonding port */\n+\tret = nfp_rtsym_write_le(app_fw_flower->pf_hw->pf_dev->sym_tbl,\n+\t\t\t\"_abi_flower_balance_sync_enable\", 1);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Enable bonding port hardware creation failed.\");\n+\t\treturn ret;\n+\t}\n+\n+\tret = nfp_flower_bond_init(app_fw_flower);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Initialize bonding structure failed.\");\n+\t\treturn ret;\n+\t}\n+\n+\tapp_fw_flower->flower_en_feats |= NFP_FL_ENABLE_BOND;\n+\n+\treturn 0;\n+}\n+\n+static int\n+nfp_flower_sync_feature_bits(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tint ret;\n+\n+\tret = nfp_flower_bond_feature_init(app_fw_flower);\n+\tif (ret != 0)\n+\t\treturn ret;\n+\n+\treturn 0;\n+}\n+\n static int\n nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw)\n {\n@@ -538,6 +575,20 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_net_hw *hw)\n \trte_free(eth_dev);\n }\n \n+static void\n+nfp_flower_bond_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tnfp_flower_bond_cleanup(app_fw_flower);\n+\tapp_fw_flower->flower_en_feats &= ~NFP_FL_ENABLE_BOND;\n+}\n+\n+static void\n+nfp_flower_sync_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tif (nfp_flower_support_bond_offload(app_fw_flower))\n+\t\tnfp_flower_bond_feature_cleanup(app_fw_flower);\n+}\n+\n static int\n nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw)\n {\n@@ -768,22 +819,31 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev,\n \t\tgoto ctrl_vnic_cleanup;\n \t}\n \n+\t/* Synchronize the features of driver and hardware */\n+\tret = nfp_flower_sync_feature_bits(app_fw_flower);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Sync feature bits failed\");\n+\t\tgoto ctrl_vnic_cleanup;\n+\t}\n+\n \t/* Start up flower services */\n \tret = nfp_flower_enable_services(app_fw_flower);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Could not enable flower services\");\n \t\tret = -ESRCH;\n-\t\tgoto ctrl_vnic_cleanup;\n+\t\tgoto sync_feature_cleanup;\n \t}\n \n \tret = nfp_flower_repr_create(app_fw_flower);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Could not create representor ports\");\n-\t\tgoto ctrl_vnic_cleanup;\n+\t\tgoto sync_feature_cleanup;\n \t}\n \n \treturn 0;\n \n+sync_feature_cleanup:\n+\tnfp_flower_sync_feature_cleanup(app_fw_flower);\n ctrl_vnic_cleanup:\n \tnfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw);\n ctrl_cpp_area_cleanup:\ndiff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h\nindex 8393de66c5..30443cd568 100644\n--- a/drivers/net/nfp/flower/nfp_flower.h\n+++ b/drivers/net/nfp/flower/nfp_flower.h\n@@ -7,6 +7,7 @@\n #define __NFP_FLOWER_H__\n \n #include \"../nfp_net_common.h\"\n+#include \"nfp_flower_bond.h\"\n \n /* Extra features bitmap. */\n #define NFP_FL_FEATS_GENEVE             RTE_BIT64(0)\n@@ -61,6 +62,9 @@ struct nfp_app_fw_flower {\n \t/** Number of phyport representors */\n \tuint8_t num_phyport_reprs;\n \n+\t/** Bitmap of features enabled by HW */\n+\tuint8_t flower_en_feats;\n+\n \t/** Pointer to the PF vNIC */\n \tstruct nfp_net_hw *pf_hw;\n \n@@ -96,6 +100,9 @@ struct nfp_app_fw_flower {\n \n \t/** Function pointers for different NFD version */\n \tstruct nfp_flower_nfd_func nfd_func;\n+\n+\t/** Link bond data block */\n+\tstruct nfp_flower_bond *nfp_bond;\n };\n \n static inline bool\n@@ -104,6 +111,12 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower)\n \treturn app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2;\n }\n \n+static inline bool\n+nfp_flower_support_bond_offload(const struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\treturn app_fw_flower->flower_en_feats & NFP_FL_ENABLE_BOND;\n+}\n+\n int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev,\n \t\tconst struct nfp_dev_info *dev_info);\n void nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev);\ndiff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c\nnew file mode 100644\nindex 0000000000..bbd2818e68\n--- /dev/null\n+++ b/drivers/net/nfp/flower/nfp_flower_bond.c\n@@ -0,0 +1,59 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2023 Corigine, Inc.\n+ * All rights reserved.\n+ */\n+#include \"nfp_flower_bond.h\"\n+\n+#include <rte_malloc.h>\n+\n+#include \"nfp_flower_representor.h\"\n+\n+static void\n+nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond)\n+{\n+\t/* LSB is not considered by firmware so add 2 for each increment. */\n+\tnfp_bond->batch_ver += 2;\n+\tnfp_bond->batch_ver &= NFP_FL_BOND_VERSION_MASK;\n+\n+\t/* Zero is reserved by firmware. */\n+\tif (nfp_bond->batch_ver == 0)\n+\t\tnfp_bond->batch_ver += 2;\n+}\n+\n+int\n+nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tstruct nfp_flower_bond *nfp_bond;\n+\n+\tapp_fw_flower->nfp_bond = rte_zmalloc(\"nfp_bond\",\n+\t\t\tsizeof(struct nfp_flower_bond), RTE_CACHE_LINE_SIZE);\n+\tif (app_fw_flower->nfp_bond == NULL)\n+\t\treturn -ENOMEM;\n+\n+\tnfp_bond = app_fw_flower->nfp_bond;\n+\tpthread_mutex_init(&nfp_bond->mutex, NULL);\n+\tLIST_INIT(&nfp_bond->group_list);\n+\tnfp_flower_bond_increment_version(nfp_bond);\n+\tnfp_bond->app_fw_flower = app_fw_flower;\n+\n+\treturn 0;\n+}\n+\n+void\n+nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tstruct nfp_bond_group *entry;\n+\tstruct nfp_flower_bond *nfp_bond = app_fw_flower->nfp_bond;\n+\n+\tpthread_mutex_lock(&nfp_bond->mutex);\n+\tLIST_FOREACH(entry, &nfp_bond->group_list, next) {\n+\t\tLIST_REMOVE(entry, next);\n+\t\trte_free(entry);\n+\t}\n+\tpthread_mutex_unlock(&nfp_bond->mutex);\n+\n+\tpthread_mutex_destroy(&nfp_bond->mutex);\n+\n+\trte_free(nfp_bond);\n+\tapp_fw_flower->nfp_bond = NULL;\n+}\ndiff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h\nnew file mode 100644\nindex 0000000000..be79764a23\n--- /dev/null\n+++ b/drivers/net/nfp/flower/nfp_flower_bond.h\n@@ -0,0 +1,65 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2023 Corigine, Inc.\n+ * All rights reserved.\n+ */\n+\n+#ifndef __NFP_FLOWER_BOND_H__\n+#define __NFP_FLOWER_BOND_H__\n+\n+#include <pthread.h>\n+#include <stdbool.h>\n+#include <sys/queue.h>\n+\n+/* The batch version of bond offload packets between firmware and driver */\n+#define NFP_FL_BOND_VERSION_MASK       0x007fffff    /* [0, 22] */\n+\n+#define NFP_FL_ENABLE_BOND             RTE_BIT32(1)\n+\n+/* ID 0 reserved and IDs 1 to 31 are valid */\n+#define NFP_FL_BOND_GROUP_MIN          1\n+#define NFP_FL_BOND_GROUP_MAX          32\n+\n+/* List entry for each bond group */\n+struct nfp_bond_group {\n+\t/** List entry */\n+\tLIST_ENTRY(nfp_bond_group) next;\n+\t/** Marked if the group needs synced to HW */\n+\tbool dirty;\n+\t/** Marked if the group is currently offloaded to NIC */\n+\tbool offloaded;\n+\t/** Marked if the group should be removed from NIC */\n+\tbool to_remove;\n+\t/** Marked if the group should be removed from driver */\n+\tbool to_destroy;\n+\t/** Assigned group ID for host/kernel sync */\n+\tuint32_t group_id;\n+\t/** Number of members in group */\n+\tuint32_t member_cnt;\n+\t/** Group instance in case of ID reuse */\n+\tuint32_t group_inst;\n+\t/** Group main Netdev */\n+\tstruct rte_eth_dev *main_dev;\n+};\n+\n+/* Flower APP priv data for bond offload */\n+struct nfp_flower_bond {\n+\t/** Marker to reset firmware bond config */\n+\tbool rst_cfg;\n+\t/** List of all main/member groups offloaded */\n+\tLIST_HEAD(, nfp_bond_group) group_list;\n+\t/** Lock to protect bond group_list */\n+\tpthread_mutex_t mutex;\n+\t/** Incremented for each batch of config packets */\n+\tuint32_t batch_ver;\n+\t/** Instance allocator for groups */\n+\tuint32_t global_inst;\n+\t/** Incremented for each config packet sent */\n+\tuint32_t pkt_num;\n+\t/** Pointer to the flower app */\n+\tstruct nfp_app_fw_flower *app_fw_flower;\n+};\n+\n+int nfp_flower_bond_init(struct nfp_app_fw_flower *app_fw_flower);\n+void nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower);\n+\n+#endif /* __NFP_FLOWER_BOND_H__ */\ndiff --git a/drivers/net/nfp/meson.build b/drivers/net/nfp/meson.build\nindex 46be6f60cd..f0d4bbcecb 100644\n--- a/drivers/net/nfp/meson.build\n+++ b/drivers/net/nfp/meson.build\n@@ -13,6 +13,7 @@ sources = files(\n         'flower/nfp_flower_ctrl.c',\n         'flower/nfp_flower_flow.c',\n         'flower/nfp_flower_representor.c',\n+        'flower/nfp_flower_bond.c',\n         'nfd3/nfp_nfd3_dp.c',\n         'nfdk/nfp_nfdk_dp.c',\n         'nfpcore/nfp_cppcore.c',\n",
    "prefixes": [
        "v6",
        "08/14"
    ]
}