get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 132054,
    "url": "http://patches.dpdk.org/api/patches/132054/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230927183052.17347-23-syalavarthi@marvell.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": "<20230927183052.17347-23-syalavarthi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230927183052.17347-23-syalavarthi@marvell.com",
    "date": "2023-09-27T18:30:35",
    "name": "[v3,22/35] ml/cnxk: fetch layer info and load TVM model",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "e27cac9bc814c4a006b0b6ca644bce4be686370e",
    "submitter": {
        "id": 2480,
        "url": "http://patches.dpdk.org/api/people/2480/?format=api",
        "name": "Srikanth Yalavarthi",
        "email": "syalavarthi@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230927183052.17347-23-syalavarthi@marvell.com/mbox/",
    "series": [
        {
            "id": 29661,
            "url": "http://patches.dpdk.org/api/series/29661/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29661",
            "date": "2023-09-27T18:30:13",
            "name": "Implemenation of revised ml/cnxk driver",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/29661/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/132054/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/132054/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 4C31D4262B;\n\tWed, 27 Sep 2023 20:34:17 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 67DCB42D2A;\n\tWed, 27 Sep 2023 20:31:36 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 698F340DF6\n for <dev@dpdk.org>; Wed, 27 Sep 2023 20:31:12 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 38RCK790015701 for <dev@dpdk.org>; Wed, 27 Sep 2023 11:31:11 -0700",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3tcma5sftc-9\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n for <dev@dpdk.org>; Wed, 27 Sep 2023 11:31:11 -0700",
            "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.48;\n Wed, 27 Sep 2023 11:31:09 -0700",
            "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.48 via Frontend\n Transport; Wed, 27 Sep 2023 11:31:09 -0700",
            "from ml-host-33.caveonetworks.com (unknown [10.110.143.233])\n by maili.marvell.com (Postfix) with ESMTP id 94F2F3F70A5;\n Wed, 27 Sep 2023 11:31:09 -0700 (PDT)"
        ],
        "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=4xsbFSYQhQ7wLwRRZm7EzaICQtgtq4DqkLDAIgpTl1o=;\n b=HYiBuQs/MnI4BBjJm4x59bcmZi7dXJxeSNiP4+cct/gAAafVlN75W5KimEDSTN/A7G0m\n M8sPZ1ZbocRpXVh0JgwrPfYw3skx2vsAjAerP2jdK/2mDq0OZinJQOx09YYrMZnV/bFf\n fLsIKbqPQy/2oDkHWfjX4D4jyaRxQVg8HzRJueCWlBl9gFQHz5bPRzKKl/zov+lfZyjA\n lD2akEGjI8s0F4V7/3mDwk7uXwvqcxg4F/eLKLtnj/625/s84AZ/MUR1VZY8RBa0blB0\n YCxsW1BBS4MgupitMeTpgS3Zt/3H0L9WjorKEDtyz37PrmxgrA04dW2hosC3luCchuBo Eg==",
        "From": "Srikanth Yalavarthi <syalavarthi@marvell.com>",
        "To": "Srikanth Yalavarthi <syalavarthi@marvell.com>",
        "CC": "<dev@dpdk.org>, <sshankarnara@marvell.com>, <aprabhu@marvell.com>,\n <ptakkar@marvell.com>",
        "Subject": "[PATCH v3 22/35] ml/cnxk: fetch layer info and load TVM model",
        "Date": "Wed, 27 Sep 2023 11:30:35 -0700",
        "Message-ID": "<20230927183052.17347-23-syalavarthi@marvell.com>",
        "X-Mailer": "git-send-email 2.41.0",
        "In-Reply-To": "<20230927183052.17347-1-syalavarthi@marvell.com>",
        "References": "<20230830155927.3566-1-syalavarthi@marvell.com>\n <20230927183052.17347-1-syalavarthi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "4AWoooPDcwFYEnLP5iF3OQD8e0HggYLa",
        "X-Proofpoint-ORIG-GUID": "4AWoooPDcwFYEnLP5iF3OQD8e0HggYLa",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2023-09-27_12,2023-09-27_01,2023-05-22_02",
        "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": "Added support to fetch TVM model layer information and\nupdate internal structures based on the layer information\nSet callback functions for layer load and unload and\nenable model loading using TVMDP library. Added support\nto fetch full metadata after model load.\n\nSigned-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>\n---\n drivers/ml/cnxk/cn10k_ml_model.c | 11 +++++\n drivers/ml/cnxk/cn10k_ml_model.h |  2 +\n drivers/ml/cnxk/cn10k_ml_ops.c   |  7 ++-\n drivers/ml/cnxk/mvtvm_ml_model.c | 25 ++++++++++\n drivers/ml/cnxk/mvtvm_ml_model.h |  4 ++\n drivers/ml/cnxk/mvtvm_ml_ops.c   | 81 ++++++++++++++++++++++++++++++++\n drivers/ml/cnxk/mvtvm_ml_stubs.c | 10 ++++\n drivers/ml/cnxk/mvtvm_ml_stubs.h |  3 ++\n 8 files changed, 141 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/ml/cnxk/cn10k_ml_model.c b/drivers/ml/cnxk/cn10k_ml_model.c\nindex b765b4ada9..9a80adf0fc 100644\n--- a/drivers/ml/cnxk/cn10k_ml_model.c\n+++ b/drivers/ml/cnxk/cn10k_ml_model.c\n@@ -714,3 +714,14 @@ cn10k_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer\n \tcnxk_ml_print_line(fp, LINE_LEN);\n \tfprintf(fp, \"\\n\");\n }\n+\n+int\n+cn10k_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name, uint16_t *layer_id)\n+{\n+\tif (model->type == ML_CNXK_MODEL_TYPE_TVM)\n+\t\treturn mvtvm_ml_model_get_layer_id(model, layer_name, layer_id);\n+\n+\t*layer_id = 0;\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/ml/cnxk/cn10k_ml_model.h b/drivers/ml/cnxk/cn10k_ml_model.h\nindex 45f2ed5fcf..6744175cd5 100644\n--- a/drivers/ml/cnxk/cn10k_ml_model.h\n+++ b/drivers/ml/cnxk/cn10k_ml_model.h\n@@ -461,5 +461,7 @@ void cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_mode\n \t\t\t     struct cnxk_ml_io_info *io_info,\n \t\t\t     struct cn10k_ml_model_metadata *metadata);\n void cn10k_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer, FILE *fp);\n+int cn10k_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name,\n+\t\t\t\tuint16_t *layer_id);\n \n #endif /* _CN10K_ML_MODEL_H_ */\ndiff --git a/drivers/ml/cnxk/cn10k_ml_ops.c b/drivers/ml/cnxk/cn10k_ml_ops.c\nindex a471e98fbf..4191ccc840 100644\n--- a/drivers/ml/cnxk/cn10k_ml_ops.c\n+++ b/drivers/ml/cnxk/cn10k_ml_ops.c\n@@ -576,7 +576,7 @@ cn10k_ml_layer_load(void *device, uint16_t model_id, const char *layer_name, uin\n \tsize_t layer_xstats_size;\n \tuint8_t *base_dma_addr;\n \tuint16_t scratch_pages;\n-\tuint16_t layer_id = 0;\n+\tuint16_t layer_id;\n \tuint16_t wb_pages;\n \tuint64_t mz_size;\n \tuint16_t idx;\n@@ -584,7 +584,6 @@ cn10k_ml_layer_load(void *device, uint16_t model_id, const char *layer_name, uin\n \tint ret;\n \n \tPLT_SET_USED(size);\n-\tPLT_SET_USED(layer_name);\n \n \tcnxk_mldev = (struct cnxk_ml_dev *)device;\n \tif (cnxk_mldev == NULL) {\n@@ -598,6 +597,10 @@ cn10k_ml_layer_load(void *device, uint16_t model_id, const char *layer_name, uin\n \t\treturn -EINVAL;\n \t}\n \n+\tret = cn10k_ml_model_get_layer_id(model, layer_name, &layer_id);\n+\tif (ret != 0)\n+\t\treturn ret;\n+\n \tlayer = &model->layer[layer_id];\n \n \tret = cn10k_ml_model_metadata_check(buffer, size);\ndiff --git a/drivers/ml/cnxk/mvtvm_ml_model.c b/drivers/ml/cnxk/mvtvm_ml_model.c\nindex 4c9a080c05..8536fd8927 100644\n--- a/drivers/ml/cnxk/mvtvm_ml_model.c\n+++ b/drivers/ml/cnxk/mvtvm_ml_model.c\n@@ -110,3 +110,28 @@ mvtvm_ml_model_blob_parse(struct rte_ml_model_params *params, struct mvtvm_ml_mo\n \n \treturn -EINVAL;\n }\n+\n+int\n+mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name, uint16_t *layer_id)\n+{\n+\tuint16_t i;\n+\n+\tfor (i = 0; i < model->mvtvm.metadata.model.nb_layers; i++) {\n+\t\tif (strcmp(model->layer[i].name, layer_name) == 0)\n+\t\t\tbreak;\n+\t}\n+\n+\tif (i == model->mvtvm.metadata.model.nb_layers) {\n+\t\tplt_err(\"Invalid layer name: %s\", layer_name);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (model->layer[i].type != ML_CNXK_LAYER_TYPE_MRVL) {\n+\t\tplt_err(\"Invalid layer type, name: %s type: %d\", layer_name, model->layer[i].type);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t*layer_id = i;\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/ml/cnxk/mvtvm_ml_model.h b/drivers/ml/cnxk/mvtvm_ml_model.h\nindex b11b66f495..6cb2639876 100644\n--- a/drivers/ml/cnxk/mvtvm_ml_model.h\n+++ b/drivers/ml/cnxk/mvtvm_ml_model.h\n@@ -11,6 +11,8 @@\n \n #include \"cnxk_ml_io.h\"\n \n+struct cnxk_ml_model;\n+\n /* Maximum number of objects per model */\n #define ML_MVTVM_MODEL_OBJECT_MAX 3\n \n@@ -46,5 +48,7 @@ struct mvtvm_ml_model_data {\n enum cnxk_ml_model_type mvtvm_ml_model_type_get(struct rte_ml_model_params *params);\n int mvtvm_ml_model_blob_parse(struct rte_ml_model_params *params,\n \t\t\t      struct mvtvm_ml_model_object *object);\n+int mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name,\n+\t\t\t\tuint16_t *layer_id);\n \n #endif /* _MVTVM_ML_MODEL_H_ */\ndiff --git a/drivers/ml/cnxk/mvtvm_ml_ops.c b/drivers/ml/cnxk/mvtvm_ml_ops.c\nindex e2413b6b15..1fe0a04301 100644\n--- a/drivers/ml/cnxk/mvtvm_ml_ops.c\n+++ b/drivers/ml/cnxk/mvtvm_ml_ops.c\n@@ -49,9 +49,13 @@ mvtvm_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *\n \t\t    struct cnxk_ml_model *model)\n {\n \tstruct mvtvm_ml_model_object object[ML_MVTVM_MODEL_OBJECT_MAX];\n+\tstruct tvmrt_glow_callback *callback;\n \tchar str[RTE_MEMZONE_NAMESIZE];\n \tconst struct plt_memzone *mz;\n \tsize_t model_object_size = 0;\n+\tuint16_t nb_mrvl_layers;\n+\tuint16_t nb_llvm_layers;\n+\tuint8_t layer_id = 0;\n \tuint64_t mz_size = 0;\n \tint ret;\n \n@@ -99,5 +103,82 @@ mvtvm_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *\n \trte_memcpy(model->mvtvm.object.params.addr, object[2].buffer, object[2].size);\n \trte_free(object[2].buffer);\n \n+\t/* Get metadata - stage 1 */\n+\tret = tvmdp_model_metadata_get_stage1(model->mvtvm.object.json.addr,\n+\t\t\t\t\t      model->mvtvm.object.json.size,\n+\t\t\t\t\t      &model->mvtvm.metadata);\n+\tif (ret != 0) {\n+\t\tplt_err(\"TVMDP: Failed to parse metadata - stage 1, model_id = %u, error = %d\",\n+\t\t\tmodel->model_id, ret);\n+\t\tgoto error;\n+\t}\n+\n+\t/* Set model fields */\n+\tplt_strlcpy(model->name, model->mvtvm.metadata.model.name, TVMDP_NAME_STRLEN);\n+\tmodel->batch_size = 1;\n+\tmodel->nb_layers = model->mvtvm.metadata.model.nb_layers;\n+\n+\t/* Update layer info */\n+\tnb_mrvl_layers = 0;\n+\tnb_llvm_layers = 0;\n+\tfor (layer_id = 0; layer_id < model->mvtvm.metadata.model.nb_layers; layer_id++) {\n+\t\tstrncpy(model->layer[layer_id].name,\n+\t\t\tmodel->mvtvm.metadata.model.layer[layer_id].name, TVMDP_NAME_STRLEN);\n+\t\tif (strcmp(model->mvtvm.metadata.model.layer[layer_id].type, \"mrvl\") == 0 ||\n+\t\t    strcmp(model->mvtvm.metadata.model.layer[layer_id].type, \"MRVL\") == 0) {\n+\t\t\tmodel->layer[layer_id].type = ML_CNXK_LAYER_TYPE_MRVL;\n+\t\t\tnb_mrvl_layers++;\n+\t\t} else if (strcmp(model->mvtvm.metadata.model.layer[layer_id].type, \"llvm\") == 0 ||\n+\t\t\t   strcmp(model->mvtvm.metadata.model.layer[layer_id].type, \"LLVM\") == 0) {\n+\t\t\tmodel->layer[layer_id].type = ML_CNXK_LAYER_TYPE_LLVM;\n+\t\t\tnb_llvm_layers++;\n+\t\t}\n+\t}\n+\n+\tif ((nb_llvm_layers == 0) && (nb_mrvl_layers == 0)) {\n+\t\tplt_err(\"Invalid model, nb_llvm_layers = %u, nb_mrvl_layers = %u\", nb_llvm_layers,\n+\t\t\tnb_mrvl_layers);\n+\t\tgoto error;\n+\t}\n+\n+\t/* Set model subtype */\n+\tif ((nb_llvm_layers == 0) && (nb_mrvl_layers == 1))\n+\t\tmodel->subtype = ML_CNXK_MODEL_SUBTYPE_TVM_MRVL;\n+\telse if ((nb_llvm_layers > 0) && (nb_mrvl_layers == 0))\n+\t\tmodel->subtype = ML_CNXK_MODEL_SUBTYPE_TVM_LLVM;\n+\telse\n+\t\tmodel->subtype = ML_CNXK_MODEL_SUBTYPE_TVM_HYBRID;\n+\n+\t/* Set callback function array */\n+\tif (model->subtype != ML_CNXK_MODEL_SUBTYPE_TVM_LLVM) {\n+\t\tcallback = &model->mvtvm.cb;\n+\t\tcallback->tvmrt_glow_layer_load = cn10k_ml_layer_load;\n+\t\tcallback->tvmrt_glow_layer_unload = cn10k_ml_layer_unload;\n+\t} else {\n+\t\tcallback = NULL;\n+\t}\n+\n+\t/* Initialize model in TVMDP */\n+\tret = tvmdp_model_load(cnxk_mldev, model->model_id, (void *)(&model->mvtvm.object),\n+\t\t\t       callback);\n+\tif (ret != 0) {\n+\t\tplt_err(\"TVMDP: Model load failed, model_id = %u, error = %d\", model->model_id,\n+\t\t\tret);\n+\t\tgoto error;\n+\t}\n+\n+\t/* Get model metadata - stage 2 */\n+\tret = tvmdp_model_metadata_get_stage2(model->model_id, &model->mvtvm.metadata);\n+\tif (ret != 0) {\n+\t\tplt_err(\"TVMDP: Failed to get metadata, model_id = %u, error = %d\\n\",\n+\t\t\tmodel->model_id, ret);\n+\t\tgoto error;\n+\t}\n+\n \treturn 0;\n+\n+error:\n+\trte_memzone_free(mz);\n+\n+\treturn ret;\n }\ndiff --git a/drivers/ml/cnxk/mvtvm_ml_stubs.c b/drivers/ml/cnxk/mvtvm_ml_stubs.c\nindex 7f3b3abb2e..d621dbc897 100644\n--- a/drivers/ml/cnxk/mvtvm_ml_stubs.c\n+++ b/drivers/ml/cnxk/mvtvm_ml_stubs.c\n@@ -17,6 +17,16 @@ mvtvm_ml_model_type_get(struct rte_ml_model_params *params)\n \treturn ML_CNXK_MODEL_TYPE_UNKNOWN;\n }\n \n+int\n+mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name, uint16_t *layer_id)\n+{\n+\tRTE_SET_USED(model);\n+\tRTE_SET_USED(layer_name);\n+\tRTE_SET_USED(layer_id);\n+\n+\treturn -EINVAL;\n+}\n+\n int\n mvtvm_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_dev_config *conf)\n {\ndiff --git a/drivers/ml/cnxk/mvtvm_ml_stubs.h b/drivers/ml/cnxk/mvtvm_ml_stubs.h\nindex 4bb1772ef4..23fdfdc4cd 100644\n--- a/drivers/ml/cnxk/mvtvm_ml_stubs.h\n+++ b/drivers/ml/cnxk/mvtvm_ml_stubs.h\n@@ -16,4 +16,7 @@ int mvtvm_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev);\n int mvtvm_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *params,\n \t\t\tstruct cnxk_ml_model *model);\n \n+int mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name,\n+\t\t\t\tuint16_t *layer_id);\n+\n #endif /* _MVTVM_ML_STUBS_H_ */\n",
    "prefixes": [
        "v3",
        "22/35"
    ]
}