get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 60374,
    "url": "http://patches.dpdk.org/api/patches/60374/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20191002012335.85324-5-ajit.khaparde@broadcom.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": "<20191002012335.85324-5-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191002012335.85324-5-ajit.khaparde@broadcom.com",
    "date": "2019-10-02T01:23:24",
    "name": "[v3,04/15] net/bnxt: inform firmware about IF state changes",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "a9efd9bb1d7e291f9dccf46533678004b84fef16",
    "submitter": {
        "id": 501,
        "url": "http://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.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/20191002012335.85324-5-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 6660,
            "url": "http://patches.dpdk.org/api/series/6660/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=6660",
            "date": "2019-10-02T01:23:24",
            "name": "bnxt patchset to support device error recovery",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/6660/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/60374/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/60374/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E3E291B079;\n\tWed,  2 Oct 2019 03:23:47 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (unknown [192.19.229.170])\n\tby dpdk.org (Postfix) with ESMTP id B90181B079\n\tfor <dev@dpdk.org>; Wed,  2 Oct 2019 03:23:46 +0200 (CEST)",
            "from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net\n\t[10.75.242.48])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 5402130CC4B;\n\tTue,  1 Oct 2019 18:22:30 -0700 (PDT)",
            "from localhost.localdomain (unknown [10.230.30.225])\n\tby mail-irv-17.broadcom.com (Postfix) with ESMTP id 281D614008C;\n\tTue,  1 Oct 2019 18:23:40 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 5402130CC4B",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n\ts=dkimrelay; t=1569979350;\n\tbh=MVCNx0EDWbu3nyL4ooe60B1TmPFjwgmbPQayCTjlJRg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=LtMOUyiEuf5UB3wLvh9VKsG+qKR9e15tYKS0W/G58IDrrdR3NepBCPiGKk0PgE+DD\n\tcpHFd1xHXLvLFNak3RI9xRXLwek6jsKUpogY2U0QR07zQAu6ZR2jnYl2poxPFXHY3N\n\tivg/7gaDOJ7d6Xcre1elWQ0CE4Te2W424oBcNVXQ=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, Kalesh AP <kalesh-anakkur.purayil@broadcom.com>, \n\tSantoshkumar Karanappa Rastapur <santosh.rastapur@broadcom.com>,\n\tSomnath Kotur <somnath.kotur@broadcom.com>",
        "Date": "Tue,  1 Oct 2019 18:23:24 -0700",
        "Message-Id": "<20191002012335.85324-5-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.20.1 (Apple Git-117)",
        "In-Reply-To": "<20191002012335.85324-1-ajit.khaparde@broadcom.com>",
        "References": "<7c08999f-13f3-5fb6-39a2-557a0884bfde@intel.com>\n\t<20191002012335.85324-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 04/15] net/bnxt: inform firmware about IF\n\tstate changes",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>\n\nUse latest firmware API to inform firmware about IF state changes.\nFirmware has the option to clean up resources during IF down and\nto require the driver to reserve resources again during IF up.\n\nDuring port start, HWRM_FUNC_DRV_IF_CHANGE command response\nflags indicates that firmware has reset. Add logic to re-probe\nthe firmware and re-setup resources.\n\nSigned-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>\nReviewed-by: Santoshkumar Karanappa Rastapur <santosh.rastapur@broadcom.com>\nReviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>\nReviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h        |  2 ++\n drivers/net/bnxt/bnxt_ethdev.c | 30 ++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_hwrm.c   | 42 ++++++++++++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_hwrm.h   |  1 +\n 4 files changed, 75 insertions(+)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex 8797b032ee..040cae3b19 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -370,6 +370,8 @@ struct bnxt {\n #define BNXT_FLAG_STINGRAY\t(1 << 14)\n #define BNXT_FLAG_FW_RESET\t(1 << 15)\n #define BNXT_FLAG_FATAL_ERROR\t(1 << 16)\n+#define BNXT_FLAG_FW_CAP_IF_CHANGE\t(1 << 17)\n+#define BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE\t(1 << 18)\n #define BNXT_FLAG_EXT_STATS_SUPPORTED\t(1 << 29)\n #define BNXT_FLAG_NEW_RM\t(1 << 30)\n #define BNXT_FLAG_INIT_DONE\t(1U << 31)\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 6bc006a719..1bb84eacd9 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -794,6 +794,25 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)\n \treturn bnxt_xmit_pkts;\n }\n \n+static int bnxt_handle_if_change_status(struct bnxt *bp)\n+{\n+\tint rc;\n+\n+\t/* Since fw has undergone a reset and lost all contexts,\n+\t * set fatal flag to not issue hwrm during cleanup\n+\t */\n+\tbp->flags |= BNXT_FLAG_FATAL_ERROR;\n+\tbnxt_uninit_resources(bp, true);\n+\n+\t/* clear fatal flag so that re-init happens */\n+\tbp->flags &= ~BNXT_FLAG_FATAL_ERROR;\n+\trc = bnxt_init_resources(bp, true);\n+\n+\tbp->flags &= ~BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE;\n+\n+\treturn rc;\n+}\n+\n static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt *bp = eth_dev->data->dev_private;\n@@ -807,6 +826,15 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)\n \t\t\tbp->rx_cp_nr_rings, RTE_ETHDEV_QUEUE_STAT_CNTRS);\n \t}\n \n+\trc = bnxt_hwrm_if_change(bp, 1);\n+\tif (!rc) {\n+\t\tif (bp->flags & BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE) {\n+\t\t\trc = bnxt_handle_if_change_status(bp);\n+\t\t\tif (rc)\n+\t\t\t\treturn rc;\n+\t\t}\n+\t}\n+\n \trc = bnxt_init_chip(bp);\n \tif (rc)\n \t\tgoto error;\n@@ -833,6 +861,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)\n \treturn 0;\n \n error:\n+\tbnxt_hwrm_if_change(bp, 0);\n \tbnxt_shutdown_nic(bp);\n \tbnxt_free_tx_mbufs(bp);\n \tbnxt_free_rx_mbufs(bp);\n@@ -899,6 +928,7 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)\n \tbnxt_free_tx_mbufs(bp);\n \tbnxt_free_rx_mbufs(bp);\n \tbnxt_shutdown_nic(bp);\n+\tbnxt_hwrm_if_change(bp, 0);\n \tbp->dev_stopped = 1;\n }\n \ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex abbad0152c..1bdbb1433d 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -726,6 +726,11 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp)\n \trc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);\n \n \tHWRM_CHECK_RESULT();\n+\n+\tflags = rte_le_to_cpu_32(resp->flags);\n+\tif (flags & HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED)\n+\t\tbp->flags |= BNXT_FLAG_FW_CAP_IF_CHANGE;\n+\n \tHWRM_UNLOCK();\n \n \tbp->flags |= BNXT_FLAG_REGISTERED;\n@@ -4659,3 +4664,40 @@ int bnxt_hwrm_set_mac(struct bnxt *bp)\n \n \treturn rc;\n }\n+\n+int bnxt_hwrm_if_change(struct bnxt *bp, bool up)\n+{\n+\tstruct hwrm_func_drv_if_change_output *resp = bp->hwrm_cmd_resp_addr;\n+\tstruct hwrm_func_drv_if_change_input req = {0};\n+\tuint32_t flags;\n+\tint rc;\n+\n+\tif (!(bp->flags & BNXT_FLAG_FW_CAP_IF_CHANGE))\n+\t\treturn 0;\n+\n+\t/* Do not issue FUNC_DRV_IF_CHANGE during reset recovery.\n+\t * If we issue FUNC_DRV_IF_CHANGE with flags down before\n+\t * FUNC_DRV_UNRGTR, FW resets before FUNC_DRV_UNRGTR\n+\t */\n+\tif (!up && (bp->flags & BNXT_FLAG_FW_RESET))\n+\t\treturn 0;\n+\n+\tHWRM_PREP(req, FUNC_DRV_IF_CHANGE, BNXT_USE_CHIMP_MB);\n+\n+\tif (up)\n+\t\treq.flags =\n+\t\trte_cpu_to_le_32(HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP);\n+\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);\n+\n+\tHWRM_CHECK_RESULT();\n+\tflags = rte_le_to_cpu_32(resp->flags);\n+\tHWRM_UNLOCK();\n+\n+\tif (flags & HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_HOT_FW_RESET_DONE) {\n+\t\tPMD_DRV_LOG(INFO, \"FW reset happened while port was down\\n\");\n+\t\tbp->flags |= BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE;\n+\t}\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex a036205329..2f57e950bb 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -201,4 +201,5 @@ int bnxt_hwrm_tunnel_redirect_query(struct bnxt *bp, uint32_t *type);\n int bnxt_hwrm_tunnel_redirect_info(struct bnxt *bp, uint8_t tun_type,\n \t\t\t\t   uint16_t *dst_fid);\n int bnxt_hwrm_set_mac(struct bnxt *bp);\n+int bnxt_hwrm_if_change(struct bnxt *bp, bool state);\n #endif\n",
    "prefixes": [
        "v3",
        "04/15"
    ]
}