get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 137342,
    "url": "http://patches.dpdk.org/api/patches/137342/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240227111551.3773862-4-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": "<20240227111551.3773862-4-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240227111551.3773862-4-chaoyong.he@corigine.com",
    "date": "2024-02-27T11:15:51",
    "name": "[3/3] net/nfp: add force reload firmware option",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "bcf44a52e8d70ef95bfa89edac6c934f0772db93",
    "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/20240227111551.3773862-4-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 31242,
            "url": "http://patches.dpdk.org/api/series/31242/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31242",
            "date": "2024-02-27T11:15:48",
            "name": "reload the firmware as needed",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/31242/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/137342/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/137342/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 A441943C08;\n\tTue, 27 Feb 2024 12:16:36 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 10A4B40ED2;\n\tTue, 27 Feb 2024 12:16:22 +0100 (CET)",
            "from NAM10-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam10on2111.outbound.protection.outlook.com [40.107.93.111])\n by mails.dpdk.org (Postfix) with ESMTP id 0457440DF8\n for <dev@dpdk.org>; Tue, 27 Feb 2024 12:16:19 +0100 (CET)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by PH7PR13MB5843.namprd13.prod.outlook.com (2603:10b6:510:151::21)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.39; Tue, 27 Feb\n 2024 11:16:17 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::8e02:f738:570a:f8aa]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::8e02:f738:570a:f8aa%7]) with mapi id 15.20.7316.035; Tue, 27 Feb 2024\n 11:16:17 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=nIaGpy36TGhxhjxtMcYaILGV6DPWG6p2fQSbtw+4WRR34JFCXX4K1O9Fr4tFbFXl8wFLBWtw0oeTe0ljjNK2I/SHNDODzsvj8sqa/s6hHCUh3LOCftEKSTiv/yEzM0ZCqgBvbW8sl2m5zCYm6frknkp8BYeJNSyy3XHHWXU9o0Q2PwwHXLxsa+GiV5SC/izOtebYTCQKDrIKovunpUU8K0iLCdLAoIQ0ZnhT1CuN+F6WweGlsqUD1DfA13lfNoUoOmEaU+Qeloi14tDkVVoZdpasesHImGRTJkD0Kyp4bZWessnq7wodl+DOGthnudzSTmIEBKjRPHC2cWmFxNIvJQ==",
        "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=IciFkEM6H34j0fftlM7sD9YSabJ71Xd0jYsnJvcX73g=;\n b=T6mk6q8PHhyYPt/4OxAdgk6WOmRdqHn60an5hdUft11R5xrUT9MfLD6LsclC/A1eSTOoemUhFMm+a81L5IiMvRA8vIqauqkj6hIc8mI/l7/0pP2TK4GtUw5sS872PK76qpEmFi8I8ES/xA+P11/BKX1GI93AXd+cEL0Zsa8lG0OJ9FI+Q3HGJ1ID2iDEFF8SzHCg/DBpn8fE9lagyNlh/SF9dTLLUOrqUXdbq7s0qdcQT0Wb4L+1QP7Qf+kp6eKSfbB8+7FlzBIPOikRWMgkiwacqcPUb5bQGPCCdJOb7gPsE4pRo8t+pTeTv/JUBR6O0lk54MKgWzu3PBWYwby5WQ==",
        "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=IciFkEM6H34j0fftlM7sD9YSabJ71Xd0jYsnJvcX73g=;\n b=jwI19UEQebp0YCe99AKMJ2HIi9iL9UltryBjG1pcyZfZAc3myyrdOk/z4USR70TB1OvlZxkCyrtXdD8cmN/8J9T8JoePVH5Fqqt8kScsOARXbuas2B5s/+9W1/KuLVGnMiFwEX202Zn4Ga8rL2Zt3LKz9dqPP7FwjsioduIkRsM=",
        "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, Peng Zhang <peng.zhang@corigine.com>,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH 3/3] net/nfp: add force reload firmware option",
        "Date": "Tue, 27 Feb 2024 19:15:51 +0800",
        "Message-Id": "<20240227111551.3773862-4-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20240227111551.3773862-1-chaoyong.he@corigine.com>",
        "References": "<20240227111551.3773862-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "BY5PR20CA0002.namprd20.prod.outlook.com\n (2603:10b6:a03:1f4::15) 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_|PH7PR13MB5843:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "a799c1be-d7a7-41e8-a7c3-08dc37858495",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 3CUvWmdFKTEsrPl/P86LKu2J9iAygfddKKQNikwk0cR/h6W0BiUD82la8fDdfT11jXAcwfHWAbz0GGbgNeMzGsOK/AMg0swU8vXu7XDMJqr76hPq8WzpILjtFV0pIKkupNkBS81MA+lTd5SoVCGV5L/h8dL4CkhZ+ctHORU1/KdbhbryCJB5WN1CuVIO2X9/n2ZYpPhn2MMcUXI182hRzmtsvh84mzgyTTi+elwNgcBoSjYhy6twiy7AYqdmDg0YpWBRrVWBrLoQ1BZkw+MYK42GHYuC6NZg8CttFQC8I18kxm7Cah8Dd37l2tn0v26DnhmFzv+XF8O70ppXtLcH7PwVTbtsLly3CMKKaW+6w/FvYRz24PUNWEzOcNiePB+VpkWH6w0R3NzSdX3I/p7GMBnxLx5pUMGdQVHAofdnzpbEgPx9tywyvuk7bG8N+ndr9C8gb2is2pCPdvJ4CRR+cQcrXhX49G+aXgqr/uZLEHwb57h1M4FiULjMkfybgYWdxa08A906gfGRp0kEuCGX/f0rZ+nSdMllkRW6jwuj8DHR81cMOVF966AsFdzUiwF0TscXk/FiumAf7TQKaGzGv6zwQrRdBfxKEaCgNiZCz0cAulsSG6uXfmJuGdgJaJLJMSF0NyHChjagRPf8Gsue+k/fgLVE0a1uUip2Y9c4//zdwMXITl0+W2H8G27oLYyIxbPy78QvKHMS8RzMGnELLZ1PkuTjGH4sc0Miy6Q7gyw=",
        "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)(38350700005); DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n K49uq1AdASi2em6rRg+3cQ84DOynySlmzj4OIeHzkGR90eW2t4MVTnjn3fPM2f94BgXhIP5jaRXYVuxN7HOl11mTW8+lT6g9YUVUMKCjL8/DJ91DdHS2EXIqRDHhaxGtNxFRKEdesliGbWUujLmzG6GOb4Q7zKLP/aesS+EpkeDpnay1dUB6/XZNBfHCYLo9hQdqpFtpaptBUljHEe8R8KQ0nESfS4t38f64gRtcEiwwt6BZYONdMejPM1BywnKUsZVAIPAXLKFCpMA2LggQbuMpsMoRz9Me8tr1y++t/djB167bVAhKhc/ZzKfymGHyLjdOlBqu2LxKVosKApOTmacOYZVE2wFLch4d8ocHxFrVTHl+BPtBpYl2QJXpeILTBJ9ZqDxcZwSvx0K41Qh7JofKHGldFmvk2UoVho6FAVE6Bd02xwVoVcorslTZLW1j0eSYQWpHqhmygYuROn5O5tYtYeCmcEmTnifgk7NCTJyg2qpsSiMJ39hTZfGowFbZIfV/bjua1HiAaL5ZidS6uFfkoW6bsEdvv6BNZ0pzOWdgGlmoWPgj+smk+QKD9u0/PbMvTXrwWxGbdLWfMFRK/9z6cLKykB14q89yLy6ZDr/D3oiR9QoHztt95arAlJfUySxzzlk0S2sKz9ugsxYHtPJIsaB/BaeSfOej4nQRKrpFMsZD5Gqwh0mwYs4eMPH8O5oBegHcHBB56eizhFb/KUT424yp1UHDrqltwdbBzePIihDcxuAxs3qIZfKu8VDDWMkhskytK8U7nPQpPZsI4ucwnx62aVOyOQSjF3wtFb3ZxNXd+gI9YloufG7FBRY+z3wAX2hmblOUFKdh326RI7361PNPIMCEKh3wOJqbW0H1vdfj+w4ZK/lU5lKbGaKaJYMJsIKaaOcTktFbiyNRBjLa2XjYst4aLk21wgS9QkJb11je3NlNPa9ZCv7Flx6K2yWz2CwRRpSvzDY2PNT+0qXU9cWc6gYZ0EXq0sqycC4K92nTD7r2RkP8+kAyNHScsII8HoyaRTMbnr7Pr69x3JWcMV5x3Z2aw+vFFe1xmH2cJHfrDZ6O0sXp2eu8ovD4RrkYpgMjeJ/J/XXD77x6xVOtNFhSsdYsb0duO8S5K09iyou4GnvzLtQ9ksBm68VMA6XTJ2h7XTLzJgOzMo7gFM6Fi7R59pjdy4mGNjKHanA1Tjsi5l4hlcXfGHqFE2442IFisTQK+3yvwlm2VFMF46Xf1AjGToWaqq8A2OjjRcG6Xj/HhX1ddM+w4vaJx7cMiopD/Pv0elS3Vz5DpQ3rBSQBi8Ui1UoaXuA0KdYWEFBT3skUVppfeoCZZoz+/kJC2y8kTVBsUPtk47kEldQbohIppMd9oi6u4ot7oSWKKvaEu1MUGUJQtB/8zGX0dhh5j31ts1FYT32ZdFXR6ELSsc9D8SCZ/lPbLbnLbd+jj0XLKhkFCNKu2LbBrApM3/qIGShJgWGZ9KLzyS7n5/3zscwvWXoeJnxBz2eXt/SsVTQWniF4aX4qQSHY8MdHgICLbjUShRaX8mrOYM+oS2DsHQy+5Mp24aqFRYqVurnEdSJvDekNEewvaqM+JvrcwiTdcOTcnF5WGiDQIK/UrJHrGw==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n a799c1be-d7a7-41e8-a7c3-08dc37858495",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "27 Feb 2024 11:16:17.7167 (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 4tMb7GaOyvyGdFryf3z7Qr/h6HXcPJY4RmgyzgropbRssP60Bh/il91RP2jroaS5qTniF9MmERW7P35w5eRJ47kt7Fnsg7XDai1fLGxv5NQ=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH7PR13MB5843",
        "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: Peng Zhang <peng.zhang@corigine.com>\n\nAdd an option to force reload the firmware.\n\nThis option can be ignored in some case, for example:\nWhen using a 2 port NFP card and both with this reload firmware option,\nonly the first one will cause the firmware reload and the second one\nwill be ignored.\n\nSigned-off-by: Peng Zhang <peng.zhang@corigine.com>\nReviewed-by: Chaoyong He <chaoyong.he@corigine.com>\n---\n drivers/net/nfp/nfp_ethdev.c     | 104 +++++++++++++++++++++++++++----\n drivers/net/nfp/nfp_net_common.h |   8 +++\n 2 files changed, 100 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex 902a62a86b..8c38b4e134 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -9,6 +9,7 @@\n \n #include <eal_firmware.h>\n #include <rte_alarm.h>\n+#include <rte_kvargs.h>\n \n #include \"flower/nfp_flower.h\"\n #include \"nfd3/nfp_nfd3.h\"\n@@ -31,6 +32,71 @@\n #define NFP_NET_APP_CAP_SP_INDIFF       RTE_BIT64(0) /* Indifferent to port speed */\n \n #define NFP_PF_DRIVER_NAME net_nfp_pf\n+#define NFP_PF_FORCE_RELOAD_FW   \"force_reload_fw\"\n+\n+static int\n+nfp_devarg_handle_int(const char *key,\n+\t\tconst char *value,\n+\t\tvoid *extra_args)\n+{\n+\tchar *end_ptr;\n+\tuint64_t *num = extra_args;\n+\n+\tif (value == NULL)\n+\t\treturn -EPERM;\n+\n+\t*num = strtoul(value, &end_ptr, 10);\n+\tif (*num == ULONG_MAX) {\n+\t\tPMD_DRV_LOG(ERR, \"%s: '%s' is not a valid param\", key, value);\n+\t\treturn -ERANGE;\n+\t} else if (value == end_ptr) {\n+\t\treturn -EPERM;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static void\n+nfp_devarg_parse_force_reload_fw(struct rte_kvargs *kvlist,\n+\t\tbool *force_reload_fw)\n+{\n+\tint ret;\n+\tuint64_t value;\n+\n+\n+\tif (rte_kvargs_count(kvlist, NFP_PF_FORCE_RELOAD_FW) != 1)\n+\t\treturn;\n+\n+\tret = rte_kvargs_process(kvlist, NFP_PF_FORCE_RELOAD_FW, &nfp_devarg_handle_int, &value);\n+\tif (ret != 0)\n+\t\treturn;\n+\n+\tif (value == 1)\n+\t\t*force_reload_fw = true;\n+\telse if (value == 0)\n+\t\t*force_reload_fw = false;\n+\telse\n+\t\tPMD_DRV_LOG(ERR, \"The param does not work, the format is %s=0/1\",\n+\t\t\t\tNFP_PF_FORCE_RELOAD_FW);\n+}\n+\n+static void\n+nfp_devargs_parse(struct nfp_devargs *nfp_devargs_param,\n+\t\tconst struct rte_devargs *devargs)\n+{\n+\tstruct rte_kvargs *kvlist;\n+\n+\tif (devargs == NULL)\n+\t\treturn;\n+\n+\tkvlist = rte_kvargs_parse(devargs->args, NULL);\n+\tif (kvlist == NULL)\n+\t\treturn;\n+\n+\tnfp_devarg_parse_force_reload_fw(kvlist, &nfp_devargs_param->force_reload_fw);\n+\n+\trte_kvargs_free(kvlist);\n+}\n \n static void\n nfp_net_pf_read_mac(struct nfp_app_fw_nic *app_fw_nic,\n@@ -1116,7 +1182,8 @@ nfp_fw_reload(struct nfp_nsp *nsp,\n \n static bool\n nfp_fw_skip_load(const struct nfp_dev_info *dev_info,\n-\t\tstruct nfp_multi_pf *multi_pf)\n+\t\tstruct nfp_multi_pf *multi_pf,\n+\t\tbool *reload_fw)\n {\n \tuint8_t i;\n \tuint64_t tmp_beat;\n@@ -1150,6 +1217,11 @@ nfp_fw_skip_load(const struct nfp_dev_info *dev_info,\n \t\t\t\tin_use++;\n \t\t\t\tabnormal--;\n \t\t\t\tbeat[port_num] = 0;\n+\t\t\t\tif (*reload_fw) {\n+\t\t\t\t\t*reload_fw = false;\n+\t\t\t\t\tPMD_DRV_LOG(ERR, \"The param %s does not work\",\n+\t\t\t\t\t\t\tNFP_PF_FORCE_RELOAD_FW);\n+\t\t\t\t}\n \t\t\t}\n \t\t}\n \n@@ -1168,12 +1240,13 @@ nfp_fw_skip_load(const struct nfp_dev_info *dev_info,\n static int\n nfp_fw_reload_for_single_pf(struct nfp_nsp *nsp,\n \t\tchar *fw_name,\n-\t\tstruct nfp_cpp *cpp)\n+\t\tstruct nfp_cpp *cpp,\n+\t\tbool force_reload_fw)\n {\n \tint ret;\n \tbool fw_changed = true;\n \n-\tif (nfp_nsp_fw_loaded(nsp)) {\n+\tif (nfp_nsp_fw_loaded(nsp) && !force_reload_fw) {\n \t\tret = nfp_fw_check_change(cpp, fw_name, &fw_changed);\n \t\tif (ret != 0)\n \t\t\treturn ret;\n@@ -1194,11 +1267,13 @@ nfp_fw_reload_for_multi_pf(struct nfp_nsp *nsp,\n \t\tchar *fw_name,\n \t\tstruct nfp_cpp *cpp,\n \t\tconst struct nfp_dev_info *dev_info,\n-\t\tstruct nfp_multi_pf *multi_pf)\n+\t\tstruct nfp_multi_pf *multi_pf,\n+\t\tbool force_reload_fw)\n {\n \tint err;\n \tbool fw_changed = true;\n \tbool skip_load_fw = false;\n+\tbool reload_fw = force_reload_fw;\n \n \terr = nfp_net_keepalive_init(cpp, multi_pf);\n \tif (err != 0) {\n@@ -1212,16 +1287,16 @@ nfp_fw_reload_for_multi_pf(struct nfp_nsp *nsp,\n \t\tgoto keepalive_uninit;\n \t}\n \n-\tif (nfp_nsp_fw_loaded(nsp)) {\n+\tif (nfp_nsp_fw_loaded(nsp) && !reload_fw) {\n \t\terr = nfp_fw_check_change(cpp, fw_name, &fw_changed);\n \t\tif (err != 0)\n \t\t\tgoto keepalive_stop;\n \t}\n \n-\tif (!fw_changed)\n-\t\tskip_load_fw = nfp_fw_skip_load(dev_info, multi_pf);\n+\tif (!fw_changed || reload_fw)\n+\t\tskip_load_fw = nfp_fw_skip_load(dev_info, multi_pf, &reload_fw);\n \n-\tif (skip_load_fw)\n+\tif (skip_load_fw && !reload_fw)\n \t\treturn 0;\n \n \terr = nfp_fw_reload(nsp, fw_name);\n@@ -1246,7 +1321,8 @@ nfp_fw_setup(struct rte_pci_device *dev,\n \t\tstruct nfp_eth_table *nfp_eth_table,\n \t\tstruct nfp_hwinfo *hwinfo,\n \t\tconst struct nfp_dev_info *dev_info,\n-\t\tstruct nfp_multi_pf *multi_pf)\n+\t\tstruct nfp_multi_pf *multi_pf,\n+\t\tbool force_reload_fw)\n {\n \tint err;\n \tchar fw_name[125];\n@@ -1294,9 +1370,10 @@ nfp_fw_setup(struct rte_pci_device *dev,\n \t}\n \n \tif (multi_pf->enabled)\n-\t\terr = nfp_fw_reload_for_multi_pf(nsp, fw_name, cpp, dev_info, multi_pf);\n+\t\terr = nfp_fw_reload_for_multi_pf(nsp, fw_name, cpp, dev_info, multi_pf,\n+\t\t\t\tforce_reload_fw);\n \telse\n-\t\terr = nfp_fw_reload_for_single_pf(nsp, fw_name, cpp);\n+\t\terr = nfp_fw_reload_for_single_pf(nsp, fw_name, cpp, force_reload_fw);\n \n \tnfp_nsp_close(nsp);\n \treturn err;\n@@ -1769,8 +1846,10 @@ nfp_pf_init(struct rte_pci_device *pci_dev)\n \t\tnfp_eth_set_configured(cpp, index, 0);\n \t}\n \n+\tnfp_devargs_parse(&pf_dev->devargs, pci_dev->device.devargs);\n+\n \tif (nfp_fw_setup(pci_dev, cpp, nfp_eth_table, hwinfo,\n-\t\t\tdev_info, &pf_dev->multi_pf) != 0) {\n+\t\t\tdev_info, &pf_dev->multi_pf, pf_dev->devargs.force_reload_fw) != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Error when uploading firmware\");\n \t\tret = -EIO;\n \t\tgoto eth_table_cleanup;\n@@ -2151,3 +2230,4 @@ static struct rte_pci_driver rte_nfp_net_pf_pmd = {\n RTE_PMD_REGISTER_PCI(NFP_PF_DRIVER_NAME, rte_nfp_net_pf_pmd);\n RTE_PMD_REGISTER_PCI_TABLE(NFP_PF_DRIVER_NAME, pci_id_nfp_pf_net_map);\n RTE_PMD_REGISTER_KMOD_DEP(NFP_PF_DRIVER_NAME, \"* igb_uio | uio_pci_generic | vfio\");\n+RTE_PMD_REGISTER_PARAM_STRING(NFP_PF_DRIVER_NAME, NFP_PF_FORCE_RELOAD_FW \"=<0|1>\");\ndiff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h\nindex 9c46bfd4f6..628c0d3491 100644\n--- a/drivers/net/nfp/nfp_net_common.h\n+++ b/drivers/net/nfp/nfp_net_common.h\n@@ -94,6 +94,11 @@ struct nfp_process_share {\n \tstruct nfp_flower_service *fl_service;\n };\n \n+struct nfp_devargs {\n+\t/** Force reload firmware */\n+\tbool force_reload_fw;\n+};\n+\n struct nfp_pf_dev {\n \t/** Backpointer to associated pci device */\n \tstruct rte_pci_device *pci_dev;\n@@ -129,6 +134,9 @@ struct nfp_pf_dev {\n \t/** Synchronized info */\n \tstruct nfp_sync *sync;\n \tstruct nfp_process_share process_share;\n+\n+\t/** NFP devarg param */\n+\tstruct nfp_devargs devargs;\n };\n \n #define NFP_NET_FLOW_LIMIT    1024\n",
    "prefixes": [
        "3/3"
    ]
}