get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 111249,
    "url": "http://patches.dpdk.org/api/patches/111249/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220517173941.189330-8-hkalra@marvell.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": "<20220517173941.189330-8-hkalra@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220517173941.189330-8-hkalra@marvell.com",
    "date": "2022-05-17T17:39:37",
    "name": "[08/12] net/thunderx: setting link attributes",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "19f77f09e48190c7cbf6c61d82898693b7ca3919",
    "submitter": {
        "id": 1182,
        "url": "http://patches.dpdk.org/api/people/1182/?format=api",
        "name": "Harman Kalra",
        "email": "hkalra@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220517173941.189330-8-hkalra@marvell.com/mbox/",
    "series": [
        {
            "id": 22975,
            "url": "http://patches.dpdk.org/api/series/22975/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=22975",
            "date": "2022-05-17T17:39:30",
            "name": "[01/12] config: add thundert83 config",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/22975/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/111249/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/111249/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 455E2A0503;\n\tTue, 17 May 2022 19:40:28 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3A7F542B77;\n\tTue, 17 May 2022 19:40:17 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 281CE42B6A\n for <dev@dpdk.org>; Tue, 17 May 2022 19:40:14 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id\n 24H9gPb7017672\n for <dev@dpdk.org>; Tue, 17 May 2022 10:40:13 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3g2bxsw8yc-3\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n for <dev@dpdk.org>; Tue, 17 May 2022 10:40:13 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Tue, 17 May 2022 10:40:10 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Tue, 17 May 2022 10:40:10 -0700",
            "from localhost.localdomain (unknown [10.29.52.211])\n by maili.marvell.com (Postfix) with ESMTP id 907BB3F70A7;\n Tue, 17 May 2022 10:40:08 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-type; s=pfpt0220; bh=8/2bqHwY8EGrM26rA6CVUV82ELB9LBeglWZp62HHGvQ=;\n b=NvJhCm7L4q7C4ht01czI1CIkYaSj68x4SFX6qIGe1ob/PCdhCWBhZmXbTMjuZEFzpitq\n 3kKfDX+5qEHi+NtrPNjesUw5kggZgtrzZp2QyuGOYPyiGln4Z/P1MFEMVVkWjWcwLMD7\n Z8TJulfAJJmn31xyNmOyUNuApohbw3joutDWx1hOkzScnuMgGVVbUSD861+Er6uT/iA+\n nhJEHSJrNYrNIZ2pU36TWm5+zdEs5P4Ins2b6PeD3he0r63b7yw10E8S3YXwDJA/UQBo\n GN/kFgckNul5KQnDICIFQNbC1OeVR7FymRQSUYhsZKtCyuZAVCzBELnl08Zla16T8do3 qw==",
        "From": "Harman Kalra <hkalra@marvell.com>",
        "To": "<dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>, Maciej Czekaj\n <mczekaj@marvell.com>",
        "CC": "Harman Kalra <hkalra@marvell.com>",
        "Subject": "[PATCH 08/12] net/thunderx: setting link attributes",
        "Date": "Tue, 17 May 2022 23:09:37 +0530",
        "Message-ID": "<20220517173941.189330-8-hkalra@marvell.com>",
        "X-Mailer": "git-send-email 2.18.0",
        "In-Reply-To": "<20220517173941.189330-1-hkalra@marvell.com>",
        "References": "<20220517173941.189330-1-hkalra@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "VVB-IgWaFFtpeNuYd13lmnkBElipS3Bq",
        "X-Proofpoint-GUID": "VVB-IgWaFFtpeNuYd13lmnkBElipS3Bq",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.205,Aquarius:18.0.874,Hydra:6.0.486,FMLib:17.11.64.514\n definitions=2022-05-17_03,2022-05-17_02,2022-02-23_01",
        "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": "Adding support to configure link attributes like speed,\nduplex, negotiation.\n\nSigned-off-by: Harman Kalra <hkalra@marvell.com>\n---\n drivers/net/thunderx/base/nicvf_mbox.c | 16 +++++\n drivers/net/thunderx/base/nicvf_mbox.h | 14 ++++\n drivers/net/thunderx/nicvf_ethdev.c    | 88 ++++++++++++++++++++++++--\n drivers/net/thunderx/nicvf_struct.h    |  9 +++\n 4 files changed, 122 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/drivers/net/thunderx/base/nicvf_mbox.c b/drivers/net/thunderx/base/nicvf_mbox.c\nindex 275e593286..352b85d9e2 100644\n--- a/drivers/net/thunderx/base/nicvf_mbox.c\n+++ b/drivers/net/thunderx/base/nicvf_mbox.c\n@@ -423,6 +423,22 @@ nicvf_mbox_set_link_up_down(struct nicvf *nic, bool enable)\n \tmbx.lbk.enable = enable;\n \treturn nicvf_mbox_send_msg_to_pf(nic, &mbx);\n }\n+\n+\n+int\n+nicvf_mbox_change_mode(struct nicvf *nic, struct change_link_mode *cfg)\n+{\n+\tstruct nic_mbx mbx = { .msg = { 0 } };\n+\n+\tmbx.mode.msg = NIC_MBOX_MSG_CHANGE_MODE;\n+\tmbx.mode.vf_id = nic->vf_id;\n+\tmbx.mode.speed = cfg->speed;\n+\tmbx.mode.duplex = cfg->duplex;\n+\tmbx.mode.autoneg = cfg->autoneg;\n+\tmbx.mode.qlm_mode = cfg->qlm_mode;\n+\treturn nicvf_mbox_send_msg_to_pf(nic, &mbx);\n+}\n+\n void\n nicvf_mbox_shutdown(struct nicvf *nic)\n {\ndiff --git a/drivers/net/thunderx/base/nicvf_mbox.h b/drivers/net/thunderx/base/nicvf_mbox.h\nindex 044220a2cd..322c8159cb 100644\n--- a/drivers/net/thunderx/base/nicvf_mbox.h\n+++ b/drivers/net/thunderx/base/nicvf_mbox.h\n@@ -41,6 +41,7 @@\n #define\tNIC_MBOX_MSG_LOOPBACK\t\t0x16\t/* Set interface in loopback */\n #define\tNIC_MBOX_MSG_RESET_STAT_COUNTER 0x17\t/* Reset statistics counters */\n #define\tNIC_MBOX_MSG_SET_LINK\t\t0x21\t/* Set link up/down */\n+#define\tNIC_MBOX_MSG_CHANGE_MODE\t0x22\t/* Change mode */\n #define\tNIC_MBOX_MSG_CFG_DONE\t\t0xF0\t/* VF configuration done */\n #define\tNIC_MBOX_MSG_SHUTDOWN\t\t0xF1\t/* VF is being shutdown */\n #define NIC_MBOX_MSG_RESET_XCAST\t0xF2    /* Reset DCAM filtering mode */\n@@ -178,6 +179,17 @@ struct set_link_state {\n \tbool\t   enable;\n };\n \n+/* Change link mode */\n+struct change_link_mode_msg {\n+\tuint8_t    msg;\n+\tuint8_t    vf_id;\n+\tuint8_t    qlm_mode;\n+\tbool\t   autoneg;\n+\tuint8_t    duplex;\n+\tuint32_t   speed;\n+\n+};\n+\n struct nic_mbx {\n /* 128 bit shared memory between PF and each VF */\n union {\n@@ -196,6 +208,7 @@ union {\n \tstruct set_loopback\tlbk;\n \tstruct reset_stat_cfg\treset_stat;\n \tstruct set_link_state\tset_link;\n+\tstruct change_link_mode_msg mode;\n };\n };\n \n@@ -225,5 +238,6 @@ void nicvf_mbox_shutdown(struct nicvf *nic);\n void nicvf_mbox_cfg_done(struct nicvf *nic);\n void nicvf_mbox_link_change(struct nicvf *nic);\n void nicvf_mbox_reset_xcast(struct nicvf *nic);\n+int nicvf_mbox_change_mode(struct nicvf *nic, struct change_link_mode *cfg);\n \n #endif /* __THUNDERX_NICVF_MBOX__ */\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex 1e268d9b0f..0f79b02172 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -55,6 +55,82 @@ RTE_LOG_REGISTER_SUFFIX(nicvf_logtype_mbox, mbox, NOTICE);\n RTE_LOG_REGISTER_SUFFIX(nicvf_logtype_init, init, NOTICE);\n RTE_LOG_REGISTER_SUFFIX(nicvf_logtype_driver, driver, NOTICE);\n \n+#define NICVF_QLM_MODE_SGMII  7\n+#define NICVF_QLM_MODE_XFI   12\n+\n+enum nicvf_link_speed {\n+\tNICVF_LINK_SPEED_SGMII,\n+\tNICVF_LINK_SPEED_XAUI,\n+\tNICVF_LINK_SPEED_RXAUI,\n+\tNICVF_LINK_SPEED_10G_R,\n+\tNICVF_LINK_SPEED_40G_R,\n+\tNICVF_LINK_SPEED_RESERVE1,\n+\tNICVF_LINK_SPEED_QSGMII,\n+\tNICVF_LINK_SPEED_RESERVE2,\n+\tNICVF_LINK_SPEED_UNKNOWN = 255\n+};\n+\n+static inline uint32_t\n+nicvf_parse_link_speeds(uint32_t link_speeds)\n+{\n+\tuint32_t link_speed = NICVF_LINK_SPEED_UNKNOWN;\n+\n+\tif (link_speeds & RTE_ETH_LINK_SPEED_40G)\n+\t\tlink_speed = NICVF_LINK_SPEED_40G_R;\n+\n+\tif (link_speeds & RTE_ETH_LINK_SPEED_10G) {\n+\t\tlink_speed  = NICVF_LINK_SPEED_XAUI;\n+\t\tlink_speed |= NICVF_LINK_SPEED_RXAUI;\n+\t\tlink_speed |= NICVF_LINK_SPEED_10G_R;\n+\t}\n+\n+\tif (link_speeds & RTE_ETH_LINK_SPEED_5G)\n+\t\tlink_speed = NICVF_LINK_SPEED_QSGMII;\n+\n+\tif (link_speeds & RTE_ETH_LINK_SPEED_1G)\n+\t\tlink_speed = NICVF_LINK_SPEED_SGMII;\n+\n+\treturn link_speed;\n+}\n+\n+static inline uint8_t\n+nicvf_parse_eth_link_duplex(uint32_t link_speeds)\n+{\n+\tif ((link_speeds & RTE_ETH_LINK_SPEED_10M_HD) ||\n+\t\t\t(link_speeds & RTE_ETH_LINK_SPEED_100M_HD))\n+\t\treturn RTE_ETH_LINK_HALF_DUPLEX;\n+\telse\n+\t\treturn RTE_ETH_LINK_FULL_DUPLEX;\n+}\n+\n+static int\n+nicvf_apply_link_speed(struct rte_eth_dev *dev)\n+{\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\tstruct rte_eth_conf *conf = &dev->data->dev_conf;\n+\tstruct change_link_mode cfg;\n+\tif (conf->link_speeds == RTE_ETH_LINK_SPEED_AUTONEG)\n+\t\t/* TODO: Handle this case */\n+\t\treturn 0;\n+\n+\tcfg.speed = nicvf_parse_link_speeds(conf->link_speeds);\n+\tcfg.autoneg = (conf->link_speeds & RTE_ETH_LINK_SPEED_FIXED) ? 1 : 0;\n+\tcfg.duplex = nicvf_parse_eth_link_duplex(conf->link_speeds);\n+\tcfg.qlm_mode = ((conf->link_speeds & RTE_ETH_LINK_SPEED_1G) ?\n+\t\t\tNICVF_QLM_MODE_SGMII :\n+\t\t\t(conf->link_speeds & RTE_ETH_LINK_SPEED_10G) ?\n+\t\t\tNICVF_QLM_MODE_XFI : 0);\n+\n+\tif (cfg.speed != NICVF_LINK_SPEED_UNKNOWN &&\n+\t    (cfg.speed != nic->speed || cfg.duplex != nic->duplex)) {\n+\t\tnic->speed = cfg.speed;\n+\t\tnic->duplex = cfg.duplex;\n+\t\treturn nicvf_mbox_change_mode(nic, &cfg);\n+\t} else {\n+\t\treturn 0;\n+\t}\n+}\n+\n static void\n nicvf_link_status_update(struct nicvf *nic,\n \t\t\t struct rte_eth_link *link)\n@@ -1728,6 +1804,13 @@ nicvf_dev_start(struct rte_eth_dev *dev)\n \t\treturn -EBUSY;\n \t}\n \n+\t/* Apply new link configurations if changed */\n+\tret = nicvf_apply_link_speed(dev);\n+\tif (ret) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to set link configuration\\n\");\n+\t\treturn ret;\n+\t}\n+\n \tret = nicvf_vf_start(dev, nic, rbdrsz);\n \tif (ret != 0)\n \t\treturn ret;\n@@ -1921,11 +2004,6 @@ nicvf_dev_configure(struct rte_eth_dev *dev)\n \t\treturn -EINVAL;\n \t}\n \n-\tif (conf->link_speeds & RTE_ETH_LINK_SPEED_FIXED) {\n-\t\tPMD_INIT_LOG(INFO, \"Setting link speed/duplex not supported\");\n-\t\treturn -EINVAL;\n-\t}\n-\n \tif (conf->dcb_capability_en) {\n \t\tPMD_INIT_LOG(INFO, \"DCB enable not supported\");\n \t\treturn -EINVAL;\ndiff --git a/drivers/net/thunderx/nicvf_struct.h b/drivers/net/thunderx/nicvf_struct.h\nindex c7ea13313e..13cf8feeb1 100644\n--- a/drivers/net/thunderx/nicvf_struct.h\n+++ b/drivers/net/thunderx/nicvf_struct.h\n@@ -113,4 +113,13 @@ struct nicvf {\n \tstruct nicvf *snicvf[MAX_SQS_PER_VF];\n } __rte_cache_aligned;\n \n+struct change_link_mode {\n+\tbool\t   enable;\n+\tuint8_t    qlm_mode;\n+\tbool\t   autoneg;\n+\tuint8_t    duplex;\n+\tuint32_t   speed;\n+\n+};\n+\n #endif /* _THUNDERX_NICVF_STRUCT_H */\n",
    "prefixes": [
        "08/12"
    ]
}