get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 88911,
    "url": "https://patches.dpdk.org/api/patches/88911/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210310212637.72205-13-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20210310212637.72205-13-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210310212637.72205-13-ajit.khaparde@broadcom.com",
    "date": "2021-03-10T21:26:37",
    "name": "[v2,12/12] net/bnxt: fix PTP support for Thor",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "15bd25b66f952894dfcb3506d44a5cac6b2c42e5",
    "submitter": {
        "id": 501,
        "url": "https://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "https://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210310212637.72205-13-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 15591,
            "url": "https://patches.dpdk.org/api/series/15591/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=15591",
            "date": "2021-03-10T21:26:25",
            "name": "bnxt fixes",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/15591/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/88911/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/88911/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 18384A056A;\n\tWed, 10 Mar 2021 22:28:16 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1028C22A634;\n\tWed, 10 Mar 2021 22:27:12 +0100 (CET)",
            "from mail-pg1-f175.google.com (mail-pg1-f175.google.com\n [209.85.215.175])\n by mails.dpdk.org (Postfix) with ESMTP id 681C622A4ED\n for <dev@dpdk.org>; Wed, 10 Mar 2021 22:27:08 +0100 (CET)",
            "by mail-pg1-f175.google.com with SMTP id g4so12253562pgj.0\n for <dev@dpdk.org>; Wed, 10 Mar 2021 13:27:08 -0800 (PST)",
            "from localhost.localdomain ([192.19.228.250])\n by smtp.gmail.com with ESMTPSA id f2sm265059pju.46.2021.03.10.13.27.05\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 10 Mar 2021 13:27:06 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version; bh=+oponkHSJfOfii/dEKf9CO3UJ5/ZZEJ6Vyh+MeryrpQ=;\n b=RDmsdELskrLOcyROJmOmgPF1skzBgIp8N/GDI9fNkXv8+wvtw5vcECReWmp5+bJ9y4\n F78MeZbSi+1DrGyv/7HVcyjVaRW+kJCKbNYxLJK79+jwvBPE2ZlHgFBa+xBQPUClcwbY\n uyMoC/xa3w8PZdZNZRpW9YUPptHvGdHh9gHQQ=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version;\n bh=+oponkHSJfOfii/dEKf9CO3UJ5/ZZEJ6Vyh+MeryrpQ=;\n b=qdkhPCkRCGEU2bvoU2fKQYZVIXR5eYh9GnJEvjlnExMlWWXgv1USYolcJgNwnWTPEF\n WQNuPSsy24njCfluxawbXGr6czS4Kzpvcdjov+e1grO8jQnt93ovLgfTHsjuhyn2Sw5g\n GiUpQP8/ptrZMwbtwvEzPDd5l54tpXd5DTDzihIJdR2MNRyyfwGKyh5KqXOSdI6jlAdn\n 6AscP47qS4Vm0JWHdKpXENeMLY3m+2uLNLQrnRwDcJiYeYWyoCzk/I5XoYsUU2i2Fx8q\n xrL9RmUkgyejjzXGvtGmSDpJdEPs+Im8Ioblb8SmPMvxHdtYXtQ1ZEJ34nteoQXaVPpM\n BQLg==",
        "X-Gm-Message-State": "AOAM5301ZJRGu8Q0+yjYu+Yir/R2zTbcIyh4MLrLukpIOKrkYBgKb5EM\n COkBnk9VegziELFdttY5DkS8TQ==",
        "X-Google-Smtp-Source": "\n ABdhPJwBTr376dbTwvpZM+PMZulkjlrVkdnepB5zRJyXIgFOqD0pOWadeTO/v7/kU30nAYwZp9MgbQ==",
        "X-Received": "by 2002:a62:4c1:0:b029:1ee:70e1:75c1 with SMTP id\n 184-20020a6204c10000b02901ee70e175c1mr4673730pfe.23.1615411627547;\n Wed, 10 Mar 2021 13:27:07 -0800 (PST)",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "ferruh.yigit@intel.com",
        "Cc": "ajit.khaparde@broadcom.com, dev@dpdk.org,\n kalesh-anakkur.purayil@broadcom.com, stable@dpdk.org,\n Lance Richardson <lance.richardson@broadcom.com>",
        "Date": "Wed, 10 Mar 2021 13:26:37 -0800",
        "Message-Id": "<20210310212637.72205-13-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)",
        "In-Reply-To": "<20210310212637.72205-1-ajit.khaparde@broadcom.com>",
        "References": "<d3d41dec-035d-7dd5-ec5b-cd9f6f3536cb@intel.com>\n <20210310212637.72205-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"0000000000003f66e705bd35542a\"",
        "X-Content-Filtered-By": "Mailman/MimeDel 2.1.29",
        "Subject": "[dpdk-dev] [PATCH v2 12/12] net/bnxt: fix PTP support for Thor",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>\n\nOn Thor, Rx timestamp is present in the Rx completion record.\nOnly 32 bits of the timestamp is present in the completion.\nThe driver needs to periodically poll the current 48 bit\nfree running timer using the HWRM_PORT_TS_QUERY command.\nIt can combine the upper 16 bits from the HWRM response\nwith the lower 32 bits in the Rx completion to produce\nthe 48 bit timestamp for the Rx packet.\n\nThis patch adds an alarm thread to periodically poll the current 48 bit\nfree running timer using the HWRM_PORT_TS_QUERY command.\nThis avoids issuing the hwrm command from the Rx handler.\nThis patch also handles the timer roll over condition.\n\nFixes: 6cbd89f9f3d8 (\"net/bnxt: support PTP for Thor\")\nCc: stable@dpdk.org\n\nSigned-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>\nReviewed-by: Lance Richardson <lance.richardson@broadcom.com>\nAcked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h        |  8 ++++\n drivers/net/bnxt/bnxt_ethdev.c | 79 +++++++++++++++++++++++++++++++++-\n drivers/net/bnxt/bnxt_rxr.c    | 17 +++++---\n 3 files changed, 97 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex bf3459e830..de1b4af919 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -309,6 +309,7 @@ struct rte_flow {\n #define BNXT_PTP_FLAGS_PATH_TX\t\t0x0\n #define BNXT_PTP_FLAGS_PATH_RX\t\t0x1\n #define BNXT_PTP_FLAGS_CURRENT_TIME\t0x2\n+#define BNXT_PTP_CURRENT_TIME_MASK\t0xFFFF00000000ULL\n \n struct bnxt_ptp_cfg {\n #define BNXT_GRCPF_REG_WINDOW_BASE_OUT  0x400\n@@ -358,6 +359,7 @@ struct bnxt_ptp_cfg {\n \n \t/* On Thor, the Rx timestamp is present in the Rx completion record */\n \tuint64_t\t\t\trx_timestamp;\n+\tuint64_t\t\t\tcurrent_time;\n };\n \n struct bnxt_coal {\n@@ -671,6 +673,12 @@ struct bnxt {\n #define BNXT_TRUFLOW_EN(bp)\t((bp)->flags & BNXT_FLAG_TRUFLOW_EN)\n #define BNXT_GFID_ENABLED(bp)\t((bp)->flags & BNXT_FLAG_GFID_ENABLE)\n \n+\tuint32_t\t\t\tflags2;\n+#define BNXT_FLAGS2_PTP_TIMESYNC_ENABLED\tBIT(0)\n+#define BNXT_FLAGS2_PTP_ALARM_SCHEDULED\t\tBIT(1)\n+#define BNXT_P5_PTP_TIMESYNC_ENABLED(bp)\t\\\n+\t((bp)->flags2 & BNXT_FLAGS2_PTP_TIMESYNC_ENABLED)\n+\n \tuint16_t\t\tchip_num;\n #define CHIP_NUM_58818\t\t0xd818\n #define BNXT_CHIP_SR2(bp)\t((bp)->chip_num == CHIP_NUM_58818)\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex af146451a5..c55a2d8197 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1300,6 +1300,73 @@ static void bnxt_free_switch_domain(struct bnxt *bp)\n \t}\n }\n \n+static void bnxt_ptp_get_current_time(void *arg)\n+{\n+\tstruct bnxt *bp = arg;\n+\tstruct bnxt_ptp_cfg *ptp = bp->ptp_cfg;\n+\tint rc;\n+\n+\trc = is_bnxt_in_error(bp);\n+\tif (rc)\n+\t\treturn;\n+\n+\tif (!ptp)\n+\t\treturn;\n+\n+\tbnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_CURRENT_TIME,\n+\t\t\t\t&ptp->current_time);\n+\n+\trc = rte_eal_alarm_set(US_PER_S, bnxt_ptp_get_current_time, (void *)bp);\n+\tif (rc != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed to re-schedule PTP alarm\\n\");\n+\t\tbp->flags2 &= ~BNXT_FLAGS2_PTP_ALARM_SCHEDULED;\n+\t}\n+}\n+\n+static int bnxt_schedule_ptp_alarm(struct bnxt *bp)\n+{\n+\tstruct bnxt_ptp_cfg *ptp = bp->ptp_cfg;\n+\tint rc;\n+\n+\tif (bp->flags2 & BNXT_FLAGS2_PTP_ALARM_SCHEDULED)\n+\t\treturn 0;\n+\n+\tbnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_CURRENT_TIME,\n+\t\t\t\t&ptp->current_time);\n+\n+\trc = rte_eal_alarm_set(US_PER_S, bnxt_ptp_get_current_time, (void *)bp);\n+\treturn rc;\n+}\n+\n+static void bnxt_cancel_ptp_alarm(struct bnxt *bp)\n+{\n+\tif (bp->flags2 & BNXT_FLAGS2_PTP_ALARM_SCHEDULED) {\n+\t\trte_eal_alarm_cancel(bnxt_ptp_get_current_time, (void *)bp);\n+\t\tbp->flags2 &= ~BNXT_FLAGS2_PTP_ALARM_SCHEDULED;\n+\t}\n+}\n+\n+static void bnxt_ptp_stop(struct bnxt *bp)\n+{\n+\tbnxt_cancel_ptp_alarm(bp);\n+\tbp->flags2 &= ~BNXT_FLAGS2_PTP_TIMESYNC_ENABLED;\n+}\n+\n+static int bnxt_ptp_start(struct bnxt *bp)\n+{\n+\tint rc;\n+\n+\trc = bnxt_schedule_ptp_alarm(bp);\n+\tif (rc != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed to schedule PTP alarm\\n\");\n+\t} else {\n+\t\tbp->flags2 |= BNXT_FLAGS2_PTP_TIMESYNC_ENABLED;\n+\t\tbp->flags2 |= BNXT_FLAGS2_PTP_ALARM_SCHEDULED;\n+\t}\n+\n+\treturn rc;\n+}\n+\n static int bnxt_dev_stop(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt *bp = eth_dev->data->dev_private;\n@@ -1330,6 +1397,9 @@ static int bnxt_dev_stop(struct rte_eth_dev *eth_dev)\n \n \tbnxt_cancel_fw_health_check(bp);\n \n+\tif (BNXT_P5_PTP_TIMESYNC_ENABLED(bp))\n+\t\tbnxt_cancel_ptp_alarm(bp);\n+\n \t/* Do not bring link down during reset recovery */\n \tif (!is_bnxt_in_error(bp)) {\n \t\tbnxt_dev_set_link_down_op(eth_dev);\n@@ -1449,6 +1519,9 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)\n \n \tbnxt_schedule_fw_health_check(bp);\n \n+\tif (BNXT_P5_PTP_TIMESYNC_ENABLED(bp))\n+\t\tbnxt_schedule_ptp_alarm(bp);\n+\n \treturn 0;\n \n error:\n@@ -3351,8 +3424,10 @@ bnxt_timesync_enable(struct rte_eth_dev *dev)\n \n \tif (!BNXT_CHIP_P5(bp))\n \t\tbnxt_map_ptp_regs(bp);\n+\telse\n+\t\trc = bnxt_ptp_start(bp);\n \n-\treturn 0;\n+\treturn rc;\n }\n \n static int\n@@ -3372,6 +3447,8 @@ bnxt_timesync_disable(struct rte_eth_dev *dev)\n \n \tif (!BNXT_CHIP_P5(bp))\n \t\tbnxt_unmap_ptp_regs(bp);\n+\telse\n+\t\tbnxt_ptp_stop(bp);\n \n \treturn 0;\n }\ndiff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 498811a732..30d22b7aba 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -603,9 +603,11 @@ bnxt_set_ol_flags(struct bnxt_rx_ring_info *rxr, struct rx_pkt_cmpl *rxcmp,\n static void\n bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl)\n {\n-\tuint64_t systime_cycles = 0;\n+\tstruct bnxt_ptp_cfg *ptp = bp->ptp_cfg;\n+\tuint64_t last_hwrm_time;\n+\tuint64_t pkt_time = 0;\n \n-\tif (!BNXT_CHIP_P5(bp))\n+\tif (!BNXT_CHIP_P5(bp) || !ptp)\n \t\treturn;\n \n \t/* On Thor, Rx timestamps are provided directly in the\n@@ -616,10 +618,13 @@ bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl)\n \t * from the HWRM response with the lower 32 bits in the\n \t * Rx completion to produce the 48 bit timestamp for the Rx packet\n \t */\n-\tbnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_CURRENT_TIME,\n-\t\t\t\t&systime_cycles);\n-\tbp->ptp_cfg->rx_timestamp = (systime_cycles & 0xFFFF00000000);\n-\tbp->ptp_cfg->rx_timestamp |= rx_ts_cmpl;\n+\tlast_hwrm_time = ptp->current_time;\n+\tpkt_time = (last_hwrm_time & BNXT_PTP_CURRENT_TIME_MASK) | rx_ts_cmpl;\n+\tif (rx_ts_cmpl < (uint32_t)last_hwrm_time) {\n+\t\t/* timer has rolled over */\n+\t\tpkt_time += (1ULL << 32);\n+\t}\n+\tptp->rx_timestamp = pkt_time;\n }\n #endif\n \n",
    "prefixes": [
        "v2",
        "12/12"
    ]
}