get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 134828,
    "url": "https://patches.dpdk.org/api/patches/134828/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20231204183710.86921-15-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": "<20231204183710.86921-15-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231204183710.86921-15-ajit.khaparde@broadcom.com",
    "date": "2023-12-04T18:37:10",
    "name": "[14/14] net/bnxt: add support for v3 Rx completion",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c986d5be12e8983c192c00bc5a111f54bbadea2c",
    "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/20231204183710.86921-15-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 30445,
            "url": "https://patches.dpdk.org/api/series/30445/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=30445",
            "date": "2023-12-04T18:36:56",
            "name": "support new 5760X P7 devices",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/30445/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/134828/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/134828/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 911234366C;\n\tMon,  4 Dec 2023 19:39:11 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DE59642DDA;\n\tMon,  4 Dec 2023 19:37:41 +0100 (CET)",
            "from mail-pf1-f170.google.com (mail-pf1-f170.google.com\n [209.85.210.170])\n by mails.dpdk.org (Postfix) with ESMTP id 5D45842DCE\n for <dev@dpdk.org>; Mon,  4 Dec 2023 19:37:40 +0100 (CET)",
            "by mail-pf1-f170.google.com with SMTP id\n d2e1a72fcca58-6cbe716b511so3641418b3a.3\n for <dev@dpdk.org>; Mon, 04 Dec 2023 10:37:40 -0800 (PST)",
            "from C02GC2QQMD6T.wifi.broadcom.net ([192.19.223.252])\n by smtp.gmail.com with ESMTPSA id\n s3-20020a056a00178300b006be5af77f06sm4236664pfg.2.2023.12.04.10.37.37\n for <dev@dpdk.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 04 Dec 2023 10:37:37 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=broadcom.com; s=google; t=1701715059; x=1702319859; darn=dpdk.org;\n h=mime-version:references:in-reply-to:message-id:date:subject:to:from\n :from:to:cc:subject:date:message-id:reply-to;\n bh=aj0SOYHdKX+rj06m4nKtygMuAIMal4Bc363P+2fOW0U=;\n b=hDzmroRnERjfb3cQh8/nkE5WhIMKm6sQpbirW+3RajT0CTHQ0knSsPBpBody7ZyR1W\n yMUKC43m5iG7Es9V9hkLT4gKr4epxAqMeZnlHiY/e1DU7WUxNMS4OEq5jsXO6pS7xABy\n ZeviKw5SRFFUC+X4PNrAqnayYkmVamqqGqFCQ=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1701715059; x=1702319859;\n h=mime-version:references:in-reply-to:message-id:date:subject:to:from\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=aj0SOYHdKX+rj06m4nKtygMuAIMal4Bc363P+2fOW0U=;\n b=vnlE3WSl7OITSMOCHr6GIp81tSJ9KjcKtVqKkib6b+HwogWQj63WPV6Gp908tvdpNl\n pJeA/nMtG9aMe6PLbNc8m+18aNzrPyyJzHFI/cVe+nxGGVGIidVbag8d2QxknJPOKKmr\n tU/lhC+B0icDg7OeKqWA8spwhH+OHppCJSM03s0lxEUiTNWLpvfJtqfHSMQW9HIdShFJ\n aCeajf9IY1k5Tze4G85kARj0Rb1NayxFPsWnfNCRlTBI0+ACSHvqBCbEZOntXsiR+IVf\n 5qyd9nA7HPqJjNPkjfq885trSXSCCuSa48vfjvrCVuyF2kWy07qoIZjiXXnIrpU5lQGc\n aGrQ==",
        "X-Gm-Message-State": "AOJu0Yx/ROSZmYGiTGmd89WopkQnoaICm5UH5l85unp98TZOU9+P19xe\n w0kOjRMesuzN2zOqpju1q3DZILpHf2JEee0viB+hW/49F6v/pflnJCuZ/RlgyUeaIg/zqP0Gd/m\n 5ND+FnYrF8c+TiaEDwifhH4UY8dTtdFu9QslAOfBvwswBYfyaIgPlJhFdNgWJu6phh7hz",
        "X-Google-Smtp-Source": "\n AGHT+IFGBj6cWdzmz5EqTWfSyOl1twzVC/o9o6Ix/ZzzGWptC8mpwBDFs6KqLrl2jBPKxz2iU0cMXg==",
        "X-Received": "by 2002:a05:6a00:1f1a:b0:6ce:2731:d5c1 with SMTP id\n be26-20020a056a001f1a00b006ce2731d5c1mr2421723pfb.50.1701715058956;\n Mon, 04 Dec 2023 10:37:38 -0800 (PST)",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Subject": "[PATCH 14/14] net/bnxt: add support for v3 Rx completion",
        "Date": "Mon,  4 Dec 2023 10:37:10 -0800",
        "Message-Id": "<20231204183710.86921-15-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.39.2 (Apple Git-143)",
        "In-Reply-To": "<20231204183710.86921-1-ajit.khaparde@broadcom.com>",
        "References": "<20231204183710.86921-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"000000000000a1c070060bb3690f\"",
        "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": "P7 devices support the newer Rx completion version.\nThis Rx completion though similar to the previous generation,\nprovides some extra information for flow offload scenarios\napart from the normal information.\n\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt_rxr.c | 87 ++++++++++++++++++++++++++++++++++-\n drivers/net/bnxt/bnxt_rxr.h | 92 +++++++++++++++++++++++++++++++++++++\n 2 files changed, 177 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 9d45065f28..59ea0121de 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -553,6 +553,41 @@ bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n \treturn bnxt_ptype_table[index];\n }\n \n+static void\n+bnxt_parse_pkt_type_v3(struct rte_mbuf *mbuf,\n+\t\t       struct rx_pkt_cmpl *rxcmp_v1,\n+\t\t       struct rx_pkt_cmpl_hi *rxcmp1_v1)\n+{\n+\tuint32_t flags_type, flags2, meta;\n+\tstruct rx_pkt_v3_cmpl_hi *rxcmp1;\n+\tstruct rx_pkt_v3_cmpl *rxcmp;\n+\tuint8_t index;\n+\n+\trxcmp = (void *)rxcmp_v1;\n+\trxcmp1 = (void *)rxcmp1_v1;\n+\n+\tflags_type = rte_le_to_cpu_16(rxcmp->flags_type);\n+\tflags2 = rte_le_to_cpu_32(rxcmp1->flags2);\n+\tmeta = rte_le_to_cpu_32(rxcmp->metadata1_payload_offset);\n+\n+\t/* TODO */\n+\t/* Validate ptype table indexing at build time. */\n+\t/* bnxt_check_ptype_constants_v3(); */\n+\n+\t/*\n+\t * Index format:\n+\t *     bit 0: Set if IP tunnel encapsulated packet.\n+\t *     bit 1: Set if IPv6 packet, clear if IPv4.\n+\t *     bit 2: Set if VLAN tag present.\n+\t *     bits 3-6: Four-bit hardware packet type field.\n+\t */\n+\tindex = BNXT_CMPL_V3_ITYPE_TO_IDX(flags_type) |\n+\t\tBNXT_CMPL_V3_VLAN_TO_IDX(meta) |\n+\t\tBNXT_CMPL_V3_IP_VER_TO_IDX(flags2);\n+\n+\tmbuf->packet_type = bnxt_ptype_table[index];\n+}\n+\n static void __rte_cold\n bnxt_init_ol_flags_tables(struct bnxt_rx_queue *rxq)\n {\n@@ -716,6 +751,43 @@ bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl)\n \tptp->rx_timestamp = pkt_time;\n }\n \n+static uint32_t\n+bnxt_ulp_set_mark_in_mbuf_v3(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1,\n+\t\t\t     struct rte_mbuf *mbuf, uint32_t *vfr_flag)\n+{\n+\tstruct rx_pkt_v3_cmpl_hi *rxcmp1_v3 = (void *)rxcmp1;\n+\tuint32_t flags2, meta, mark_id = 0;\n+\t/* revisit the usage of gfid/lfid if mark action is supported.\n+\t * for now, only VFR is using mark and the metadata is the SVIF\n+\t * (a small number)\n+\t */\n+\tbool gfid = false;\n+\tint rc = 0;\n+\n+\tflags2 = rte_le_to_cpu_32(rxcmp1_v3->flags2);\n+\n+\tswitch (flags2 & RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_MASK) {\n+\tcase RX_PKT_V3_CMPL_HI_FLAGS2_META_FORMAT_CHDR_DATA:\n+\t\t/* Only supporting Metadata for ulp now */\n+\t\tmeta = rxcmp1_v3->metadata2;\n+\t\tbreak;\n+\tdefault:\n+\t\tgoto skip_mark;\n+\t}\n+\n+\trc = ulp_mark_db_mark_get(bp->ulp_ctx, gfid, meta, vfr_flag, &mark_id);\n+\tif (!rc) {\n+\t\t/* Only supporting VFR for now, no Mark actions */\n+\t\tif (vfr_flag && *vfr_flag)\n+\t\t\treturn mark_id;\n+\t}\n+\n+skip_mark:\n+\tmbuf->hash.fdir.hi = 0;\n+\n+\treturn 0;\n+}\n+\n static uint32_t\n bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1,\n \t\t\t  struct rte_mbuf *mbuf, uint32_t *vfr_flag)\n@@ -892,7 +964,8 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \t\t*rx_pkt = mbuf;\n \t\tgoto next_rx;\n \t} else if ((cmp_type != CMPL_BASE_TYPE_RX_L2) &&\n-\t\t   (cmp_type != CMPL_BASE_TYPE_RX_L2_V2)) {\n+\t\t   (cmp_type != CMPL_BASE_TYPE_RX_L2_V2) &&\n+\t\t   (cmp_type != CMPL_BASE_TYPE_RX_L2_V3)) {\n \t\trc = -EINVAL;\n \t\tgoto next_rx;\n \t}\n@@ -929,6 +1002,16 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \t\t      bp->ptp_all_rx_tstamp)\n \t\tbnxt_get_rx_ts_p5(rxq->bp, rxcmp1->reorder);\n \n+\tif (cmp_type == CMPL_BASE_TYPE_RX_L2_V3) {\n+\t\tbnxt_parse_csum_v3(mbuf, rxcmp1);\n+\t\tbnxt_parse_pkt_type_v3(mbuf, rxcmp, rxcmp1);\n+\t\tbnxt_rx_vlan_v3(mbuf, rxcmp, rxcmp1);\n+\t\tif (BNXT_TRUFLOW_EN(bp))\n+\t\t\tmark_id = bnxt_ulp_set_mark_in_mbuf_v3(rxq->bp, rxcmp1,\n+\t\t\t\t\t\t\t       mbuf, &vfr_flag);\n+\t\tgoto reuse_rx_mbuf;\n+\t}\n+\n \tif (cmp_type == CMPL_BASE_TYPE_RX_L2_V2) {\n \t\tbnxt_parse_csum_v2(mbuf, rxcmp1);\n \t\tbnxt_parse_pkt_type_v2(mbuf, rxcmp, rxcmp1);\n@@ -1066,7 +1149,7 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tif (CMP_TYPE(rxcmp) == CMPL_BASE_TYPE_HWRM_DONE) {\n \t\t\tPMD_DRV_LOG(ERR, \"Rx flush done\\n\");\n \t\t} else if ((CMP_TYPE(rxcmp) >= CMPL_BASE_TYPE_RX_TPA_START_V2) &&\n-\t\t     (CMP_TYPE(rxcmp) <= RX_TPA_V2_ABUF_CMPL_TYPE_RX_TPA_AGG)) {\n+\t\t\t   (CMP_TYPE(rxcmp) <= CMPL_BASE_TYPE_RX_TPA_START_V3)) {\n \t\t\trc = bnxt_rx_pkt(&rx_pkts[nb_rx_pkts], rxq, &raw_cons);\n \t\t\tif (!rc)\n \t\t\t\tnb_rx_pkts++;\ndiff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h\nindex af53bc0c25..439d29a07f 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -386,4 +386,96 @@ bnxt_parse_pkt_type_v2(struct rte_mbuf *mbuf,\n \n \tmbuf->packet_type = pkt_type;\n }\n+\n+/* Thor2 specific code for RX completion parsing */\n+#define RX_PKT_V3_CMPL_FLAGS2_IP_TYPE_SFT\t8\n+#define RX_PKT_V3_CMPL_METADATA1_VALID_SFT\t15\n+\n+#define BNXT_CMPL_V3_ITYPE_TO_IDX(ft) \\\n+\t(((ft) & RX_PKT_V3_CMPL_FLAGS_ITYPE_MASK) >> \\\n+\t (RX_PKT_V3_CMPL_FLAGS_ITYPE_SFT - BNXT_PTYPE_TBL_TYPE_SFT))\n+\n+#define BNXT_CMPL_V3_VLAN_TO_IDX(meta) \\\n+\t(((meta) & (1 << RX_PKT_V3_CMPL_METADATA1_VALID_SFT)) >> \\\n+\t (RX_PKT_V3_CMPL_METADATA1_VALID_SFT - BNXT_PTYPE_TBL_VLAN_SFT))\n+\n+#define BNXT_CMPL_V3_IP_VER_TO_IDX(f2) \\\n+\t(((f2) & RX_PKT_V3_CMPL_HI_FLAGS2_IP_TYPE) >> \\\n+\t (RX_PKT_V3_CMPL_FLAGS2_IP_TYPE_SFT - BNXT_PTYPE_TBL_IP_VER_SFT))\n+\n+#define RX_CMP_V3_VLAN_VALID(rxcmp)        \\\n+\t(((struct rx_pkt_v3_cmpl *)rxcmp)->metadata1_payload_offset &\t\\\n+\t RX_PKT_V3_CMPL_METADATA1_VALID)\n+\n+#define RX_CMP_V3_METADATA0_VID(rxcmp1)\t\t\t\t\\\n+\t((((struct rx_pkt_v3_cmpl_hi *)rxcmp1)->metadata0) &\t\\\n+\t (RX_PKT_V3_CMPL_HI_METADATA0_VID_MASK |\t\t\\\n+\t  RX_PKT_V3_CMPL_HI_METADATA0_DE  |\t\t\t\\\n+\t  RX_PKT_V3_CMPL_HI_METADATA0_PRI_MASK))\n+\n+static inline void bnxt_rx_vlan_v3(struct rte_mbuf *mbuf,\n+\tstruct rx_pkt_cmpl *rxcmp,\n+\tstruct rx_pkt_cmpl_hi *rxcmp1)\n+{\n+\tif (RX_CMP_V3_VLAN_VALID(rxcmp)) {\n+\t\tmbuf->vlan_tci = RX_CMP_V3_METADATA0_VID(rxcmp1);\n+\t\tmbuf->ol_flags |= RTE_MBUF_F_RX_VLAN | RTE_MBUF_F_RX_VLAN_STRIPPED;\n+\t}\n+}\n+\n+#define RX_CMP_V3_L4_CS_ERR(err)\t\t\\\n+\t(((err) & RX_PKT_CMPL_ERRORS_MASK)\t\\\n+\t & (RX_PKT_CMPL_ERRORS_L4_CS_ERROR))\n+#define RX_CMP_V3_L3_CS_ERR(err)\t\t\\\n+\t(((err) & RX_PKT_CMPL_ERRORS_MASK)\t\\\n+\t & (RX_PKT_CMPL_ERRORS_IP_CS_ERROR))\n+#define RX_CMP_V3_T_IP_CS_ERR(err)\t\t\\\n+\t(((err) & RX_PKT_CMPL_ERRORS_MASK)\t\\\n+\t & (RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR))\n+#define RX_CMP_V3_T_L4_CS_ERR(err)\t\t\\\n+\t(((err) & RX_PKT_CMPL_ERRORS_MASK)\t\\\n+\t & (RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR))\n+#define RX_PKT_CMPL_CALC\t\t\t\\\n+\t(RX_PKT_CMPL_FLAGS2_IP_CS_CALC |\t\\\n+\t RX_PKT_CMPL_FLAGS2_L4_CS_CALC |\t\\\n+\t RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC |\t\\\n+\t RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC)\n+\n+static inline uint64_t\n+bnxt_parse_csum_fields_v3(uint32_t flags2, uint32_t error_v2)\n+{\n+\tuint64_t ol_flags = 0;\n+\n+\tif (flags2 & RX_PKT_CMPL_CALC) {\n+\t\tif (unlikely(RX_CMP_V3_L4_CS_ERR(error_v2)))\n+\t\t\tol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;\n+\t\telse\n+\t\t\tol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;\n+\t\tif (unlikely(RX_CMP_V3_L3_CS_ERR(error_v2)))\n+\t\t\tol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD;\n+\t\tif (unlikely(RX_CMP_V3_T_L4_CS_ERR(error_v2)))\n+\t\t\tol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD;\n+\t\telse\n+\t\t\tol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD;\n+\t\tif (unlikely(RX_CMP_V3_T_IP_CS_ERR(error_v2)))\n+\t\t\tol_flags |= RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD;\n+\t\tif (!(ol_flags & (RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD)))\n+\t\t\tol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD;\n+\t} else {\n+\t\t/* Unknown is defined as 0 for all packets types hence using below for all */\n+\t\tol_flags |= RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN;\n+\t}\n+\treturn ol_flags;\n+}\n+\n+static inline void\n+bnxt_parse_csum_v3(struct rte_mbuf *mbuf, struct rx_pkt_cmpl_hi *rxcmp1)\n+{\n+\tstruct rx_pkt_v3_cmpl_hi *v3_cmp =\n+\t\t(struct rx_pkt_v3_cmpl_hi *)(rxcmp1);\n+\tuint16_t error_v2 = rte_le_to_cpu_16(v3_cmp->errors_v2);\n+\tuint32_t flags2 = rte_le_to_cpu_32(v3_cmp->flags2);\n+\n+\tmbuf->ol_flags |= bnxt_parse_csum_fields_v3(flags2, error_v2);\n+}\n #endif /*  _BNXT_RXR_H_ */\n",
    "prefixes": [
        "14/14"
    ]
}