Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/135041/?format=api
http://patches.dpdk.org/api/patches/135041/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231211171109.89716-15-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": "<20231211171109.89716-15-ajit.khaparde@broadcom.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20231211171109.89716-15-ajit.khaparde@broadcom.com", "date": "2023-12-11T17:11:09", "name": "[v3,14/14] net/bnxt: add support for v3 Rx completion", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "c986d5be12e8983c192c00bc5a111f54bbadea2c", "submitter": { "id": 501, "url": "http://patches.dpdk.org/api/people/501/?format=api", "name": "Ajit Khaparde", "email": "ajit.khaparde@broadcom.com" }, "delegate": { "id": 1766, "url": "http://patches.dpdk.org/api/users/1766/?format=api", "username": "ajitkhaparde", "first_name": "Ajit", "last_name": "Khaparde", "email": "ajit.khaparde@broadcom.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20231211171109.89716-15-ajit.khaparde@broadcom.com/mbox/", "series": [ { "id": 30511, "url": "http://patches.dpdk.org/api/series/30511/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30511", "date": "2023-12-11T17:10:55", "name": "support new 5760X P7 devices", "version": 3, "mbox": "http://patches.dpdk.org/series/30511/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/135041/comments/", "check": "fail", "checks": "http://patches.dpdk.org/api/patches/135041/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 01633436C8;\n\tMon, 11 Dec 2023 18:13:12 +0100 (CET)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 975FC42DF0;\n\tMon, 11 Dec 2023 18:11:48 +0100 (CET)", "from mail-qk1-f182.google.com (mail-qk1-f182.google.com\n [209.85.222.182])\n by mails.dpdk.org (Postfix) with ESMTP id 39CCB42DF9\n for <dev@dpdk.org>; Mon, 11 Dec 2023 18:11:47 +0100 (CET)", "by mail-qk1-f182.google.com with SMTP id\n af79cd13be357-77f2f492a43so262233785a.2\n for <dev@dpdk.org>; Mon, 11 Dec 2023 09:11:47 -0800 (PST)", "from C02GC2QQMD6T.wifi.broadcom.net ([192.19.223.252])\n by smtp.gmail.com with ESMTPSA id\n qz16-20020a05620a8c1000b0077efdfbd730sm3094581qkn.34.2023.12.11.09.11.44\n for <dev@dpdk.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 11 Dec 2023 09:11:44 -0800 (PST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=broadcom.com; s=google; t=1702314706; x=1702919506; 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=jAAtH5bX3yTV4E3FZbOubWeMpZPcWthQ0JF7m7pbQxM=;\n b=IG9O6K/fJij65wsNXIGpiMpYHRFy3aNPU+XFKikRFssc5RSivhPZG+2t0gj4vCOCDn\n bzXT/CbzuaJxVpjXvZ5dDhVJKSzBavXnS6J845p5fUQTh/MtQEC8O9hrUnSC61zcINEq\n RAmixmVMa1I46M2jo0isEJp6EBpuYdOmRwe84=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1702314706; x=1702919506;\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=jAAtH5bX3yTV4E3FZbOubWeMpZPcWthQ0JF7m7pbQxM=;\n b=lDj2mw9nOkYcFkWCrG20sbBfFXrqx4chhDKNkz2v6DsbxAU62ojUl9iNBdPgsoWuAF\n Hyo1kaC5cI+TrMR1AscldIwa2AFjeywg3bVy4ACaV4ZoRkggAsKnV6UMzmNFw9sUW7tD\n HzQ8HdvXXRZz66Uw2AsflAkx1f6n6LQ4XTi4PXGa/0k0TWphTQU6ScbTtRVlpOBYGWbl\n DspiD0M20AnrtP0ysVmvjMF1C0uWWH3Y6Kuco0mLU7VIIJGRDlMeed9JiUilvXNI4mbu\n vLgmQ+yCZ/RqA7JvK53VZC9ksdh7JmxioLCxcnkoXM7CxDh40oJ4IQbt88kC+vBMy2AM\n tvJA==", "X-Gm-Message-State": "AOJu0YzXFDkJRCqsPCe9EIa3JFS2NrKUk033PgDlwwUhbNkRBRRzBYAi\n +m8jonB77KbaLWsy+AVnY7zxdsO0Nsq04pQgitmzbUn63Q++k5zt+4jXjNwCJZXhP5aqFC5XPG+\n Jii3qYGmOQeZuIM2lv3fKQnBB4LExwgNv6b6SBpyMKe/SppPzWBzL0K/9z3wZL/TUb+l/", "X-Google-Smtp-Source": "\n AGHT+IHTC16Mv8yZbK23jmHbEJsgYG1qv5od/CHrg9WHw7M0iqe/GvXnieXKz5NGZ8VwURQ7WguDAQ==", "X-Received": "by 2002:a05:620a:20d7:b0:77a:1476:fb93 with SMTP id\n f23-20020a05620a20d700b0077a1476fb93mr5658079qka.47.1702314705988;\n Mon, 11 Dec 2023 09:11:45 -0800 (PST)", "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>", "To": "dev@dpdk.org", "Subject": "[PATCH v3 14/14] net/bnxt: add support for v3 Rx completion", "Date": "Mon, 11 Dec 2023 09:11:09 -0800", "Message-Id": "<20231211171109.89716-15-ajit.khaparde@broadcom.com>", "X-Mailer": "git-send-email 2.39.2 (Apple Git-143)", "In-Reply-To": "<20231211171109.89716-1-ajit.khaparde@broadcom.com>", "References": "<20231211171109.89716-1-ajit.khaparde@broadcom.com>", "MIME-Version": "1.0", "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"0000000000006012f3060c3f0706\"", "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": [ "v3", "14/14" ] }{ "id": 135041, "url": "