get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 135578,
    "url": "http://patches.dpdk.org/api/patches/135578/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231226072824.3163121-10-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-10-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231226072824.3163121-10-chaoyong.he@corigine.com",
    "date": "2023-12-26T07:28:19",
    "name": "[v6,09/14] net/nfp: reset bond configuration of firmware",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c5b3a3df4b6dec4b85e9c6bf25b6636c2b25878f",
    "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-10-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/135578/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/135578/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 E8A9843795;\n\tTue, 26 Dec 2023 08:29:56 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2E3FC406BA;\n\tTue, 26 Dec 2023 08:29:05 +0100 (CET)",
            "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam02on2096.outbound.protection.outlook.com [40.107.212.96])\n by mails.dpdk.org (Postfix) with ESMTP id 3A622402D8\n for <dev@dpdk.org>; Tue, 26 Dec 2023 08:29:03 +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:29:01 +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:29:01 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Mcn/aAFgRHRcMo+arqOwqi0Ua8MTcQySOmzsMCbDjyY4pwu+Tsz2r4OxU5xvOB/XE8Q/B+SVrHJ9QAW8/cr/mEhNpttLqGf444pCwWXzgsxYUcxjUnBSUEbstf1sTjer6N+mv0fHKLZ9/U2Xocaz+7II5BVXfwMttDH8dreyVQG4p5S/bgyBBhAh6bNUtXho9bc+VpAiji0164d1KjGhCC7e+cq0hHeoEeZ/kjqGLDY+WT6CfJ9K3A+uk/AMlrdCreMNSyX5M2b3fXcr6URYNHubueXF9hZfgMJsfZaKy5Mg7Q/ERaiSQUeSJovwzYat85LKIqp6pmgy2LsJ9ugCtA==",
        "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=GsQm6C8L2kSY1k5odiGIKzT3UhOuRLGhZUYRJmXtpE4=;\n b=V7WQCHHqHUt5UxQXxVOvmnXEvPXusOCsP4Z9LMu8C9mGUsuqXGHnU26/YbGcLi0lDaIviRtXqM5zGZkz0BFNU/BOzgggGVNTtQeSQBpSY0aUa9+RW4HOY7/8Z5PFHU6BToM0X2Sampqu8oQbDUZW5eh3cG81Qy+nfgp/6VMWPYx49Ec2wJHWZYZY41GiO2qFHdJFco97cxT4yijvhurNvDJxXWkOrTHU2Q0IrED6dkLgl0THfP6ZZ54weUJQmm0okh55I6YuL2R8Xnw+dCDu7pIc3cBqpUgkAJVjn2T/MkyseRQcFsN7PLDNHRC4qRcZuvFL/RAB/UywJFESSZulTA==",
        "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=GsQm6C8L2kSY1k5odiGIKzT3UhOuRLGhZUYRJmXtpE4=;\n b=lJAp9Jsrb+Wz2F6k8fyBrd+I4XyBz6aAE/baE7PWpFvn8c8e5GhIyXZrDpKs/t1J8glLLBS7lSehpMbKDFShL1PF5FRrHbTDnV1oAWgFhs6yJWIuKHGvOh3PZkMZeRp1hqaMwLhn0nOQ0lSs7Lc4aa+qRfeyiCWYu5WceUlKK2I=",
        "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 09/14] net/nfp: reset bond configuration of firmware",
        "Date": "Tue, 26 Dec 2023 15:28:19 +0800",
        "Message-Id": "<20231226072824.3163121-10-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": "112b8d1e-45cf-420c-dbd4-08dc05e454bd",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n rR4Mbtcye1PX8JZJn/KYuwp/zC9/daq0Xv2jJKR5fboCgsVk1NFR5D6EE4lsfvTqEqSuM2igUMLwGwY5A+C0GO3Ait2NctizjLy7W6kqBbrqVUQLxhckBPB2BJ5/wjtAP6tEVL0ZvNHmDnaux5Uv2t1qT1LQSkzE3MPIGa/wx1TBxEyDmthYSEvPvNPoidNOwJLBKixxw4Af6S+EuUTGeij85pzXPInMS5eKV/dO0MWZeWq8wJZ78u1z0dolYasKpKpD5Mn+PkjCpF1qY3RzE0hotQOT8cQSfAf3y6HQPAQkS8OuatRrWaxE2UvyjWM2GPaha0HR8aEZIzupiXf7JAZfs8P83cuQHjlzgfAmIeDSFTzFI7ipFMTNRgBdxCDQdBcdYf+ln1lZGxniKmNzJM5UjjHlDw1eX/t+Re1zEGwW0OJ4n8ZLIPXbCTBtvsGF+sCGZaeEJXUgrlV2sPFIbR+BoMKe9gkmYZgX3rLJEMgtuiOoguup6Pn+WhagVbeeBCQ5SPxIB+DuE5tbMB/ScX6DdufmrZuDs+UUPCEZwmiFMnq3HiugesPzSX5K+v7+QbSb8lUZI6JC0fi/Gf+87uKqynnIC0ethr8XJQrhGUmlxbQNApeMkTfFt4lIBExSNslWLvF0IAPfL52rZOnY4SiYJvU4BO9VgvFs9+8Eh3c=",
        "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 LE+tiUIjHYNvY4mKGCwac1f/NS0vnVn9GOx4QmEDogVPM29Vvsunub74ep++UIuAgmt74lI8b19wSF9tEnhWFiGwp1vgI1+sQ54Nw/xBrvRS1sU2ncIXUhzhBFL6/mspfbFzzy3S9JdZotspSlo1vZhUhiSDzfKTJ+SYLJy8qBVGr0kkHoD36K4C5wmWtCHTYYUDHRJcpLNufZeEtBl2b8IUWgCX1BM0VZmF90DBBiWbNZbYPnOHKwutmOWa8q8zrJfQ1+sHOTS83FVjvQXKTjOCN0YYqD3xiJxJmC3CNDIA74y+Bs7xqvMPIebrVBiXwGPd6oJa+aAH6OK5/lpbZqxShgY6UEOIjC0HjrjPyclmv6ANQhcSJC0D1zrZKrxTP3x4Y9lxdtDwOObfo50MTuZ+HQZX4Huo8ML2uaWUw3CWxWHNcsRhbvqjv5USpIwgn1+P1VzJkiRN5hR/bxPAAv61o4TJVdCNDDuj4MsltYNdv5UD4R2A02BqHseg9MJZArmV6N1pjc6cz4HoEjCajsziJkMxrQz8Czm7xIupi7g2gcK2l5BIqeZs3dXJ1kgmhh9zpE9T7OalAEF2NNQhj37IuYeHUHrqAkROHXk7OgZhdhKwZpgJYvw2juz2YaPpYnqEqbYPHhq+5F3ok0WmTqrB/iQT7SoJPDAUyjjETO7jM80zS3eJ8WIqSQEhD4tcmMHx2mYHPwbZVZ0Cki46xHCOhJD1YUl6Ym/zJFxIcLaEpd29vnbLEDWZa9wOrqk68uZR6i7XDR7gJSacMvixjssuMWLdf+Two9p/gT6bqkuXA6ED+w0URtNXK4e/jvqbiAq2/LjKjOBxyk9VJlc/XPPLXBwIUC46HhrhxHX1MNX0PAAgzkl3Cn4Kkdhwot6djiBkoZ5hEmCvidslUMtUeEH+6g4qqO8roZLuIx8nwff2xF5/EwVyowsYMWlff37p/qhRepbWAgga+zDmVmqTdUGM2vqHRIfQ1sPSyEx883SNBXBGf0JS65g885dzRGsZpyRQOc3CombGHKe8+2E1JH/+WKX+H3CJ0pF8i9Td48efmwGF7Mv0a+8ourfAJ4tO0yR/eYuN/Uvr5elqzftDpd0aGEOwpmBuu2L7xoRfYbc3aYPsdM/me9ulpvASVp5ObiK7GemVIdiVC5sJPJ9KIZqlfNOu7c5U5bhf8qHdkHhLNV852ScWLW526iDtYfTxOf69MA8ltO4v7PSh1fz+kz0s1NtyFCUbCx0K+3+l0a5/wI2/apNHAovK5XFfsJnFN7CziWS30z0hmQyYpZPL0p9Z3ZJg+fweiMkMpwgzI6D2Nd1JJdKVES6ZPBwOZOmdRnOR150+7C7hscXRlouM/tbnXA7ewQFSfTv8ZXyhSNeT4OfGGfiGLnT8KrzFfRboCojkwOnqnmpTSeKYDhXsxv9ht/MRKh0drXJvi7e8z3fSYZe8ECEENN79L5bqSsRvJNBYyP2z9orQc/8L0Ex/WRUjPc8kCBYLapShgv/OpJj3O6OPZj0lJ2onO+ixFYLUAgNlLYrdO3D32gxMYJYFVaBrvGf3/tUshzS/zurt8inxmsleEkFtla/pU/qdEq1Eh34Y/9J1FhwNc6wPLrxNww==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 112b8d1e-45cf-420c-dbd4-08dc05e454bd",
        "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:29:01.5088 (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 qzYMZziWW7VHuxJsAZH/VpHPbBAJP5fX8Y7NIUezzyJFSOBHACDj55nqUkY8isdG01k6zQqj+0IpUwvD/RO8XCC/oj/SLXO2jDJRY3rEz/k=",
        "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\nDriver sends control message to reset the bond firmware\nconfiguration in flower NIC initialization. Firmware should\nreset bond configuration to avoid strange problems caused\nby residues.\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      | 23 ++++++\n drivers/net/nfp/flower/nfp_flower_bond.c | 90 ++++++++++++++++++++++++\n drivers/net/nfp/flower/nfp_flower_bond.h | 54 ++++++++++++++\n drivers/net/nfp/flower/nfp_flower_cmsg.c | 35 +++++++++\n drivers/net/nfp/flower/nfp_flower_cmsg.h |  3 +\n 5 files changed, 205 insertions(+)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 195960e00d..fc3ea84828 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -589,6 +589,22 @@ nfp_flower_sync_feature_cleanup(struct nfp_app_fw_flower *app_fw_flower)\n \t\tnfp_flower_bond_feature_cleanup(app_fw_flower);\n }\n \n+static int\n+nfp_flower_start_features(struct nfp_app_fw_flower *app_flower)\n+{\n+\tint ret;\n+\n+\tif (nfp_flower_support_bond_offload(app_flower)) {\n+\t\tret = nfp_flower_bond_reset(app_flower->nfp_bond);\n+\t\tif (ret != 0) {\n+\t\t\tPMD_INIT_LOG(ERR, \"Reset bond feature failed\");\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int\n nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw)\n {\n@@ -826,6 +842,13 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev,\n \t\tgoto ctrl_vnic_cleanup;\n \t}\n \n+\t/* Start up some features */\n+\tret = nfp_flower_start_features(app_fw_flower);\n+\tif (ret != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to start features\");\n+\t\tgoto sync_feature_cleanup;\n+\t}\n+\n \t/* Start up flower services */\n \tret = nfp_flower_enable_services(app_fw_flower);\n \tif (ret != 0) {\ndiff --git a/drivers/net/nfp/flower/nfp_flower_bond.c b/drivers/net/nfp/flower/nfp_flower_bond.c\nindex bbd2818e68..4ac27f117c 100644\n--- a/drivers/net/nfp/flower/nfp_flower_bond.c\n+++ b/drivers/net/nfp/flower/nfp_flower_bond.c\n@@ -6,8 +6,31 @@\n \n #include <rte_malloc.h>\n \n+#include \"nfp_flower_cmsg.h\"\n #include \"nfp_flower_representor.h\"\n \n+static void\n+nfp_fl_bond_cmsg_args_init(struct nfp_flower_bond_cmsg_args *cmsg_args,\n+\t\tstruct nfp_bond_group *group,\n+\t\tstruct rte_eth_dev **active_members,\n+\t\tuint32_t member_cnt,\n+\t\tenum nfp_flower_bond_batch batch)\n+{\n+\tcmsg_args->group = group;\n+\tcmsg_args->active_members = active_members;\n+\tcmsg_args->member_cnt = member_cnt;\n+\tcmsg_args->batch = batch;\n+}\n+\n+static uint32_t\n+nfp_fl_get_next_pkt_number(struct nfp_flower_bond *nfp_bond)\n+{\n+\tnfp_bond->pkt_num++;\n+\tnfp_bond->pkt_num &= NFP_FL_BOND_PKT_NUMBER_MASK;\n+\n+\treturn nfp_bond->pkt_num;\n+}\n+\n static void\n nfp_flower_bond_increment_version(struct nfp_flower_bond *nfp_bond)\n {\n@@ -57,3 +80,70 @@ nfp_flower_bond_cleanup(struct nfp_app_fw_flower *app_fw_flower)\n \trte_free(nfp_bond);\n \tapp_fw_flower->nfp_bond = NULL;\n }\n+\n+int\n+nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond)\n+{\n+\tstruct nfp_app_fw_flower *app_flower;\n+\tenum nfp_flower_bond_batch batch = NFP_FLOWER_BOND_BATCH_FIRST;\n+\tstruct nfp_flower_bond_cmsg_args init_args;\n+\n+\tapp_flower = nfp_bond->app_fw_flower;\n+\tapp_flower->nfp_bond->rst_cfg = true;\n+\n+\tnfp_fl_bond_cmsg_args_init(&init_args, NULL, NULL, 0, batch);\n+\n+\treturn nfp_flower_cmsg_bond_config_group(app_flower, &init_args, &batch);\n+}\n+\n+enum nfp_flower_bond_batch\n+nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond,\n+\t\tstruct nfp_flower_cmsg_bond_config *msg,\n+\t\tstruct nfp_flower_bond_cmsg_args *init_args)\n+{\n+\tuint32_t i;\n+\tuint8_t flags = 0;\n+\tstruct nfp_flower_representor *repr;\n+\tenum nfp_flower_bond_batch batch = init_args->batch;\n+\n+\t/* Increment batch version for each new batch of config messages. */\n+\tif (batch == NFP_FLOWER_BOND_BATCH_FIRST) {\n+\t\tflags |= NFP_FL_BOND_FIRST;\n+\t\tnfp_flower_bond_increment_version(nfp_bond);\n+\t\tbatch = NFP_FLOWER_BOND_BATCH_MEMBER;\n+\t}\n+\n+\t/* If it is a reset msg then it is also the end of the batch. */\n+\tif (nfp_bond->rst_cfg) {\n+\t\tflags |= NFP_FL_BOND_RESET;\n+\t\tbatch = NFP_FLOWER_BOND_BATCH_FINISHED;\n+\t}\n+\n+\t/*\n+\t * To signal the end of a batch, both the switch and last flags are set\n+\t * and the reserved SYNC group ID is used.\n+\t */\n+\tif (batch == NFP_FLOWER_BOND_BATCH_FINISHED) {\n+\t\tflags |= NFP_FL_BOND_SWITCH | NFP_FL_BOND_LAST;\n+\t\tnfp_bond->rst_cfg = false;\n+\t\tmsg->group_id = rte_cpu_to_be_32(NFP_FL_BOND_SYNC_ID);\n+\t\tmsg->group_inst = 0;\n+\t} else {\n+\t\tmsg->group_id = rte_cpu_to_be_32(init_args->group->group_id);\n+\t\tmsg->group_inst = rte_cpu_to_be_32(init_args->group->group_inst);\n+\t}\n+\n+\tmsg->reserved[0] = 0;\n+\tmsg->reserved[1] = 0;\n+\tmsg->ttl = NFP_FL_BOND_HOST_TTL;\n+\tmsg->ctrl_flags = flags;\n+\tmsg->batch_ver = rte_cpu_to_be_32(nfp_bond->batch_ver);\n+\tmsg->pkt_number = rte_cpu_to_be_32(nfp_fl_get_next_pkt_number(nfp_bond));\n+\n+\tfor (i = 0; i < init_args->member_cnt; i++) {\n+\t\trepr = init_args->active_members[i]->data->dev_private;\n+\t\tmsg->members[i] = rte_cpu_to_be_32(repr->port_id);\n+\t}\n+\n+\treturn batch;\n+}\ndiff --git a/drivers/net/nfp/flower/nfp_flower_bond.h b/drivers/net/nfp/flower/nfp_flower_bond.h\nindex be79764a23..e15d9e09d5 100644\n--- a/drivers/net/nfp/flower/nfp_flower_bond.h\n+++ b/drivers/net/nfp/flower/nfp_flower_bond.h\n@@ -7,18 +7,61 @@\n #define __NFP_FLOWER_BOND_H__\n \n #include <pthread.h>\n+#include <rte_byteorder.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_BOND_PKT_NUMBER_MASK    0x7fffffff    /* [0, 30] */\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+#define NFP_FL_BOND_HOST_TTL           0xff\n+\n+/* Use this ID with zero members to ack a batch config */\n+#define NFP_FL_BOND_SYNC_ID            0\n+\n+/* BOND group config flags */\n+#define NFP_FL_BOND_LAST               RTE_BIT32(1)\n+#define NFP_FL_BOND_FIRST              RTE_BIT32(2)\n+#define NFP_FL_BOND_DATA               RTE_BIT32(3)\n+#define NFP_FL_BOND_XON                RTE_BIT32(4)\n+#define NFP_FL_BOND_SYNC               RTE_BIT32(5)\n+#define NFP_FL_BOND_SWITCH             RTE_BIT32(6)\n+#define NFP_FL_BOND_RESET              RTE_BIT32(7)\n+\n+enum nfp_flower_bond_batch {\n+\tNFP_FLOWER_BOND_BATCH_FIRST,\n+\tNFP_FLOWER_BOND_BATCH_MEMBER,\n+\tNFP_FLOWER_BOND_BATCH_FINISHED\n+};\n+\n+/* Control message payload for bond config */\n+struct nfp_flower_cmsg_bond_config {\n+\t/** Configuration flags */\n+\tuint8_t ctrl_flags;\n+\t/** Reserved for future use */\n+\tuint8_t reserved[2];\n+\t/** Time to live of packet - host always sets to 0xff */\n+\tuint8_t ttl;\n+\t/** Config message packet number - increment for each message */\n+\trte_be32_t pkt_number;\n+\t/** Batch version of messages - increment for each batch of messages */\n+\trte_be32_t batch_ver;\n+\t/** Group ID applicable */\n+\trte_be32_t group_id;\n+\t/** Group instance number - increment when group is reused */\n+\trte_be32_t group_inst;\n+\t/** Array of 32-bit words listing all active group members */\n+\trte_be32_t members[];\n+};\n+\n /* List entry for each bond group */\n struct nfp_bond_group {\n \t/** List entry */\n@@ -59,7 +102,18 @@ struct nfp_flower_bond {\n \tstruct nfp_app_fw_flower *app_fw_flower;\n };\n \n+struct nfp_flower_bond_cmsg_args {\n+\tstruct nfp_bond_group *group;\n+\tstruct rte_eth_dev **active_members;\n+\tuint32_t member_cnt;\n+\tenum nfp_flower_bond_batch batch;\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+int nfp_flower_bond_reset(struct nfp_flower_bond *nfp_bond);\n+enum nfp_flower_bond_batch nfp_flower_bond_cmsg_payload(struct nfp_flower_bond *nfp_bond,\n+\t\tstruct nfp_flower_cmsg_bond_config *msg,\n+\t\tstruct nfp_flower_bond_cmsg_args *init_args);\n \n #endif /* __NFP_FLOWER_BOND_H__ */\ndiff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c\nindex 8effe9474d..0cf1bf2281 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.c\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c\n@@ -567,3 +567,38 @@ nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower,\n \n \treturn 0;\n }\n+\n+int\n+nfp_flower_cmsg_bond_config_group(struct nfp_app_fw_flower *app_flower,\n+\t\tstruct nfp_flower_bond_cmsg_args *init_args,\n+\t\tenum nfp_flower_bond_batch *batch_out)\n+{\n+\tuint16_t cnt;\n+\tuint32_t size;\n+\tstruct rte_mbuf *mbuf;\n+\tstruct nfp_flower_bond *nfp_bond;\n+\tstruct nfp_flower_cmsg_bond_config *msg;\n+\n+\tmbuf = rte_pktmbuf_alloc(app_flower->ctrl_pktmbuf_pool);\n+\tif (mbuf == NULL) {\n+\t\tPMD_DRV_LOG(DEBUG, \"Alloc mbuf for bond config failed\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tsize = sizeof(*msg) + sizeof(rte_be32_t) * init_args->member_cnt;\n+\tmsg = nfp_flower_cmsg_init(app_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_LAG_CONFIG, size);\n+\n+\tnfp_bond = app_flower->nfp_bond;\n+\n+\t*batch_out = nfp_flower_bond_cmsg_payload(nfp_bond, msg, init_args);\n+\n+\tcnt = nfp_flower_ctrl_vnic_xmit(app_flower, mbuf);\n+\tif (cnt == 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Send cmsg through ctrl vnic failed.\");\n+\t\trte_pktmbuf_free(mbuf);\n+\t\treturn -EIO;\n+\t}\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h\nindex 45543816ae..60ab58a3b1 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.h\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h\n@@ -988,5 +988,8 @@ int nfp_flower_cmsg_qos_delete(struct nfp_app_fw_flower *app_fw_flower,\n \t\tstruct nfp_profile_conf *conf);\n int nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower,\n \t\tstruct nfp_cfg_head *head);\n+int nfp_flower_cmsg_bond_config_group(struct nfp_app_fw_flower *app_flower,\n+\t\tstruct nfp_flower_bond_cmsg_args *init_args,\n+\t\tenum nfp_flower_bond_batch *batch_out);\n \n #endif /* __NFP_CMSG_H__ */\n",
    "prefixes": [
        "v6",
        "09/14"
    ]
}