get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81554,
    "url": "http://patches.dpdk.org/api/patches/81554/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1603185222-14831-42-git-send-email-arybchenko@solarflare.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": "<1603185222-14831-42-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603185222-14831-42-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-20T09:13:21",
    "name": "[v2,41/62] common/sfc_efx/base: add an API for querying board info",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e2fa26bc18272fa579432409c382370ff5df9e9c",
    "submitter": {
        "id": 607,
        "url": "http://patches.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.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/1603185222-14831-42-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [
        {
            "id": 13137,
            "url": "http://patches.dpdk.org/api/series/13137/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13137",
            "date": "2020-10-20T09:12:44",
            "name": "net/sfc: support flow API transfer rules",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/13137/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81554/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/81554/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id DCDCFA04DD;\n\tTue, 20 Oct 2020 11:35:31 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id D82A0FC84;\n\tTue, 20 Oct 2020 11:15:44 +0200 (CEST)",
            "from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com\n [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 8D86EC826\n for <dev@dpdk.org>; Tue, 20 Oct 2020 11:14:17 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.7.65.60])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n 188D760085 for <dev@dpdk.org>; Tue, 20 Oct 2020 09:14:16 +0000 (UTC)",
            "from us4-mdac16-63.ut7.mdlocal (unknown [10.7.66.62])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 17BE72009A\n for <dev@dpdk.org>; Tue, 20 Oct 2020 09:14:16 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.7.65.175])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 8E0471C0051\n for <dev@dpdk.org>; Tue, 20 Oct 2020 09:14:15 +0000 (UTC)",
            "from webmail.solarflare.com (uk.solarflare.com [193.34.186.16])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))\n (No client certificate requested)\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 43E7D700053\n for <dev@dpdk.org>; Tue, 20 Oct 2020 09:14:15 +0000 (UTC)",
            "from ukex01.SolarFlarecom.com (10.17.10.4) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id\n 15.0.1497.2; Tue, 20 Oct 2020 10:14:01 +0100",
            "from opal.uk.solarflarecom.com (10.17.10.1) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id\n 15.0.1497.2 via Frontend Transport; Tue, 20 Oct 2020 10:14:01 +0100",
            "from ukv-loginhost.uk.solarflarecom.com\n (ukv-loginhost.uk.solarflarecom.com [10.17.10.39])\n by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09K9E1Ne028479;\n Tue, 20 Oct 2020 10:14:01 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 104AC1613AB;\n Tue, 20 Oct 2020 10:14:01 +0100 (BST)"
        ],
        "X-Virus-Scanned": "Proofpoint Essentials engine",
        "From": "Andrew Rybchenko <arybchenko@solarflare.com>",
        "To": "<dev@dpdk.org>",
        "CC": "Ivan Malov <ivan.malov@oktetlabs.ru>",
        "Date": "Tue, 20 Oct 2020 10:13:21 +0100",
        "Message-ID": "<1603185222-14831-42-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1603185222-14831-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1603183709-23420-1-git-send-email-arybchenko@solarflare.com>\n <1603185222-14831-1-git-send-email-arybchenko@solarflare.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-TM-AS-Product-Ver": "SMEX-12.5.0.1300-8.6.1012-25736.003",
        "X-TM-AS-Result": "No-3.744000-8.000000-10",
        "X-TMASE-MatchedRID": "USBznjRQ989MPcmMaoae6R3EEAbn+GRbOTjDMsgp/8GrZHMcVOhFSMzp\n aT8RVq/tFGVIZCbILXTy7+YHWQ1L0RskZmIm07Kryf21YeIsPYZ6i696PjRPiA5bRK3kNPhULPJ\n tWpbJjY12wcINfceTjnDlPghqPnfyhmayTFnN39Yn6YVq3MQsI1M8G40owbvKCmsLHmesXbFtqw\n 6rEcE6N94uOUmYluEd0zoQrejyE606NBdUxznZvceuFL5UpINx70qdorrh7aL3Ru3JrjJxKJPpO\n oE2MGLrAz50BRibi1tRKFInjeMGM7xfZDNk09XDjhVIiMAyis7M8zLNncnslfkuQv9PIVnNouaX\n E/reSZkbpFu2LL52JiA7TAOaRNCdDPIzF4wRfrAURSScn+QSXtADGm4LoiiT+gtHj7OwNO0NstC\n Xmf87HH6NWRsXLx5K5F9kzd71rK3ruNneCXN7kbZenzIjRXqmhtxeP8NjoZG6uY1l2joOgMSa0Y\n kW2GDPbpmIqVEZl89NS22e9i4qE9pAu0sLxpSoQ8G+yYJYYdZRZDsGiXQioBjm28f1HLY3",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--3.744000-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25736.003",
        "X-MDID": "1603185256-vf346LLQ8mDW",
        "X-PPE-DISP": "1603185256;vf346LLQ8mDW",
        "Subject": "[dpdk-dev] [PATCH v2 41/62] common/sfc_efx/base: add an API for\n\tquerying board info",
        "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 <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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Ivan Malov <ivan.malov@oktetlabs.ru>\n\nRiverhead boards can provide extended version information.\nImplement facilities necessary to obtain it.\nAdd an API for querying board information.\n\nA client driver may use this to discover which of its instances\nrelate to which physical boards, based on board serial number\npersistence for a given physical board.\n\nSigned-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\n---\n drivers/common/sfc_efx/base/efx.h             | 16 +++++++\n drivers/common/sfc_efx/base/efx_mcdi.c        | 48 ++++++++++++++++---\n drivers/common/sfc_efx/base/efx_mcdi.h        | 18 +++++++\n drivers/common/sfc_efx/base/efx_nic.c         | 46 ++++++++++++++++++\n .../sfc_efx/rte_common_sfc_efx_version.map    |  1 +\n 5 files changed, 123 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h\nindex 4a4dc8ba4d..75edb59a49 100644\n--- a/drivers/common/sfc_efx/base/efx.h\n+++ b/drivers/common/sfc_efx/base/efx.h\n@@ -1647,6 +1647,22 @@ efx_nic_get_fw_version(\n \t__in\t\t\tefx_nic_t *enp,\n \t__out\t\t\tefx_nic_fw_info_t *enfip);\n \n+#define\tEFX_NIC_BOARD_INFO_SERIAL_LEN\t(64)\n+#define\tEFX_NIC_BOARD_INFO_NAME_LEN\t(16)\n+\n+typedef struct efx_nic_board_info_s {\n+\t/* The following two fields are NUL-terminated ASCII strings. */\n+\tchar\t\t\tenbi_serial[EFX_NIC_BOARD_INFO_SERIAL_LEN];\n+\tchar\t\t\tenbi_name[EFX_NIC_BOARD_INFO_NAME_LEN];\n+\tuint32_t\t\tenbi_revision;\n+} efx_nic_board_info_t;\n+\n+LIBEFX_API\n+extern\t__checkReturn\tefx_rc_t\n+efx_nic_get_board_info(\n+\t__in\t\tefx_nic_t *enp,\n+\t__out\t\tefx_nic_board_info_t *board_infop);\n+\n /* Driver resource limits (minimum required/maximum usable). */\n typedef struct efx_drv_limits_s {\n \tuint32_t\tedl_min_evq_count;\ndiff --git a/drivers/common/sfc_efx/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c\nindex edd069c969..8c984d8cad 100644\n--- a/drivers/common/sfc_efx/base/efx_mcdi.c\n+++ b/drivers/common/sfc_efx/base/efx_mcdi.c\n@@ -964,11 +964,13 @@ efx_mcdi_ev_death(\n \t__checkReturn\t\tefx_rc_t\n efx_mcdi_get_version(\n \t__in\t\t\tefx_nic_t *enp,\n+\t__in\t\t\tuint32_t flags_req,\n \t__out\t\t\tefx_mcdi_version_t *verp)\n {\n+\tefx_nic_board_info_t *board_infop = &verp->emv_board_info;\n \tEFX_MCDI_DECLARE_BUF(payload,\n-\t    MC_CMD_GET_VERSION_IN_LEN,\n-\t    MC_CMD_GET_VERSION_OUT_LEN);\n+\t    MC_CMD_GET_VERSION_EXT_IN_LEN,\n+\t    MC_CMD_GET_VERSION_V2_OUT_LEN);\n \tsize_t min_resp_len_required;\n \tefx_mcdi_req_t req;\n \tefx_rc_t rc;\n@@ -978,15 +980,35 @@ efx_mcdi_get_version(\n \tEFX_STATIC_ASSERT(sizeof (verp->emv_firmware) ==\n \t    MC_CMD_GET_VERSION_OUT_FIRMWARE_LEN);\n \n+\tEFX_STATIC_ASSERT(EFX_MCDI_VERSION_BOARD_INFO ==\n+\t    (1U << MC_CMD_GET_VERSION_V2_OUT_BOARD_EXT_INFO_PRESENT_LBN));\n+\n+\tEFX_STATIC_ASSERT(sizeof (board_infop->enbi_serial) ==\n+\t    MC_CMD_GET_VERSION_V2_OUT_BOARD_SERIAL_LEN);\n+\tEFX_STATIC_ASSERT(sizeof (board_infop->enbi_name) ==\n+\t    MC_CMD_GET_VERSION_V2_OUT_BOARD_NAME_LEN);\n+\tEFX_STATIC_ASSERT(sizeof (board_infop->enbi_revision) ==\n+\t    MC_CMD_GET_VERSION_V2_OUT_BOARD_REVISION_LEN);\n+\n \tEFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI);\n \n \treq.emr_cmd = MC_CMD_GET_VERSION;\n \treq.emr_in_buf = payload;\n \treq.emr_out_buf = payload;\n-\treq.emr_in_length = MC_CMD_GET_VERSION_IN_LEN;\n-\treq.emr_out_length = MC_CMD_GET_VERSION_OUT_LEN;\n \n-\tmin_resp_len_required = MC_CMD_GET_VERSION_V0_OUT_LEN;\n+\tif (flags_req != 0) {\n+\t\t/* Request basic + extended version information. */\n+\t\treq.emr_in_length = MC_CMD_GET_VERSION_EXT_IN_LEN;\n+\t\treq.emr_out_length = MC_CMD_GET_VERSION_V2_OUT_LEN;\n+\n+\t\tmin_resp_len_required = MC_CMD_GET_VERSION_V2_OUT_LEN;\n+\t} else {\n+\t\t/* Request only basic version information. */\n+\t\treq.emr_in_length = MC_CMD_GET_VERSION_IN_LEN;\n+\t\treq.emr_out_length = MC_CMD_GET_VERSION_OUT_LEN;\n+\n+\t\tmin_resp_len_required = MC_CMD_GET_VERSION_V0_OUT_LEN;\n+\t}\n \n \tefx_mcdi_execute(enp, &req);\n \n@@ -1020,6 +1042,20 @@ efx_mcdi_get_version(\n \n \tverp->emv_firmware = MCDI_OUT_DWORD(req, GET_VERSION_OUT_FIRMWARE);\n \n+\tverp->emv_flags = MCDI_OUT_DWORD(req, GET_VERSION_V2_OUT_FLAGS);\n+\tverp->emv_flags &= flags_req;\n+\n+\tif ((verp->emv_flags & EFX_MCDI_VERSION_BOARD_INFO) != 0) {\n+\t\tmemcpy(board_infop->enbi_serial,\n+\t\t    MCDI_OUT2(req, char, GET_VERSION_V2_OUT_BOARD_SERIAL),\n+\t\t    sizeof (board_infop->enbi_serial));\n+\t\tmemcpy(board_infop->enbi_name,\n+\t\t    MCDI_OUT2(req, char, GET_VERSION_V2_OUT_BOARD_NAME),\n+\t\t    sizeof (board_infop->enbi_name));\n+\t\tboard_infop->enbi_revision =\n+\t\t    MCDI_OUT_DWORD(req, GET_VERSION_V2_OUT_BOARD_REVISION);\n+\t}\n+\n \treturn (0);\n \n fail3:\n@@ -1090,7 +1126,7 @@ efx_mcdi_version(\n \tefx_mcdi_boot_t status;\n \tefx_rc_t rc;\n \n-\trc = efx_mcdi_get_version(enp, &ver);\n+\trc = efx_mcdi_get_version(enp, 0, &ver);\n \tif (rc != 0)\n \t\tgoto fail1;\n \ndiff --git a/drivers/common/sfc_efx/base/efx_mcdi.h b/drivers/common/sfc_efx/base/efx_mcdi.h\nindex 8b50b8a949..0b39a6f7f6 100644\n--- a/drivers/common/sfc_efx/base/efx_mcdi.h\n+++ b/drivers/common/sfc_efx/base/efx_mcdi.h\n@@ -118,16 +118,34 @@ efx_mcdi_raise_exception(\n \t__in_opt\tefx_mcdi_req_t *emrp,\n \t__in\t\tint rc);\n \n+/*\n+ * Flags that name portions of extended version information\n+ *\n+ * The values match their MCDI counterparts.\n+ */\n+#define\tEFX_MCDI_VERSION_BOARD_INFO\t(1U << 4)\n+\n typedef struct efx_mcdi_version_s {\n \t/* Basic version information */\n \tuint16_t\t\temv_version[4];\n \tuint32_t\t\temv_firmware;\n+\n+\t/*\n+\t * Extended version information\n+\t *\n+\t * Valid portions of obtained information are indicated by flags.\n+\t */\n+\tuint32_t\t\temv_flags;\n+\n+\t/* Information valid if emv_flags has EFX_MCDI_VERSION_BOARD_INFO set */\n+\tefx_nic_board_info_t\temv_board_info;\n } efx_mcdi_version_t;\n \n LIBEFX_INTERNAL\n extern\t__checkReturn\tefx_rc_t\n efx_mcdi_get_version(\n \t__in\t\tefx_nic_t *enp,\n+\t__in\t\tuint32_t flags_req,\n \t__out\t\tefx_mcdi_version_t *verp);\n \n typedef enum efx_mcdi_boot_e {\ndiff --git a/drivers/common/sfc_efx/base/efx_nic.c b/drivers/common/sfc_efx/base/efx_nic.c\nindex a78c4c3737..7c28fb1744 100644\n--- a/drivers/common/sfc_efx/base/efx_nic.c\n+++ b/drivers/common/sfc_efx/base/efx_nic.c\n@@ -791,6 +791,52 @@ efx_nic_get_fw_version(\n \n \treturn (0);\n \n+fail3:\n+\tEFSYS_PROBE(fail3);\n+fail2:\n+\tEFSYS_PROBE(fail2);\n+fail1:\n+\tEFSYS_PROBE1(fail1, efx_rc_t, rc);\n+\n+\treturn (rc);\n+}\n+\n+\t__checkReturn\tefx_rc_t\n+efx_nic_get_board_info(\n+\t__in\t\tefx_nic_t *enp,\n+\t__out\t\tefx_nic_board_info_t *board_infop)\n+{\n+\tefx_mcdi_version_t ver;\n+\tefx_rc_t rc;\n+\n+\tEFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI);\n+\tEFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI);\n+\n+\trc = efx_mcdi_get_version(enp, EFX_MCDI_VERSION_BOARD_INFO, &ver);\n+\tif (rc == EMSGSIZE) {\n+\t\t/*\n+\t\t * Typically, EMSGSIZE is returned by above call in the\n+\t\t * case when the NIC does not provide extra information.\n+\t\t */\n+\t\trc = ENOTSUP;\n+\t\tgoto fail1;\n+\t} else if (rc != 0) {\n+\t\tgoto fail2;\n+\t}\n+\n+\tif ((ver.emv_flags & EFX_MCDI_VERSION_BOARD_INFO) == 0) {\n+\t\trc = ENOTSUP;\n+\t\tgoto fail3;\n+\t}\n+\n+\tmemcpy(board_infop, &ver.emv_board_info, sizeof (*board_infop));\n+\n+\t/* MCDI should provide NUL-terminated strings, but stay vigilant. */\n+\tboard_infop->enbi_serial[sizeof (board_infop->enbi_serial) - 1] = '\\0';\n+\tboard_infop->enbi_name[sizeof (board_infop->enbi_name) - 1] = '\\0';\n+\n+\treturn (0);\n+\n fail3:\n \tEFSYS_PROBE(fail3);\n fail2:\ndiff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map\nindex 7cc692db3f..37056abd60 100644\n--- a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map\n+++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map\n@@ -131,6 +131,7 @@ INTERNAL {\n \tefx_nic_destroy;\n \tefx_nic_fini;\n \tefx_nic_get_bar_region;\n+\tefx_nic_get_board_info;\n \tefx_nic_get_fw_subvariant;\n \tefx_nic_get_fw_version;\n \tefx_nic_get_vi_pool;\n",
    "prefixes": [
        "v2",
        "41/62"
    ]
}