get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 105588,
    "url": "http://patchwork.dpdk.org/api/patches/105588/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20220103160149.1715058-5-gakhil@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20220103160149.1715058-5-gakhil@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220103160149.1715058-5-gakhil@marvell.com",
    "date": "2022-01-03T16:01:48",
    "name": "[4/5] net/cnxk: add dev args for min-max spi",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1907cc5a3ba67a751041f5e1fd0cea5100bc9879",
    "submitter": {
        "id": 2094,
        "url": "http://patchwork.dpdk.org/api/people/2094/?format=api",
        "name": "Akhil Goyal",
        "email": "gakhil@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patchwork.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20220103160149.1715058-5-gakhil@marvell.com/mbox/",
    "series": [
        {
            "id": 21053,
            "url": "http://patchwork.dpdk.org/api/series/21053/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=21053",
            "date": "2022-01-03T16:01:44",
            "name": "net/cnxk: support IP reassembly offload",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/21053/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/105588/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/105588/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 739D2A04A3;\n\tMon,  3 Jan 2022 17:02:48 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DD86F41150;\n\tMon,  3 Jan 2022 17:02:26 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 4A2AD41147\n for <dev@dpdk.org>; Mon,  3 Jan 2022 17:02:25 +0100 (CET)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id\n 203EHCXf016199;\n Mon, 3 Jan 2022 08:02:23 -0800",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3dbmvswuxb-2\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 03 Jan 2022 08:02:23 -0800",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Mon, 3 Jan 2022 08:02:21 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Mon, 3 Jan 2022 08:02:21 -0800",
            "from localhost.localdomain (unknown [10.28.48.55])\n by maili.marvell.com (Postfix) with ESMTP id 1B8B43F7084;\n Mon,  3 Jan 2022 08:02:18 -0800 (PST)"
        ],
        "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-transfer-encoding : content-type; s=pfpt0220;\n bh=3rnjAr5wzmYDLx/yPvMUgdHoQfK0yk7yU41lGI5Lj04=;\n b=YOQDpC2kGvKT6eOVrJReGSYO0ws9lZsXCnhgZU+fQa8ddvvD6NxHfGvWHzPC2kCM4gvW\n LzVuURTeZ81jk6qEaxKQ3ULXVsVmwuKO4Iq/cRFJp+DVP5rqGmF/dK/74DoHtTgE1Xbd\n 0rbJfme+KnGWaCuejQb4RiVqQCOkN5E1CqazRXikjBXAOtxS3yuEjXWJ3L6mq9/8v1Z7\n wGrTGHAXt4TRXjBsm7FwpglDM+dRwtDVcA0R68vzNgxOrBOWzEa7V7csFoU9jQmY0ozV\n yUQMB91jv63a2vp5HNl7uSw6iBGGa41QK4phOA4NoaQocnzbcXv0Xo9d61dxMznI4eTE 1g==",
        "From": "Akhil Goyal <gakhil@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<anoobj@marvell.com>, <thomas@monjalon.net>, <ferruh.yigit@intel.com>,\n <andrew.rybchenko@oktetlabs.ru>, <olivier.matz@6wind.com>,\n <rosen.xu@intel.com>, <jerinj@marvell.com>, <vvelumuri@marvell.com>,\n <ndabilpuram@marvell.com>",
        "Subject": "[PATCH 4/5] net/cnxk: add dev args for min-max spi",
        "Date": "Mon, 3 Jan 2022 21:31:48 +0530",
        "Message-ID": "<20220103160149.1715058-5-gakhil@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220103160149.1715058-1-gakhil@marvell.com>",
        "References": "<20220103160149.1715058-1-gakhil@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "qclnHk2s6IWR9s4HzkVFH2BaN0I7KWsG",
        "X-Proofpoint-GUID": "qclnHk2s6IWR9s4HzkVFH2BaN0I7KWsG",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513\n definitions=2022-01-03_06,2022-01-01_01,2021-12-02_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": "From: Nithin Dabilpuram <ndabilpuram@marvell.com>\n\nDev args for setting minimum and maximum SPI value that the\nhardware can support and create database for SA lookup in\ninline IPsec processing is added.\n\nSigned-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>\n---\n drivers/common/cnxk/roc_nix.h          |  1 +\n drivers/common/cnxk/roc_nix_inl.c      | 59 ++++++++++++++++----------\n drivers/common/cnxk/roc_nix_inl.h      |  8 ++--\n drivers/common/cnxk/roc_nix_inl_dev.c  | 22 +++++++---\n drivers/common/cnxk/roc_nix_inl_priv.h |  4 +-\n drivers/common/cnxk/roc_nix_priv.h     |  1 +\n drivers/common/cnxk/version.map        |  2 +-\n drivers/net/cnxk/cn10k_ethdev_sec.c    | 13 ++++--\n drivers/net/cnxk/cn9k_ethdev_sec.c     | 10 +++--\n drivers/net/cnxk/cnxk_ethdev_devargs.c | 19 ++++++---\n drivers/net/cnxk/cnxk_ethdev_sec.c     | 13 ++++--\n drivers/net/cnxk/cnxk_lookup.c         |  3 +-\n 12 files changed, 101 insertions(+), 54 deletions(-)",
    "diff": "diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h\nindex 69a5e8e7b4..912ad9b990 100644\n--- a/drivers/common/cnxk/roc_nix.h\n+++ b/drivers/common/cnxk/roc_nix.h\n@@ -381,6 +381,7 @@ struct roc_nix {\n \tuint32_t outb_nb_desc;\n \tuint16_t outb_nb_crypto_qs;\n \tuint16_t ipsec_in_max_spi;\n+\tuint16_t ipsec_in_min_spi;\n \tuint16_t ipsec_out_max_sa;\n \t/* End of input parameters */\n \t/* LMT line base for \"Per Core Tx LMT line\" mode*/\ndiff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c\nindex a06872f6f3..05afabd10a 100644\n--- a/drivers/common/cnxk/roc_nix_inl.c\n+++ b/drivers/common/cnxk/roc_nix_inl.c\n@@ -20,11 +20,15 @@ static int\n nix_inl_inb_sa_tbl_setup(struct roc_nix *roc_nix)\n {\n \tuint16_t ipsec_in_max_spi = roc_nix->ipsec_in_max_spi;\n+\tuint16_t ipsec_in_min_spi = roc_nix->ipsec_in_min_spi;\n \tstruct nix *nix = roc_nix_to_nix_priv(roc_nix);\n \tstruct roc_nix_ipsec_cfg cfg;\n+\tuint64_t max_sa, i;\n \tsize_t inb_sa_sz;\n-\tint rc, i;\n \tvoid *sa;\n+\tint rc;\n+\n+\tmax_sa = plt_align32pow2(ipsec_in_max_spi - ipsec_in_min_spi + 1);\n \n \t/* CN9K SA size is different */\n \tif (roc_model_is_cn9k())\n@@ -34,14 +38,15 @@ nix_inl_inb_sa_tbl_setup(struct roc_nix *roc_nix)\n \n \t/* Alloc contiguous memory for Inbound SA's */\n \tnix->inb_sa_sz = inb_sa_sz;\n-\tnix->inb_sa_base = plt_zmalloc(inb_sa_sz * ipsec_in_max_spi,\n+\tnix->inb_spi_mask = max_sa - 1;\n+\tnix->inb_sa_base = plt_zmalloc(inb_sa_sz * max_sa,\n \t\t\t\t       ROC_NIX_INL_SA_BASE_ALIGN);\n \tif (!nix->inb_sa_base) {\n \t\tplt_err(\"Failed to allocate memory for Inbound SA\");\n \t\treturn -ENOMEM;\n \t}\n \tif (roc_model_is_cn10k()) {\n-\t\tfor (i = 0; i < ipsec_in_max_spi; i++) {\n+\t\tfor (i = 0; i < max_sa; i++) {\n \t\t\tsa = ((uint8_t *)nix->inb_sa_base) + (i * inb_sa_sz);\n \t\t\troc_nix_inl_inb_sa_init(sa);\n \t\t}\n@@ -50,7 +55,7 @@ nix_inl_inb_sa_tbl_setup(struct roc_nix *roc_nix)\n \tmemset(&cfg, 0, sizeof(cfg));\n \tcfg.sa_size = inb_sa_sz;\n \tcfg.iova = (uintptr_t)nix->inb_sa_base;\n-\tcfg.max_sa = ipsec_in_max_spi + 1;\n+\tcfg.max_sa = max_sa;\n \tcfg.tt = SSO_TT_ORDERED;\n \n \t/* Setup device specific inb SA table */\n@@ -129,26 +134,34 @@ roc_nix_inl_inb_sa_base_get(struct roc_nix *roc_nix, bool inb_inl_dev)\n }\n \n uint32_t\n-roc_nix_inl_inb_sa_max_spi(struct roc_nix *roc_nix, bool inb_inl_dev)\n+roc_nix_inl_inb_spi_range(struct roc_nix *roc_nix, bool inb_inl_dev,\n+\t\t\t  uint32_t *min_spi, uint32_t *max_spi)\n {\n \tstruct nix *nix = roc_nix_to_nix_priv(roc_nix);\n \tstruct idev_cfg *idev = idev_get_cfg();\n+\tuint32_t min = 0, max = 0, mask = 0;\n \tstruct nix_inl_dev *inl_dev;\n \n-\tif (idev == NULL)\n-\t\treturn 0;\n-\n-\tif (!nix->inl_inb_ena)\n-\t\treturn 0;\n+\tif (idev == NULL || !nix->inl_inb_ena)\n+\t\tgoto exit;\n \n \tinl_dev = idev->nix_inl_dev;\n-\tif (inb_inl_dev) {\n-\t\tif (inl_dev)\n-\t\t\treturn inl_dev->ipsec_in_max_spi;\n-\t\treturn 0;\n+\tif (inb_inl_dev && inl_dev) {\n+\t\tmin = inl_dev->ipsec_in_min_spi;\n+\t\tmax = inl_dev->ipsec_in_max_spi;\n+\t\tmask = inl_dev->inb_spi_mask;\n+\t} else if (!inb_inl_dev) {\n+\t\tmin = roc_nix->ipsec_in_min_spi;\n+\t\tmax = roc_nix->ipsec_in_max_spi;\n+\t\tmask = nix->inb_spi_mask;\n \t}\n \n-\treturn roc_nix->ipsec_in_max_spi;\n+exit:\n+\tif (min_spi)\n+\t\t*min_spi = min;\n+\tif (max_spi)\n+\t\t*max_spi = max;\n+\treturn mask;\n }\n \n uint32_t\n@@ -175,8 +188,8 @@ roc_nix_inl_inb_sa_sz(struct roc_nix *roc_nix, bool inl_dev_sa)\n uintptr_t\n roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix, bool inb_inl_dev, uint32_t spi)\n {\n+\tuint32_t max_spi, min_spi, mask;\n \tuintptr_t sa_base;\n-\tuint32_t max_spi;\n \tuint64_t sz;\n \n \tsa_base = roc_nix_inl_inb_sa_base_get(roc_nix, inb_inl_dev);\n@@ -185,11 +198,11 @@ roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix, bool inb_inl_dev, uint32_t spi)\n \t\treturn 0;\n \n \t/* Check if SPI is in range */\n-\tmax_spi = roc_nix_inl_inb_sa_max_spi(roc_nix, inb_inl_dev);\n-\tif (spi > max_spi) {\n-\t\tplt_err(\"Inbound SA SPI %u exceeds max %u\", spi, max_spi);\n-\t\treturn 0;\n-\t}\n+\tmask = roc_nix_inl_inb_spi_range(roc_nix, inb_inl_dev, &min_spi,\n+\t\t\t\t\t &max_spi);\n+\tif (spi > max_spi || spi < min_spi)\n+\t\tplt_warn(\"Inbound SA SPI %u not in range (%u..%u)\", spi,\n+\t\t\t min_spi, max_spi);\n \n \t/* Get SA size */\n \tsz = roc_nix_inl_inb_sa_sz(roc_nix, inb_inl_dev);\n@@ -197,7 +210,7 @@ roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix, bool inb_inl_dev, uint32_t spi)\n \t\treturn 0;\n \n \t/* Basic logic of SPI->SA for now */\n-\treturn (sa_base + (spi * sz));\n+\treturn (sa_base + ((spi & mask) * sz));\n }\n \n int\n@@ -745,7 +758,7 @@ roc_nix_inl_inb_tag_update(struct roc_nix *roc_nix, uint32_t tag_const,\n \tmemset(&cfg, 0, sizeof(cfg));\n \tcfg.sa_size = nix->inb_sa_sz;\n \tcfg.iova = (uintptr_t)nix->inb_sa_base;\n-\tcfg.max_sa = roc_nix->ipsec_in_max_spi + 1;\n+\tcfg.max_sa = nix->inb_spi_mask + 1;\n \tcfg.tt = tt;\n \tcfg.tag_const = tag_const;\n \ndiff --git a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h\nindex 73a17276c4..280ea7cb80 100644\n--- a/drivers/common/cnxk/roc_nix_inl.h\n+++ b/drivers/common/cnxk/roc_nix_inl.h\n@@ -110,7 +110,8 @@ typedef void (*roc_nix_inl_sso_work_cb_t)(uint64_t *gw, void *args);\n struct roc_nix_inl_dev {\n \t/* Input parameters */\n \tstruct plt_pci_device *pci_dev;\n-\tuint16_t ipsec_in_max_spi;\n+\tuint32_t ipsec_in_min_spi;\n+\tuint32_t ipsec_in_max_spi;\n \tbool selftest;\n \tbool is_multi_channel;\n \tuint16_t channel;\n@@ -138,8 +139,9 @@ int __roc_api roc_nix_inl_inb_fini(struct roc_nix *roc_nix);\n bool __roc_api roc_nix_inl_inb_is_enabled(struct roc_nix *roc_nix);\n uintptr_t __roc_api roc_nix_inl_inb_sa_base_get(struct roc_nix *roc_nix,\n \t\t\t\t\t\tbool inl_dev_sa);\n-uint32_t __roc_api roc_nix_inl_inb_sa_max_spi(struct roc_nix *roc_nix,\n-\t\t\t\t\t      bool inl_dev_sa);\n+uint32_t __roc_api roc_nix_inl_inb_spi_range(struct roc_nix *roc_nix,\n+\t\t\t\t\t     bool inl_dev_sa, uint32_t *min,\n+\t\t\t\t\t     uint32_t *max);\n uint32_t __roc_api roc_nix_inl_inb_sa_sz(struct roc_nix *roc_nix,\n \t\t\t\t\t bool inl_dev_sa);\n uintptr_t __roc_api roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix,\ndiff --git a/drivers/common/cnxk/roc_nix_inl_dev.c b/drivers/common/cnxk/roc_nix_inl_dev.c\nindex a0fe6ecd82..f75d14ba8b 100644\n--- a/drivers/common/cnxk/roc_nix_inl_dev.c\n+++ b/drivers/common/cnxk/roc_nix_inl_dev.c\n@@ -114,6 +114,7 @@ nix_inl_nix_ipsec_cfg(struct nix_inl_dev *inl_dev, bool ena)\n {\n \tstruct nix_inline_ipsec_lf_cfg *lf_cfg;\n \tstruct mbox *mbox = (&inl_dev->dev)->mbox;\n+\tuint64_t max_sa;\n \tuint32_t sa_w;\n \n \tlf_cfg = mbox_alloc_msg_nix_inline_ipsec_lf_cfg(mbox);\n@@ -121,8 +122,9 @@ nix_inl_nix_ipsec_cfg(struct nix_inl_dev *inl_dev, bool ena)\n \t\treturn -ENOSPC;\n \n \tif (ena) {\n-\t\tsa_w = plt_align32pow2(inl_dev->ipsec_in_max_spi + 1);\n-\t\tsa_w = plt_log2_u32(sa_w);\n+\n+\t\tmax_sa = inl_dev->inb_spi_mask + 1;\n+\t\tsa_w = plt_log2_u32(max_sa);\n \n \t\tlf_cfg->enable = 1;\n \t\tlf_cfg->sa_base_addr = (uintptr_t)inl_dev->inb_sa_base;\n@@ -132,7 +134,7 @@ nix_inl_nix_ipsec_cfg(struct nix_inl_dev *inl_dev, bool ena)\n \t\t\tlf_cfg->ipsec_cfg0.lenm1_max = NIX_CN9K_MAX_HW_FRS - 1;\n \t\telse\n \t\t\tlf_cfg->ipsec_cfg0.lenm1_max = NIX_RPM_MAX_HW_FRS - 1;\n-\t\tlf_cfg->ipsec_cfg1.sa_idx_max = inl_dev->ipsec_in_max_spi;\n+\t\tlf_cfg->ipsec_cfg1.sa_idx_max = max_sa - 1;\n \t\tlf_cfg->ipsec_cfg0.sa_pow2_size =\n \t\t\tplt_log2_u32(inl_dev->inb_sa_sz);\n \n@@ -341,15 +343,19 @@ nix_inl_sso_release(struct nix_inl_dev *inl_dev)\n static int\n nix_inl_nix_setup(struct nix_inl_dev *inl_dev)\n {\n-\tuint16_t ipsec_in_max_spi = inl_dev->ipsec_in_max_spi;\n+\tuint32_t ipsec_in_min_spi = inl_dev->ipsec_in_min_spi;\n+\tuint32_t ipsec_in_max_spi = inl_dev->ipsec_in_max_spi;\n \tstruct dev *dev = &inl_dev->dev;\n \tstruct mbox *mbox = dev->mbox;\n \tstruct nix_lf_alloc_rsp *rsp;\n \tstruct nix_lf_alloc_req *req;\n+\tuint64_t max_sa, i;\n \tsize_t inb_sa_sz;\n-\tint i, rc = -ENOSPC;\n+\tint rc = -ENOSPC;\n \tvoid *sa;\n \n+\tmax_sa = plt_align32pow2(ipsec_in_max_spi - ipsec_in_min_spi + 1);\n+\n \t/* Alloc NIX LF needed for single RQ */\n \treq = mbox_alloc_msg_nix_lf_alloc(mbox);\n \tif (req == NULL)\n@@ -397,7 +403,8 @@ nix_inl_nix_setup(struct nix_inl_dev *inl_dev)\n \n \t/* Alloc contiguous memory for Inbound SA's */\n \tinl_dev->inb_sa_sz = inb_sa_sz;\n-\tinl_dev->inb_sa_base = plt_zmalloc(inb_sa_sz * ipsec_in_max_spi,\n+\tinl_dev->inb_spi_mask = max_sa - 1;\n+\tinl_dev->inb_sa_base = plt_zmalloc(inb_sa_sz * max_sa,\n \t\t\t\t\t   ROC_NIX_INL_SA_BASE_ALIGN);\n \tif (!inl_dev->inb_sa_base) {\n \t\tplt_err(\"Failed to allocate memory for Inbound SA\");\n@@ -406,7 +413,7 @@ nix_inl_nix_setup(struct nix_inl_dev *inl_dev)\n \t}\n \n \tif (roc_model_is_cn10k()) {\n-\t\tfor (i = 0; i < ipsec_in_max_spi; i++) {\n+\t\tfor (i = 0; i < max_sa; i++) {\n \t\t\tsa = ((uint8_t *)inl_dev->inb_sa_base) +\n \t\t\t     (i * inb_sa_sz);\n \t\t\troc_nix_inl_inb_sa_init(sa);\n@@ -562,6 +569,7 @@ roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev)\n \tmemset(inl_dev, 0, sizeof(*inl_dev));\n \n \tinl_dev->pci_dev = pci_dev;\n+\tinl_dev->ipsec_in_min_spi = roc_inl_dev->ipsec_in_min_spi;\n \tinl_dev->ipsec_in_max_spi = roc_inl_dev->ipsec_in_max_spi;\n \tinl_dev->selftest = roc_inl_dev->selftest;\n \tinl_dev->is_multi_channel = roc_inl_dev->is_multi_channel;\ndiff --git a/drivers/common/cnxk/roc_nix_inl_priv.h b/drivers/common/cnxk/roc_nix_inl_priv.h\nindex 3dc526f929..2e42f022b8 100644\n--- a/drivers/common/cnxk/roc_nix_inl_priv.h\n+++ b/drivers/common/cnxk/roc_nix_inl_priv.h\n@@ -53,7 +53,9 @@ struct nix_inl_dev {\n \tuint16_t channel;\n \tuint16_t chan_mask;\n \tbool is_multi_channel;\n-\tuint16_t ipsec_in_max_spi;\n+\tuint32_t ipsec_in_max_spi;\n+\tuint32_t ipsec_in_min_spi;\n+\tuint32_t inb_spi_mask;\n \tbool attach_cptlf;\n };\n \ndiff --git a/drivers/common/cnxk/roc_nix_priv.h b/drivers/common/cnxk/roc_nix_priv.h\nindex 04575af295..4bd69cbec5 100644\n--- a/drivers/common/cnxk/roc_nix_priv.h\n+++ b/drivers/common/cnxk/roc_nix_priv.h\n@@ -173,6 +173,7 @@ struct nix {\n \tbool inl_outb_ena;\n \tvoid *inb_sa_base;\n \tsize_t inb_sa_sz;\n+\tuint32_t inb_spi_mask;\n \tvoid *outb_sa_base;\n \tsize_t outb_sa_sz;\n \tuint16_t outb_err_sso_pffunc;\ndiff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map\nindex 9b04f3518a..08e1234bcf 100644\n--- a/drivers/common/cnxk/version.map\n+++ b/drivers/common/cnxk/version.map\n@@ -139,7 +139,7 @@ INTERNAL {\n \troc_nix_inl_inb_init;\n \troc_nix_inl_inb_sa_base_get;\n \troc_nix_inl_inb_sa_get;\n-\troc_nix_inl_inb_sa_max_spi;\n+\troc_nix_inl_inb_spi_range;\n \troc_nix_inl_inb_sa_sz;\n \troc_nix_inl_inb_tag_update;\n \troc_nix_inl_inb_fini;\ndiff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c\nindex f20a111cd9..854498ef46 100644\n--- a/drivers/net/cnxk/cn10k_ethdev_sec.c\n+++ b/drivers/net/cnxk/cn10k_ethdev_sec.c\n@@ -237,6 +237,7 @@ cn10k_eth_sec_session_create(void *device,\n \tstruct cn10k_sec_sess_priv sess_priv;\n \tstruct rte_crypto_sym_xform *crypto;\n \tstruct cnxk_eth_sec_sess *eth_sec;\n+\tstruct roc_nix *nix = &dev->nix;\n \tbool inbound, inl_dev;\n \tint rc = 0;\n \n@@ -282,13 +283,16 @@ cn10k_eth_sec_session_create(void *device,\n \tif (inbound) {\n \t\tstruct roc_ot_ipsec_inb_sa *inb_sa, *inb_sa_dptr;\n \t\tstruct cn10k_inb_priv_data *inb_priv;\n+\t\tuint32_t spi_mask;\n \t\tuintptr_t sa;\n \n \t\tPLT_STATIC_ASSERT(sizeof(struct cn10k_inb_priv_data) <\n \t\t\t\t  ROC_NIX_INL_OT_IPSEC_INB_SW_RSVD);\n \n+\t\tspi_mask = roc_nix_inl_inb_spi_range(nix, inl_dev, NULL, NULL);\n+\n \t\t/* Get Inbound SA from NIX_RX_IPSEC_SA_BASE */\n-\t\tsa = roc_nix_inl_inb_sa_get(&dev->nix, inl_dev, ipsec->spi);\n+\t\tsa = roc_nix_inl_inb_sa_get(nix, inl_dev, ipsec->spi);\n \t\tif (!sa && dev->inb.inl_dev) {\n \t\t\tplt_err(\"Failed to create ingress sa, inline dev \"\n \t\t\t\t\"not found or spi not in range\");\n@@ -327,16 +331,17 @@ cn10k_eth_sec_session_create(void *device,\n \t\tinb_priv->userdata = conf->userdata;\n \n \t\t/* Save SA index/SPI in cookie for now */\n-\t\tinb_sa_dptr->w1.s.cookie = rte_cpu_to_be_32(ipsec->spi);\n+\t\tinb_sa_dptr->w1.s.cookie =\n+\t\t\trte_cpu_to_be_32(ipsec->spi & spi_mask);\n \n \t\t/* Prepare session priv */\n \t\tsess_priv.inb_sa = 1;\n-\t\tsess_priv.sa_idx = ipsec->spi;\n+\t\tsess_priv.sa_idx = ipsec->spi & spi_mask;\n \n \t\t/* Pointer from eth_sec -> inb_sa */\n \t\teth_sec->sa = inb_sa;\n \t\teth_sec->sess = sess;\n-\t\teth_sec->sa_idx = ipsec->spi;\n+\t\teth_sec->sa_idx = ipsec->spi & spi_mask;\n \t\teth_sec->spi = ipsec->spi;\n \t\teth_sec->inl_dev = !!dev->inb.inl_dev;\n \t\teth_sec->inb = true;\ndiff --git a/drivers/net/cnxk/cn9k_ethdev_sec.c b/drivers/net/cnxk/cn9k_ethdev_sec.c\nindex b070ad57fc..cf0431184a 100644\n--- a/drivers/net/cnxk/cn9k_ethdev_sec.c\n+++ b/drivers/net/cnxk/cn9k_ethdev_sec.c\n@@ -146,6 +146,7 @@ cn9k_eth_sec_session_create(void *device,\n \tstruct cn9k_sec_sess_priv sess_priv;\n \tstruct rte_crypto_sym_xform *crypto;\n \tstruct cnxk_eth_sec_sess *eth_sec;\n+\tstruct roc_nix *nix = &dev->nix;\n \tbool inbound;\n \tint rc = 0;\n \n@@ -180,15 +181,18 @@ cn9k_eth_sec_session_create(void *device,\n \tif (inbound) {\n \t\tstruct cn9k_inb_priv_data *inb_priv;\n \t\tstruct roc_onf_ipsec_inb_sa *inb_sa;\n+\t\tuint32_t spi_mask;\n \n \t\tPLT_STATIC_ASSERT(sizeof(struct cn9k_inb_priv_data) <\n \t\t\t\t  ROC_NIX_INL_ONF_IPSEC_INB_SW_RSVD);\n \n+\t\tspi_mask = roc_nix_inl_inb_spi_range(nix, false, NULL, NULL);\n+\n \t\t/* Get Inbound SA from NIX_RX_IPSEC_SA_BASE. Assume no inline\n \t\t * device always for CN9K.\n \t\t */\n \t\tinb_sa = (struct roc_onf_ipsec_inb_sa *)\n-\t\t\troc_nix_inl_inb_sa_get(&dev->nix, false, ipsec->spi);\n+\t\t\troc_nix_inl_inb_sa_get(nix, false, ipsec->spi);\n \t\tif (!inb_sa) {\n \t\t\tplt_err(\"Failed to create ingress sa\");\n \t\t\trc = -EFAULT;\n@@ -228,12 +232,12 @@ cn9k_eth_sec_session_create(void *device,\n \n \t\t/* Prepare session priv */\n \t\tsess_priv.inb_sa = 1;\n-\t\tsess_priv.sa_idx = ipsec->spi;\n+\t\tsess_priv.sa_idx = ipsec->spi & spi_mask;\n \n \t\t/* Pointer from eth_sec -> inb_sa */\n \t\teth_sec->sa = inb_sa;\n \t\teth_sec->sess = sess;\n-\t\teth_sec->sa_idx = ipsec->spi;\n+\t\teth_sec->sa_idx = ipsec->spi & spi_mask;\n \t\teth_sec->spi = ipsec->spi;\n \t\teth_sec->inb = true;\n \ndiff --git a/drivers/net/cnxk/cnxk_ethdev_devargs.c b/drivers/net/cnxk/cnxk_ethdev_devargs.c\nindex e068f55349..c55c57aa80 100644\n--- a/drivers/net/cnxk/cnxk_ethdev_devargs.c\n+++ b/drivers/net/cnxk/cnxk_ethdev_devargs.c\n@@ -37,14 +37,14 @@ parse_outb_nb_crypto_qs(const char *key, const char *value, void *extra_args)\n }\n \n static int\n-parse_ipsec_in_max_spi(const char *key, const char *value, void *extra_args)\n+parse_ipsec_in_spi_range(const char *key, const char *value, void *extra_args)\n {\n \tRTE_SET_USED(key);\n \tuint32_t val;\n \n-\tval = atoi(value);\n+\tval = strtoul(value, NULL, 0);\n \n-\t*(uint16_t *)extra_args = val;\n+\t*(uint32_t *)extra_args = val;\n \n \treturn 0;\n }\n@@ -55,7 +55,7 @@ parse_ipsec_out_max_sa(const char *key, const char *value, void *extra_args)\n \tRTE_SET_USED(key);\n \tuint32_t val;\n \n-\tval = atoi(value);\n+\tval = strtoul(value, NULL, 0);\n \n \t*(uint16_t *)extra_args = val;\n \n@@ -172,6 +172,7 @@ parse_switch_header_type(const char *key, const char *value, void *extra_args)\n #define CNXK_SWITCH_HEADER_TYPE \"switch_header\"\n #define CNXK_RSS_TAG_AS_XOR\t\"tag_as_xor\"\n #define CNXK_LOCK_RX_CTX\t\"lock_rx_ctx\"\n+#define CNXK_IPSEC_IN_MIN_SPI\t\"ipsec_in_min_spi\"\n #define CNXK_IPSEC_IN_MAX_SPI\t\"ipsec_in_max_spi\"\n #define CNXK_IPSEC_OUT_MAX_SA\t\"ipsec_out_max_sa\"\n #define CNXK_OUTB_NB_DESC\t\"outb_nb_desc\"\n@@ -183,13 +184,14 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)\n {\n \tuint16_t reta_sz = ROC_NIX_RSS_RETA_SZ_64;\n \tuint16_t sqb_count = CNXK_NIX_TX_MAX_SQB;\n-\tuint16_t ipsec_in_max_spi = BIT(8) - 1;\n-\tuint16_t ipsec_out_max_sa = BIT(12);\n+\tuint32_t ipsec_in_max_spi = BIT(8) - 1;\n+\tuint32_t ipsec_out_max_sa = BIT(12);\n \tuint16_t flow_prealloc_size = 1;\n \tuint16_t switch_header_type = 0;\n \tuint16_t flow_max_priority = 3;\n \tuint16_t force_inb_inl_dev = 0;\n \tuint16_t outb_nb_crypto_qs = 1;\n+\tuint32_t ipsec_in_min_spi = 0;\n \tuint16_t outb_nb_desc = 8200;\n \tuint16_t rss_tag_as_xor = 0;\n \tuint16_t scalar_enable = 0;\n@@ -218,8 +220,10 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)\n \trte_kvargs_process(kvlist, CNXK_RSS_TAG_AS_XOR, &parse_flag,\n \t\t\t   &rss_tag_as_xor);\n \trte_kvargs_process(kvlist, CNXK_LOCK_RX_CTX, &parse_flag, &lock_rx_ctx);\n+\trte_kvargs_process(kvlist, CNXK_IPSEC_IN_MIN_SPI,\n+\t\t\t   &parse_ipsec_in_spi_range, &ipsec_in_min_spi);\n \trte_kvargs_process(kvlist, CNXK_IPSEC_IN_MAX_SPI,\n-\t\t\t   &parse_ipsec_in_max_spi, &ipsec_in_max_spi);\n+\t\t\t   &parse_ipsec_in_spi_range, &ipsec_in_max_spi);\n \trte_kvargs_process(kvlist, CNXK_IPSEC_OUT_MAX_SA,\n \t\t\t   &parse_ipsec_out_max_sa, &ipsec_out_max_sa);\n \trte_kvargs_process(kvlist, CNXK_OUTB_NB_DESC, &parse_outb_nb_desc,\n@@ -237,6 +241,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)\n \tdev->outb.max_sa = ipsec_out_max_sa;\n \tdev->outb.nb_desc = outb_nb_desc;\n \tdev->outb.nb_crypto_qs = outb_nb_crypto_qs;\n+\tdev->nix.ipsec_in_min_spi = ipsec_in_min_spi;\n \tdev->nix.ipsec_in_max_spi = ipsec_in_max_spi;\n \tdev->nix.ipsec_out_max_sa = ipsec_out_max_sa;\n \tdev->nix.rss_tag_as_xor = !!rss_tag_as_xor;\ndiff --git a/drivers/net/cnxk/cnxk_ethdev_sec.c b/drivers/net/cnxk/cnxk_ethdev_sec.c\nindex 3fef0562ea..02b1b66273 100644\n--- a/drivers/net/cnxk/cnxk_ethdev_sec.c\n+++ b/drivers/net/cnxk/cnxk_ethdev_sec.c\n@@ -5,6 +5,7 @@\n #include <cnxk_ethdev.h>\n \n #define CNXK_NIX_INL_SELFTEST\t      \"selftest\"\n+#define CNXK_NIX_INL_IPSEC_IN_MIN_SPI \"ipsec_in_min_spi\"\n #define CNXK_NIX_INL_IPSEC_IN_MAX_SPI \"ipsec_in_max_spi\"\n #define CNXK_INL_CPT_CHANNEL\t      \"inl_cpt_channel\"\n \n@@ -119,14 +120,14 @@ struct rte_security_ops cnxk_eth_sec_ops = {\n };\n \n static int\n-parse_ipsec_in_max_spi(const char *key, const char *value, void *extra_args)\n+parse_ipsec_in_spi_range(const char *key, const char *value, void *extra_args)\n {\n \tRTE_SET_USED(key);\n \tuint32_t val;\n \n-\tval = atoi(value);\n+\tval = strtoul(value, NULL, 0);\n \n-\t*(uint16_t *)extra_args = val;\n+\t*(uint32_t *)extra_args = val;\n \n \treturn 0;\n }\n@@ -169,6 +170,7 @@ nix_inl_parse_devargs(struct rte_devargs *devargs,\n \t\t      struct roc_nix_inl_dev *inl_dev)\n {\n \tuint32_t ipsec_in_max_spi = BIT(8) - 1;\n+\tuint32_t ipsec_in_min_spi = 0;\n \tstruct inl_cpt_channel cpt_channel;\n \tstruct rte_kvargs *kvlist;\n \tuint8_t selftest = 0;\n@@ -185,12 +187,15 @@ nix_inl_parse_devargs(struct rte_devargs *devargs,\n \trte_kvargs_process(kvlist, CNXK_NIX_INL_SELFTEST, &parse_selftest,\n \t\t\t   &selftest);\n \trte_kvargs_process(kvlist, CNXK_NIX_INL_IPSEC_IN_MAX_SPI,\n-\t\t\t   &parse_ipsec_in_max_spi, &ipsec_in_max_spi);\n+\t\t\t   &parse_ipsec_in_spi_range, &ipsec_in_max_spi);\n+\trte_kvargs_process(kvlist, CNXK_NIX_INL_IPSEC_IN_MIN_SPI,\n+\t\t\t   &parse_ipsec_in_spi_range, &ipsec_in_min_spi);\n \trte_kvargs_process(kvlist, CNXK_INL_CPT_CHANNEL, &parse_inl_cpt_channel,\n \t\t\t   &cpt_channel);\n \trte_kvargs_free(kvlist);\n \n null_devargs:\n+\tinl_dev->ipsec_in_min_spi = ipsec_in_min_spi;\n \tinl_dev->ipsec_in_max_spi = ipsec_in_max_spi;\n \tinl_dev->selftest = selftest;\n \tinl_dev->channel = cpt_channel.channel;\ndiff --git a/drivers/net/cnxk/cnxk_lookup.c b/drivers/net/cnxk/cnxk_lookup.c\nindex 4eb1ecf17d..f36fb8f27a 100644\n--- a/drivers/net/cnxk/cnxk_lookup.c\n+++ b/drivers/net/cnxk/cnxk_lookup.c\n@@ -337,7 +337,8 @@ cnxk_nix_lookup_mem_sa_base_set(struct cnxk_eth_dev *dev)\n \tif (!sa_base)\n \t\treturn -ENOTSUP;\n \n-\tsa_w = plt_log2_u32(dev->nix.ipsec_in_max_spi + 1);\n+\tsa_w = plt_log2_u32(dev->nix.ipsec_in_max_spi + 1 -\n+\t\t\t    dev->nix.ipsec_in_min_spi);\n \n \t/* Set SA Base in lookup mem */\n \tsa_base_tbl = (uintptr_t)lookup_mem;\n",
    "prefixes": [
        "4/5"
    ]
}