get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 97697,
    "url": "http://patches.dpdk.org/api/patches/97697/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210901142433.8444-13-venkatkumar.duvvuru@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": "<20210901142433.8444-13-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210901142433.8444-13-venkatkumar.duvvuru@broadcom.com",
    "date": "2021-09-01T14:24:31",
    "name": "[12/14] net/bnxt: sram manager shared session",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6c8a7212fcf6f7e1d4ebf19f0b23740500c70ed0",
    "submitter": {
        "id": 1635,
        "url": "http://patches.dpdk.org/api/people/1635/?format=api",
        "name": "Venkat Duvvuru",
        "email": "venkatkumar.duvvuru@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/20210901142433.8444-13-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 18604,
            "url": "http://patches.dpdk.org/api/series/18604/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=18604",
            "date": "2021-09-01T14:24:19",
            "name": "enhancements to host based flow table management",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/18604/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/97697/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/97697/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 9C264A0C45;\n\tWed,  1 Sep 2021 16:26:10 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 699B541193;\n\tWed,  1 Sep 2021 16:25:08 +0200 (CEST)",
            "from relay.smtp-ext.broadcom.com (lpdvsmtp11.broadcom.com\n [192.19.166.231])\n by mails.dpdk.org (Postfix) with ESMTP id E9642410DC\n for <dev@dpdk.org>; Wed,  1 Sep 2021 16:25:06 +0200 (CEST)",
            "from S60.dhcp.broadcom.net (unknown [10.123.66.170])\n (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n (No client certificate requested)\n by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id 80F372E5C1;\n Wed,  1 Sep 2021 07:25:05 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 80F372E5C1",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1630506306;\n bh=2/tFXuIvjkcoP5EvE84ErM+7lDxT97Ilw/gr3VFhZcs=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=GYYeL7phf0XtH4xcld0UeUjhQt1zlTBP2VSAGpvzGBPsTptGl9/e5LcDX4DYAkspg\n yuhC8lB52Dy+DJmiy3b/8WRGr5brwgGhHhuRjjZ7YAQDud3wWPxT22H1pwE7MM8ByX\n 2t4QyHvQ2gYPIGioA+INrj4prY1DLEld52ex+xS4=",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Farah Smith <farah.smith@broadcom.com>",
        "Date": "Wed,  1 Sep 2021 19:54:31 +0530",
        "Message-Id": "<20210901142433.8444-13-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210901142433.8444-1-venkatkumar.duvvuru@broadcom.com>",
        "References": "<20210901142433.8444-1-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 12/14] net/bnxt: sram manager shared session",
        "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: Farah Smith <farah.smith@broadcom.com>\n\nFix shared session support issues due to SRAM manager\nadditions.  Shared session does not support slices within\nRM blocks.  Calculate resources required without slices\nand determine base addresses using old methods for the\nshared session.\n\nSigned-off-by: Farah Smith <farah.smith@broadcom.com>\nReviewed-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nReviewed-by: Shahaji Bhosle <shahaji.bhosle@broadcom.com>\n---\n drivers/net/bnxt/tf_core/tf_em_internal.c |   5 +-\n drivers/net/bnxt/tf_core/tf_rm.c          | 134 +++++++++++++++++++---\n drivers/net/bnxt/tf_core/tf_tbl_sram.c    |  73 +++++++++---\n 3 files changed, 176 insertions(+), 36 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_core/tf_em_internal.c b/drivers/net/bnxt/tf_core/tf_em_internal.c\nindex 2d57595f17..67ba011eae 100644\n--- a/drivers/net/bnxt/tf_core/tf_em_internal.c\n+++ b/drivers/net/bnxt/tf_core/tf_em_internal.c\n@@ -326,8 +326,11 @@ tf_em_int_unbind(struct tf *tfp)\n \t\treturn rc;\n \n \tif (!tf_session_is_shared_session(tfs)) {\n-\t\tfor (i = 0; i < TF_DIR_MAX; i++)\n+\t\tfor (i = 0; i < TF_DIR_MAX; i++) {\n+\t\t\tif (tfs->em_pool[i] == NULL)\n+\t\t\t\tcontinue;\n \t\t\tdpool_free_all(tfs->em_pool[i]);\n+\t\t}\n \t}\n \n \trc = tf_session_get_db(tfp, TF_MODULE_TYPE_EM, &em_db_ptr);\ndiff --git a/drivers/net/bnxt/tf_core/tf_rm.c b/drivers/net/bnxt/tf_core/tf_rm.c\nindex 03c958a7d6..dd537aaece 100644\n--- a/drivers/net/bnxt/tf_core/tf_rm.c\n+++ b/drivers/net/bnxt/tf_core/tf_rm.c\n@@ -18,6 +18,9 @@\n #include \"tfp.h\"\n #include \"tf_msg.h\"\n \n+/* Logging defines */\n+#define TF_RM_DEBUG  0\n+\n /**\n  * Generic RM Element data type that an RM DB is build upon.\n  */\n@@ -207,6 +210,45 @@ tf_rm_adjust_index(struct tf_rm_element *db,\n \treturn rc;\n }\n \n+/**\n+ * Logs an array of found residual entries to the console.\n+ *\n+ * [in] dir\n+ *   Receive or transmit direction\n+ *\n+ * [in] module\n+ *   Type of Device Module\n+ *\n+ * [in] count\n+ *   Number of entries in the residual array\n+ *\n+ * [in] residuals\n+ *   Pointer to an array of residual entries. Array is index same as\n+ *   the DB in which this function is used. Each entry holds residual\n+ *   value for that entry.\n+ */\n+#if (TF_RM_DEBUG == 1)\n+static void\n+tf_rm_log_residuals(enum tf_dir dir,\n+\t\t    enum tf_module_type module,\n+\t\t    uint16_t count,\n+\t\t    uint16_t *residuals)\n+{\n+\tint i;\n+\n+\t/* Walk the residual array and log the types that wasn't\n+\t * cleaned up to the console.\n+\t */\n+\tfor (i = 0; i < count; i++) {\n+\t\tif (residuals[i] != 0)\n+\t\t\tTFP_DRV_LOG(INFO,\n+\t\t\t\t\"%s, %s was not cleaned up, %d outstanding\\n\",\n+\t\t\t\ttf_dir_2_str(dir),\n+\t\t\t\ttf_module_subtype_2_str(module, i),\n+\t\t\t\tresiduals[i]);\n+\t}\n+}\n+#endif /* TF_RM_DEBUG == 1 */\n /**\n  * Performs a check of the passed in DB for any lingering elements. If\n  * a resource type was found to not have been cleaned up by the caller\n@@ -322,6 +364,12 @@ tf_rm_check_residuals(struct tf_rm_new_db *rm_db,\n \t\t*resv_size = found;\n \t}\n \n+#if (TF_RM_DEBUG == 1)\n+\ttf_rm_log_residuals(rm_db->dir,\n+\t\t\t    rm_db->module,\n+\t\t\t    rm_db->num_entries,\n+\t\t\t    residuals);\n+#endif\n \ttfp_free((void *)residuals);\n \t*resv = local_resv;\n \n@@ -367,7 +415,8 @@ tf_rm_update_parent_reservations(struct tf *tfp,\n \t\t\t\t struct tf_rm_element_cfg *cfg,\n \t\t\t\t uint16_t *alloc_cnt,\n \t\t\t\t uint16_t num_elements,\n-\t\t\t\t uint16_t *req_cnt)\n+\t\t\t\t uint16_t *req_cnt,\n+\t\t\t\t bool shared_session)\n {\n \tint parent, child;\n \tconst char *type_str;\n@@ -378,18 +427,28 @@ tf_rm_update_parent_reservations(struct tf *tfp,\n \n \t\t/* If I am a parent */\n \t\tif (cfg[parent].cfg_type == TF_RM_ELEM_CFG_HCAPI_BA_PARENT) {\n-\t\t\t/* start with my own count */\n-\t\t\tRTE_ASSERT(cfg[parent].slices);\n-\t\t\tcombined_cnt =\n-\t\t\t\talloc_cnt[parent] / cfg[parent].slices;\n+\t\t\tuint8_t p_slices = 1;\n+\n+\t\t\t/* Shared session doesn't support slices */\n+\t\t\tif (!shared_session)\n+\t\t\t\tp_slices = cfg[parent].slices;\n+\n+\t\t\tRTE_ASSERT(p_slices);\n \n-\t\t\tif (alloc_cnt[parent] % cfg[parent].slices)\n+\t\t\tcombined_cnt = alloc_cnt[parent] / p_slices;\n+\n+\t\t\tif (alloc_cnt[parent] % p_slices)\n \t\t\t\tcombined_cnt++;\n \n \t\t\tif (alloc_cnt[parent]) {\n \t\t\t\tdev->ops->tf_dev_get_resource_str(tfp,\n \t\t\t\t\t\t\t cfg[parent].hcapi_type,\n \t\t\t\t\t\t\t &type_str);\n+#if (TF_RM_DEBUG == 1)\n+\t\t\t\tprintf(\"%s:%s cnt(%d) slices(%d)\\n\",\n+\t\t\t\t       type_str, tf_tbl_type_2_str(parent),\n+\t\t\t\t       alloc_cnt[parent], p_slices);\n+#endif /* (TF_RM_DEBUG == 1) */\n \t\t\t}\n \n \t\t\t/* Search again through all the elements */\n@@ -399,20 +458,31 @@ tf_rm_update_parent_reservations(struct tf *tfp,\n \t\t\t\t    TF_RM_ELEM_CFG_HCAPI_BA_CHILD &&\n \t\t\t\t    cfg[child].parent_subtype == parent &&\n \t\t\t\t    alloc_cnt[child]) {\n+\t\t\t\t\tuint8_t c_slices = 1;\n \t\t\t\t\tuint16_t cnt = 0;\n-\t\t\t\t\tRTE_ASSERT(cfg[child].slices);\n+\n+\t\t\t\t\tif (!shared_session)\n+\t\t\t\t\t\tc_slices = cfg[child].slices;\n+\n+\t\t\t\t\tRTE_ASSERT(c_slices);\n \n \t\t\t\t\tdev->ops->tf_dev_get_resource_str(tfp,\n \t\t\t\t\t\t\t  cfg[child].hcapi_type,\n \t\t\t\t\t\t\t   &type_str);\n+#if (TF_RM_DEBUG == 1)\n+\t\t\t\t\tprintf(\"%s:%s cnt(%d) slices(%d)\\n\",\n+\t\t\t\t\t       type_str,\n+\t\t\t\t\t       tf_tbl_type_2_str(child),\n+\t\t\t\t\t       alloc_cnt[child],\n+\t\t\t\t\t       c_slices);\n+#endif /* (TF_RM_DEBUG == 1) */\n \t\t\t\t\t/* Increment the parents combined count\n \t\t\t\t\t * with each child's count adjusted for\n-\t\t\t\t\t * number of slices per RM allocated item.\n+\t\t\t\t\t * number of slices per RM alloc item.\n \t\t\t\t\t */\n-\t\t\t\t\tcnt =\n-\t\t\t\t\t alloc_cnt[child] / cfg[child].slices;\n+\t\t\t\t\tcnt = alloc_cnt[child] / c_slices;\n \n-\t\t\t\t\tif (alloc_cnt[child] % cfg[child].slices)\n+\t\t\t\t\tif (alloc_cnt[child] % c_slices)\n \t\t\t\t\t\tcnt++;\n \n \t\t\t\t\tcombined_cnt += cnt;\n@@ -422,6 +492,10 @@ tf_rm_update_parent_reservations(struct tf *tfp,\n \t\t\t}\n \t\t\t/* Save the parent count to be requested */\n \t\t\treq_cnt[parent] = combined_cnt;\n+#if (TF_RM_DEBUG == 1)\n+\t\t\tprintf(\"%s calculated total:%d\\n\\n\",\n+\t\t\t       type_str, req_cnt[parent]);\n+#endif /* (TF_RM_DEBUG == 1) */\n \t\t}\n \t}\n \treturn 0;\n@@ -444,6 +518,7 @@ tf_rm_create_db(struct tf *tfp,\n \tstruct tf_rm_new_db *rm_db;\n \tstruct tf_rm_element *db;\n \tuint32_t pool_size;\n+\tbool shared_session = 0;\n \n \tTF_CHECK_PARMS2(tfp, parms);\n \n@@ -460,7 +535,6 @@ tf_rm_create_db(struct tf *tfp,\n \t/* Need device max number of elements for the RM QCAPS */\n \trc = dev->ops->tf_dev_get_max_types(tfp, &max_types);\n \n-\n \t/* Allocate memory for RM QCAPS request */\n \tcparms.nitems = max_types;\n \tcparms.size = sizeof(struct tf_rm_resc_req_entry);\n@@ -496,12 +570,15 @@ tf_rm_create_db(struct tf *tfp,\n \ttfp_memcpy(req_cnt, parms->alloc_cnt,\n \t\t   parms->num_elements * sizeof(uint16_t));\n \n+\tshared_session = tf_session_is_shared_session(tfs);\n+\n \t/* Update the req_cnt based upon the element configuration\n \t */\n \ttf_rm_update_parent_reservations(tfp, dev, parms->cfg,\n \t\t\t\t\t parms->alloc_cnt,\n \t\t\t\t\t parms->num_elements,\n-\t\t\t\t\t req_cnt);\n+\t\t\t\t\t req_cnt,\n+\t\t\t\t\t shared_session);\n \n \t/* Process capabilities against DB requirements. However, as a\n \t * DB can hold elements that are not HCAPI we can reduce the\n@@ -517,6 +594,12 @@ tf_rm_create_db(struct tf *tfp,\n \t\t\t\t       &hcapi_items);\n \n \tif (hcapi_items == 0) {\n+#if (TF_RM_DEBUG == 1)\n+\t\tTFP_DRV_LOG(INFO,\n+\t\t\t\"%s: module: %s Empty RM DB create request\\n\",\n+\t\t\ttf_dir_2_str(parms->dir),\n+\t\t\ttf_module_2_str(parms->module));\n+#endif\n \t\tparms->rm_db = NULL;\n \t\treturn -ENOMEM;\n \t}\n@@ -565,11 +648,11 @@ tf_rm_create_db(struct tf *tfp,\n \t\t\t\t\t\t\t      hcapi_type,\n \t\t\t\t\t\t\t      &type_str);\n \t\t\t\tTFP_DRV_LOG(ERR,\n-\t\t\t\t\t    \"Failure, %s:%d:%s req:%d avail:%d\\n\",\n-\t\t\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t\t\t    hcapi_type, type_str,\n-\t\t\t\t\t    req_cnt[i],\n-\t\t\t\t\t    query[hcapi_type].max);\n+\t\t\t\t\t\"Failure, %s:%d:%s req:%d avail:%d\\n\",\n+\t\t\t\t\ttf_dir_2_str(parms->dir),\n+\t\t\t\t\thcapi_type, type_str,\n+\t\t\t\t\treq_cnt[i],\n+\t\t\t\t\tquery[hcapi_type].max);\n \t\t\t\treturn -EINVAL;\n \t\t\t}\n \t\t}\n@@ -689,6 +772,13 @@ tf_rm_create_db(struct tf *tfp,\n \trm_db->module = parms->module;\n \t*parms->rm_db = (void *)rm_db;\n \n+#if (TF_RM_DEBUG == 1)\n+\n+\tprintf(\"%s: module:%s\\n\",\n+\t       tf_dir_2_str(parms->dir),\n+\t       tf_module_2_str(parms->module));\n+#endif /* (TF_RM_DEBUG == 1) */\n+\n \ttfp_free((void *)req);\n \ttfp_free((void *)resv);\n \ttfp_free((void *)req_cnt);\n@@ -922,6 +1012,13 @@ tf_rm_create_db_no_reservation(struct tf *tfp,\n \trm_db->module = parms->module;\n \t*parms->rm_db = (void *)rm_db;\n \n+#if (TF_RM_DEBUG == 1)\n+\n+\tprintf(\"%s: module:%s\\n\",\n+\t       tf_dir_2_str(parms->dir),\n+\t       tf_module_2_str(parms->module));\n+#endif /* (TF_RM_DEBUG == 1) */\n+\n \ttfp_free((void *)req);\n \ttfp_free((void *)resv);\n \ttfp_free((void *)req_cnt);\n@@ -1185,7 +1282,6 @@ tf_rm_is_allocated(struct tf_rm_is_allocated_parms *parms)\n \n \tcfg_type = rm_db->db[parms->subtype].cfg_type;\n \n-\n \t/* Bail out if not controlled by RM */\n \tif (cfg_type != TF_RM_ELEM_CFG_HCAPI_BA &&\n \t    cfg_type != TF_RM_ELEM_CFG_HCAPI_BA_PARENT &&\ndiff --git a/drivers/net/bnxt/tf_core/tf_tbl_sram.c b/drivers/net/bnxt/tf_core/tf_tbl_sram.c\nindex d7727f7a11..167078a8c6 100644\n--- a/drivers/net/bnxt/tf_core/tf_tbl_sram.c\n+++ b/drivers/net/bnxt/tf_core/tf_tbl_sram.c\n@@ -21,6 +21,10 @@\n \n #define DBG_SRAM 0\n \n+#define TF_TBL_PTR_TO_RM(new_idx, idx, base, shift) {\t\t\\\n+\t\t*(new_idx) = (((idx) >> (shift)) - (base));\t\\\n+}\n+\n /**\n  * tf_sram_tbl_get_info_parms parameter definition\n  */\n@@ -394,6 +398,7 @@ tf_tbl_sram_set(struct tf *tfp,\n {\n \tint rc;\n \tbool allocated = 0;\n+\tint rallocated = 0;\n \tuint16_t hcapi_type;\n \tstruct tf_rm_get_hcapi_parms hparms = { 0 };\n \tstruct tf_session *tfs;\n@@ -402,7 +407,9 @@ tf_tbl_sram_set(struct tf *tfp,\n \tvoid *tbl_db_ptr = NULL;\n \tstruct tf_tbl_sram_get_info_parms iparms = { 0 };\n \tstruct tf_sram_mgr_is_allocated_parms aparms = { 0 };\n+\tstruct tf_rm_is_allocated_parms raparms = { 0 };\n \tvoid *sram_handle = NULL;\n+\tuint16_t base = 0, shift = 0;\n \n \n \tTF_CHECK_PARMS3(tfp, parms, parms->data);\n@@ -442,23 +449,57 @@ tf_tbl_sram_set(struct tf *tfp,\n \t\treturn rc;\n \t}\n \n-\taparms.sram_offset = parms->idx;\n-\taparms.slice_size = iparms.slice_size;\n-\taparms.bank_id = iparms.bank_id;\n-\taparms.dir = parms->dir;\n-\taparms.is_allocated = &allocated;\n-\trc = tf_sram_mgr_is_allocated(sram_handle, &aparms);\n-\tif (rc || !allocated) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Entry not allocated:%s idx(%d):(%s)\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    tf_tbl_type_2_str(parms->type),\n-\t\t\t    parms->idx,\n-\t\t\t    strerror(-rc));\n-\t\trc = -ENOMEM;\n-\t\treturn rc;\n+\tif (tf_session_is_shared_session(tfs)) {\n+\t\t/* Only get table info if required for the device */\n+\t\tif (dev->ops->tf_dev_get_tbl_info) {\n+\t\t\trc = dev->ops->tf_dev_get_tbl_info(tfp,\n+\t\t\t\t\t\t\t   tbl_db->tbl_db[parms->dir],\n+\t\t\t\t\t\t\t   parms->type,\n+\t\t\t\t\t\t\t   &base,\n+\t\t\t\t\t\t\t   &shift);\n+\t\t\tif (rc) {\n+\t\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t\t    \"%s: Failed to get table info:%d\\n\",\n+\t\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t\t    parms->type);\n+\t\t\t\treturn rc;\n+\t\t\t}\n+\t\t}\n+\t\tTF_TBL_PTR_TO_RM(&raparms.index, parms->idx, base, shift);\n+\n+\t\traparms.rm_db = tbl_db->tbl_db[parms->dir];\n+\t\traparms.subtype = parms->type;\n+\t\traparms.allocated = &rallocated;\n+\t\trc = tf_rm_is_allocated(&raparms);\n+\t\tif (rc)\n+\t\t\treturn rc;\n+\n+\t\tif (rallocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t   \"%s, Invalid or not allocated index, type:%s, idx:%d\\n\",\n+\t\t\t   tf_dir_2_str(parms->dir),\n+\t\t\t   tf_tbl_type_2_str(parms->type),\n+\t\t\t   parms->idx);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else {\n+\t\taparms.sram_offset = parms->idx;\n+\t\taparms.slice_size = iparms.slice_size;\n+\t\taparms.bank_id = iparms.bank_id;\n+\t\taparms.dir = parms->dir;\n+\t\taparms.is_allocated = &allocated;\n+\t\trc = tf_sram_mgr_is_allocated(sram_handle, &aparms);\n+\t\tif (rc || !allocated) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Entry not allocated:%s idx(%d):(%s)\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    tf_tbl_type_2_str(parms->type),\n+\t\t\t\t    parms->idx,\n+\t\t\t\t    strerror(-rc));\n+\t\t\trc = -ENOMEM;\n+\t\t\treturn rc;\n+\t\t}\n \t}\n-\n \t/* Set the entry */\n \thparms.rm_db = tbl_db->tbl_db[parms->dir];\n \thparms.subtype = parms->type;\n",
    "prefixes": [
        "12/14"
    ]
}