get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133396,
    "url": "http://patches.dpdk.org/api/patches/133396/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231026124347.22477-14-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": "<20231026124347.22477-14-syalavarthi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231026124347.22477-14-syalavarthi@marvell.com",
    "date": "2023-10-26T12:43:22",
    "name": "[v9,13/34] ml/cnxk: update device debug functions",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "48efb60194caf321bd5da4ef2658f2d7a6df295d",
    "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/20231026124347.22477-14-syalavarthi@marvell.com/mbox/",
    "series": [
        {
            "id": 30002,
            "url": "http://patches.dpdk.org/api/series/30002/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30002",
            "date": "2023-10-26T12:43:09",
            "name": "Implementation of revised ml/cnxk driver",
            "version": 9,
            "mbox": "http://patches.dpdk.org/series/30002/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/133396/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/133396/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 C56B943208;\n\tThu, 26 Oct 2023 14:45:42 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 38F3842E1B;\n\tThu, 26 Oct 2023 14:44:10 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 041344069F\n for <dev@dpdk.org>; Thu, 26 Oct 2023 14:43:58 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 39QAKqcU006841 for <dev@dpdk.org>; Thu, 26 Oct 2023 05:43:58 -0700",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3txcsr25pj-6\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n for <dev@dpdk.org>; Thu, 26 Oct 2023 05:43:58 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Thu, 26 Oct 2023 05:43:56 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Thu, 26 Oct 2023 05:43:56 -0700",
            "from ml-host-33.caveonetworks.com (unknown [10.110.143.233])\n by maili.marvell.com (Postfix) with ESMTP id F0C2A3F7097;\n Thu, 26 Oct 2023 05:43:55 -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=gdMnm8TeZjfwpA7kmjNfvFme1Th2v85PYq4qd3DJ/KA=;\n b=WhMfnzmWg0L3DFS0l3k53nTE5IpaN3iDLRCyWdNn3KmDlAEP00F3sqhrqh8smyh0XLri\n stoo+/VLjBQDq+gmin0rUxJ8yYcrkWhdti0QrtDpaxo/Z/pKje0h7//mzmt2rrMah6u6\n 8IAiO4I8RCD4PdPn38/iDQx5hrziB4oxESEhomeEy7TZmgkXFLhvCliikVAQD+URp6lA\n 6r3iG08uBQdMPe2t22KUGaWX0qpBzc16wDAwBb8T62/SQTSU+EGUZDYP3iMsKEa5V8vQ\n KJvyIkLh1rGI377l/A305Ft7+ShSSmJ2wjkVMtknyYWrmbKfWiJQ5Ex8xNz/CWuJTYJf dg==",
        "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 v9 13/34] ml/cnxk: update device debug functions",
        "Date": "Thu, 26 Oct 2023 05:43:22 -0700",
        "Message-ID": "<20231026124347.22477-14-syalavarthi@marvell.com>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20231026124347.22477-1-syalavarthi@marvell.com>",
        "References": "<20230830155927.3566-1-syalavarthi@marvell.com>\n <20231026124347.22477-1-syalavarthi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "0fmKsezJnjKtpg-f5IYdK3wU5khWjtXJ",
        "X-Proofpoint-GUID": "0fmKsezJnjKtpg-f5IYdK3wU5khWjtXJ",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2023-10-26_10,2023-10-26_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 cnxk wrapper for device dump and selftest debug\nfunctions.\n\nSigned-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>\n---\n drivers/ml/cnxk/cn10k_ml_model.c | 118 +++++++++++++++++++++\n drivers/ml/cnxk/cn10k_ml_model.h |   1 +\n drivers/ml/cnxk/cn10k_ml_ocm.c   |   8 +-\n drivers/ml/cnxk/cn10k_ml_ocm.h   |   2 +-\n drivers/ml/cnxk/cn10k_ml_ops.c   | 176 ++-----------------------------\n drivers/ml/cnxk/cn10k_ml_ops.h   |   4 +-\n drivers/ml/cnxk/cnxk_ml_model.c  |  33 ++++++\n drivers/ml/cnxk/cnxk_ml_model.h  |   2 +\n drivers/ml/cnxk/cnxk_ml_ops.c    |  39 ++++++-\n drivers/ml/cnxk/cnxk_ml_utils.c  |  15 +++\n drivers/ml/cnxk/cnxk_ml_utils.h  |  17 +++\n drivers/ml/cnxk/meson.build      |   1 +\n 12 files changed, 235 insertions(+), 181 deletions(-)\n create mode 100644 drivers/ml/cnxk/cnxk_ml_utils.c\n create mode 100644 drivers/ml/cnxk/cnxk_ml_utils.h",
    "diff": "diff --git a/drivers/ml/cnxk/cn10k_ml_model.c b/drivers/ml/cnxk/cn10k_ml_model.c\nindex 48d70027ca..af9d5a666f 100644\n--- a/drivers/ml/cnxk/cn10k_ml_model.c\n+++ b/drivers/ml/cnxk/cn10k_ml_model.c\n@@ -11,6 +11,7 @@\n #include \"cnxk_ml_dev.h\"\n #include \"cnxk_ml_model.h\"\n #include \"cnxk_ml_ops.h\"\n+#include \"cnxk_ml_utils.h\"\n \n static enum rte_ml_io_type\n cn10k_ml_io_type_map(uint8_t type)\n@@ -598,3 +599,120 @@ cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo\n \t\t\t\t rte_ml_io_type_size_get(io_info->output[i].qtype);\n \t}\n }\n+\n+void\n+cn10k_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer, FILE *fp)\n+{\n+\tstruct cn10k_ml_ocm *ocm;\n+\tchar str[STR_LEN];\n+\tuint8_t i;\n+\tuint8_t j;\n+\n+\tocm = &cnxk_mldev->cn10k_mldev.ocm;\n+\n+\t/* Print debug info */\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \" Layer Information (Layer ID: %u, Name: %s)\\n\",\n+\t\tcnxk_mldev->index_map[layer->index].layer_id, layer->name);\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"index\", layer->index);\n+\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"name\", layer->name);\n+\tfprintf(fp, \"%*s : %u.%u.%u.%u\\n\", FIELD_LEN, \"version\",\n+\t\tlayer->glow.metadata.model.version[0], layer->glow.metadata.model.version[1],\n+\t\tlayer->glow.metadata.model.version[2], layer->glow.metadata.model.version[3]);\n+\tfprintf(fp, \"%*s : 0x%016lx\\n\", FIELD_LEN, \"layer\", PLT_U64_CAST(layer));\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"batch_size\", layer->batch_size);\n+\n+\t/* Print model state */\n+\tif (layer->state == ML_CNXK_LAYER_STATE_LOADED)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"loaded\");\n+\tif (layer->state == ML_CNXK_LAYER_STATE_JOB_ACTIVE)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"job_active\");\n+\tif (layer->state == ML_CNXK_LAYER_STATE_STARTED)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"started\");\n+\n+\t/* Print OCM status */\n+\tfprintf(fp, \"%*s : %\" PRIu64 \" bytes\\n\", FIELD_LEN, \"wb_size\",\n+\t\tlayer->glow.metadata.model.ocm_wb_range_end -\n+\t\t\tlayer->glow.metadata.model.ocm_wb_range_start + 1);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"wb_pages\", layer->glow.ocm_map.wb_pages);\n+\tfprintf(fp, \"%*s : %\" PRIu64 \" bytes\\n\", FIELD_LEN, \"scratch_size\",\n+\t\tocm->size_per_tile - layer->glow.metadata.model.ocm_tmp_range_floor);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"scratch_pages\", layer->glow.ocm_map.scratch_pages);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_tiles\",\n+\t\tlayer->glow.metadata.model.tile_end - layer->glow.metadata.model.tile_start + 1);\n+\n+\tif (layer->state == ML_CNXK_LAYER_STATE_STARTED) {\n+\t\tfprintf(fp, \"%*s : 0x%0*\" PRIx64 \"\\n\", FIELD_LEN, \"tilemask\",\n+\t\t\tML_CN10K_OCM_NUMTILES / 4, layer->glow.ocm_map.tilemask);\n+\t\tfprintf(fp, \"%*s : 0x%\" PRIx64 \"\\n\", FIELD_LEN, \"ocm_wb_start\",\n+\t\t\tlayer->glow.ocm_map.wb_page_start * ocm->page_size);\n+\t}\n+\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_inputs\", layer->glow.metadata.model.num_input);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_outputs\", layer->glow.metadata.model.num_output);\n+\tfprintf(fp, \"\\n\");\n+\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"%8s  %16s  %12s  %18s\\n\", \"input\", \"input_name\", \"input_type\",\n+\t\t\"model_input_type\");\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfor (i = 0; i < layer->glow.metadata.model.num_input; i++) {\n+\t\tif (i < MRVL_ML_NUM_INPUT_OUTPUT_1) {\n+\t\t\tfprintf(fp, \"%8u  \", i);\n+\t\t\tfprintf(fp, \"%*s  \", 16, layer->glow.metadata.input1[i].input_name);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.input1[i].input_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 12, str);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.input1[i].model_input_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 18, str);\n+\t\t\tfprintf(fp, \"\\n\");\n+\t\t} else {\n+\t\t\tj = i - MRVL_ML_NUM_INPUT_OUTPUT_1;\n+\n+\t\t\tfprintf(fp, \"%8u  \", i);\n+\t\t\tfprintf(fp, \"%*s  \", 16, layer->glow.metadata.input2[j].input_name);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.input2[j].input_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 12, str);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.input2[j].model_input_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 18, str);\n+\t\t\tfprintf(fp, \"\\n\");\n+\t\t}\n+\t}\n+\tfprintf(fp, \"\\n\");\n+\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"%8s  %16s  %12s  %18s\\n\", \"output\", \"output_name\", \"output_type\",\n+\t\t\"model_output_type\");\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfor (i = 0; i < layer->glow.metadata.model.num_output; i++) {\n+\t\tif (i < MRVL_ML_NUM_INPUT_OUTPUT_1) {\n+\t\t\tfprintf(fp, \"%8u  \", i);\n+\t\t\tfprintf(fp, \"%*s  \", 16, layer->glow.metadata.output1[i].output_name);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.output1[i].output_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 12, str);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.output1[i].model_output_type,\n+\t\t\t\t\t      str, STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 18, str);\n+\t\t\tfprintf(fp, \"\\n\");\n+\t\t} else {\n+\t\t\tj = i - MRVL_ML_NUM_INPUT_OUTPUT_1;\n+\t\t\tfprintf(fp, \"%8u  \", i);\n+\t\t\tfprintf(fp, \"%*s  \", 16, layer->glow.metadata.output2[j].output_name);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.output2[j].output_type, str,\n+\t\t\t\t\t      STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 12, str);\n+\t\t\trte_ml_io_type_to_str(layer->glow.metadata.output2[j].model_output_type,\n+\t\t\t\t\t      str, STR_LEN);\n+\t\t\tfprintf(fp, \"%*s  \", 18, str);\n+\t\t\tfprintf(fp, \"\\n\");\n+\t\t}\n+\t}\n+\tfprintf(fp, \"\\n\");\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"\\n\");\n+}\ndiff --git a/drivers/ml/cnxk/cn10k_ml_model.h b/drivers/ml/cnxk/cn10k_ml_model.h\nindex b891c9d627..45f2ed5fcf 100644\n--- a/drivers/ml/cnxk/cn10k_ml_model.h\n+++ b/drivers/ml/cnxk/cn10k_ml_model.h\n@@ -460,5 +460,6 @@ int cn10k_ml_model_ocm_pages_count(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_m\n void cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model,\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 \n #endif /* _CN10K_ML_MODEL_H_ */\ndiff --git a/drivers/ml/cnxk/cn10k_ml_ocm.c b/drivers/ml/cnxk/cn10k_ml_ocm.c\nindex 2197e5e0ed..dc315cce10 100644\n--- a/drivers/ml/cnxk/cn10k_ml_ocm.c\n+++ b/drivers/ml/cnxk/cn10k_ml_ocm.c\n@@ -481,19 +481,15 @@ cn10k_ml_ocm_pagemask_to_str(struct cn10k_ml_ocm_tile_info *tile_info, uint16_t\n }\n \n void\n-cn10k_ml_ocm_print(struct rte_ml_dev *dev, FILE *fp)\n+cn10k_ml_ocm_print(struct cnxk_ml_dev *cnxk_mldev, FILE *fp)\n {\n-\tstruct cn10k_ml_dev *cn10k_mldev;\n-\tstruct cnxk_ml_dev *cnxk_mldev;\n \tstruct cn10k_ml_ocm *ocm;\n \tuint8_t tile_id;\n \tuint8_t word_id;\n \tint wb_pages;\n \tchar *str;\n \n-\tcnxk_mldev = dev->data->dev_private;\n-\tcn10k_mldev = &cnxk_mldev->cn10k_mldev;\n-\tocm = &cn10k_mldev->ocm;\n+\tocm = &cnxk_mldev->cn10k_mldev.ocm;\n \n \t/* Nibbles + prefix '0x' */\n \tstr = rte_zmalloc(\"ocm_mask_str\", ocm->num_pages / 4 + 2, RTE_CACHE_LINE_SIZE);\ndiff --git a/drivers/ml/cnxk/cn10k_ml_ocm.h b/drivers/ml/cnxk/cn10k_ml_ocm.h\nindex 97b723a56a..bf8944f8ee 100644\n--- a/drivers/ml/cnxk/cn10k_ml_ocm.h\n+++ b/drivers/ml/cnxk/cn10k_ml_ocm.h\n@@ -83,6 +83,6 @@ void cn10k_ml_ocm_reserve_pages(struct cnxk_ml_dev *cnxk_mldev, uint16_t model_i\n \t\t\t\tuint16_t layer_id, uint64_t tilemask, int wb_page_start,\n \t\t\t\tuint16_t wb_pages, uint16_t scratch_pages);\n void cn10k_ml_ocm_free_pages(struct cnxk_ml_dev *cnxk_mldev, uint16_t model_id, uint16_t layer_id);\n-void cn10k_ml_ocm_print(struct rte_ml_dev *dev, FILE *fp);\n+void cn10k_ml_ocm_print(struct cnxk_ml_dev *cnxk_mldev, FILE *fp);\n \n #endif /* _CN10K_ML_OCM_H_ */\ndiff --git a/drivers/ml/cnxk/cn10k_ml_ops.c b/drivers/ml/cnxk/cn10k_ml_ops.c\nindex c68e6c620c..a56d002d4c 100644\n--- a/drivers/ml/cnxk/cn10k_ml_ops.c\n+++ b/drivers/ml/cnxk/cn10k_ml_ops.c\n@@ -18,11 +18,6 @@\n /* ML layer macros */\n #define CN10K_ML_LAYER_MEMZONE_NAME \"ml_cn10k_layer_mz\"\n \n-/* Debug print width */\n-#define STR_LEN\t  12\n-#define FIELD_LEN 16\n-#define LINE_LEN  90\n-\n /* ML Job descriptor flags */\n #define ML_FLAGS_POLL_COMPL BIT(0)\n #define ML_FLAGS_SSO_COMPL  BIT(1)\n@@ -70,16 +65,6 @@ static const struct cn10k_ml_stype_db_driver {\n \t{ML_DRIVER_ERR_FW_ERROR, \"UNKNOWN FIRMWARE ERROR\"},\n };\n \n-static void\n-print_line(FILE *fp, int len)\n-{\n-\tint i;\n-\n-\tfor (i = 0; i < len; i++)\n-\t\tfprintf(fp, \"-\");\n-\tfprintf(fp, \"\\n\");\n-}\n-\n static inline void\n cn10k_ml_set_poll_addr(struct cnxk_ml_req *req)\n {\n@@ -113,140 +98,6 @@ cn10k_ml_qp_initialize(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_qp *qp)\n \t}\n }\n \n-static void\n-cn10k_ml_model_print(struct rte_ml_dev *dev, uint16_t model_id, FILE *fp)\n-{\n-\tstruct cn10k_ml_dev *cn10k_mldev;\n-\tstruct cnxk_ml_dev *cnxk_mldev;\n-\tstruct cnxk_ml_model *model;\n-\tstruct cn10k_ml_ocm *ocm;\n-\tchar str[STR_LEN];\n-\tuint8_t i;\n-\tuint8_t j;\n-\n-\tcnxk_mldev = dev->data->dev_private;\n-\tcn10k_mldev = &cnxk_mldev->cn10k_mldev;\n-\tocm = &cn10k_mldev->ocm;\n-\tmodel = dev->data->models[model_id];\n-\n-\t/* Print debug info */\n-\tprint_line(fp, LINE_LEN);\n-\tfprintf(fp, \" Model Information (%s)\\n\", model->glow.metadata.model.name);\n-\tprint_line(fp, LINE_LEN);\n-\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"name\", model->glow.metadata.model.name);\n-\tfprintf(fp, \"%*s : %u.%u.%u.%u\\n\", FIELD_LEN, \"version\",\n-\t\tmodel->glow.metadata.model.version[0], model->glow.metadata.model.version[1],\n-\t\tmodel->glow.metadata.model.version[2], model->glow.metadata.model.version[3]);\n-\tif (strlen(model->name) != 0)\n-\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"debug_name\", model->name);\n-\tfprintf(fp, \"%*s : 0x%016lx\\n\", FIELD_LEN, \"model\", PLT_U64_CAST(model));\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"model_id\", model->model_id);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"batch_size\", model->glow.metadata.model.batch_size);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_layers\", model->glow.metadata.model.num_layers);\n-\n-\t/* Print model state */\n-\tif (model->state == ML_CNXK_MODEL_STATE_LOADED)\n-\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"loaded\");\n-\tif (model->state == ML_CNXK_MODEL_STATE_JOB_ACTIVE)\n-\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"job_active\");\n-\tif (model->state == ML_CNXK_MODEL_STATE_STARTED)\n-\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"started\");\n-\n-\t/* Print OCM status */\n-\tfprintf(fp, \"%*s : %\" PRIu64 \" bytes\\n\", FIELD_LEN, \"wb_size\",\n-\t\tmodel->glow.metadata.model.ocm_wb_range_end -\n-\t\t\tmodel->glow.metadata.model.ocm_wb_range_start + 1);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"wb_pages\", model->layer[0].glow.ocm_map.wb_pages);\n-\tfprintf(fp, \"%*s : %\" PRIu64 \" bytes\\n\", FIELD_LEN, \"scratch_size\",\n-\t\tocm->size_per_tile - model->glow.metadata.model.ocm_tmp_range_floor);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"scratch_pages\",\n-\t\tmodel->layer[0].glow.ocm_map.scratch_pages);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_tiles\",\n-\t\tmodel->glow.metadata.model.tile_end - model->glow.metadata.model.tile_start + 1);\n-\n-\tif (model->state == ML_CNXK_MODEL_STATE_STARTED) {\n-\t\tfprintf(fp, \"%*s : 0x%0*\" PRIx64 \"\\n\", FIELD_LEN, \"tilemask\",\n-\t\t\tML_CN10K_OCM_NUMTILES / 4, model->layer[0].glow.ocm_map.tilemask);\n-\t\tfprintf(fp, \"%*s : 0x%\" PRIx64 \"\\n\", FIELD_LEN, \"ocm_wb_start\",\n-\t\t\tmodel->layer[0].glow.ocm_map.wb_page_start * cn10k_mldev->ocm.page_size);\n-\t}\n-\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_inputs\", model->glow.metadata.model.num_input);\n-\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"num_outputs\", model->glow.metadata.model.num_output);\n-\tfprintf(fp, \"\\n\");\n-\n-\tprint_line(fp, LINE_LEN);\n-\tfprintf(fp, \"%8s  %16s  %12s  %18s  %12s\\n\", \"input\", \"input_name\", \"input_type\",\n-\t\t\"model_input_type\", \"quantize\");\n-\tprint_line(fp, LINE_LEN);\n-\tfor (i = 0; i < model->glow.metadata.model.num_input; i++) {\n-\t\tif (i < MRVL_ML_NUM_INPUT_OUTPUT_1) {\n-\t\t\tfprintf(fp, \"%8u  \", i);\n-\t\t\tfprintf(fp, \"%*s  \", 16, model->glow.metadata.input1[i].input_name);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.input1[i].input_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 12, str);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.input1[i].model_input_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 18, str);\n-\t\t\tfprintf(fp, \"%*s\", 12,\n-\t\t\t\t(model->glow.metadata.input1[i].quantize == 1 ? \"Yes\" : \"No\"));\n-\t\t\tfprintf(fp, \"\\n\");\n-\t\t} else {\n-\t\t\tj = i - MRVL_ML_NUM_INPUT_OUTPUT_1;\n-\n-\t\t\tfprintf(fp, \"%8u  \", i);\n-\t\t\tfprintf(fp, \"%*s  \", 16, model->glow.metadata.input2[j].input_name);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.input2[j].input_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 12, str);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.input2[j].model_input_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 18, str);\n-\t\t\tfprintf(fp, \"%*s\", 12,\n-\t\t\t\t(model->glow.metadata.input2[j].quantize == 1 ? \"Yes\" : \"No\"));\n-\t\t\tfprintf(fp, \"\\n\");\n-\t\t}\n-\t}\n-\tfprintf(fp, \"\\n\");\n-\n-\tprint_line(fp, LINE_LEN);\n-\tfprintf(fp, \"%8s  %16s  %12s  %18s  %12s\\n\", \"output\", \"output_name\", \"output_type\",\n-\t\t\"model_output_type\", \"dequantize\");\n-\tprint_line(fp, LINE_LEN);\n-\tfor (i = 0; i < model->glow.metadata.model.num_output; i++) {\n-\t\tif (i < MRVL_ML_NUM_INPUT_OUTPUT_1) {\n-\t\t\tfprintf(fp, \"%8u  \", i);\n-\t\t\tfprintf(fp, \"%*s  \", 16, model->glow.metadata.output1[i].output_name);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.output1[i].output_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 12, str);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.output1[i].model_output_type,\n-\t\t\t\t\t      str, STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 18, str);\n-\t\t\tfprintf(fp, \"%*s\", 12,\n-\t\t\t\t(model->glow.metadata.output1[i].dequantize == 1 ? \"Yes\" : \"No\"));\n-\t\t\tfprintf(fp, \"\\n\");\n-\t\t} else {\n-\t\t\tj = i - MRVL_ML_NUM_INPUT_OUTPUT_1;\n-\t\t\tfprintf(fp, \"%8u  \", i);\n-\t\t\tfprintf(fp, \"%*s  \", 16, model->glow.metadata.output2[j].output_name);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.output2[j].output_type, str,\n-\t\t\t\t\t      STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 12, str);\n-\t\t\trte_ml_io_type_to_str(model->glow.metadata.output2[j].model_output_type,\n-\t\t\t\t\t      str, STR_LEN);\n-\t\t\tfprintf(fp, \"%*s  \", 18, str);\n-\t\t\tfprintf(fp, \"%*s\", 12,\n-\t\t\t\t(model->glow.metadata.output2[j].dequantize == 1 ? \"Yes\" : \"No\"));\n-\t\t\tfprintf(fp, \"\\n\");\n-\t\t}\n-\t}\n-\tfprintf(fp, \"\\n\");\n-\tprint_line(fp, LINE_LEN);\n-\tfprintf(fp, \"\\n\");\n-}\n-\n static void\n cn10k_ml_prep_sp_job_descriptor(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer,\n \t\t\t\tstruct cnxk_ml_req *req, enum cn10k_ml_job_type job_type)\n@@ -1120,38 +971,25 @@ cn10k_ml_dev_xstats_reset(struct rte_ml_dev *dev, enum rte_ml_dev_xstats_mode mo\n }\n \n int\n-cn10k_ml_dev_dump(struct rte_ml_dev *dev, FILE *fp)\n+cn10k_ml_dev_dump(struct cnxk_ml_dev *cnxk_mldev, FILE *fp)\n {\n \tstruct cn10k_ml_dev *cn10k_mldev;\n-\tstruct cnxk_ml_dev *cnxk_mldev;\n-\tstruct cnxk_ml_model *model;\n \tstruct cn10k_ml_fw *fw;\n \n \tuint32_t head_loc;\n \tuint32_t tail_loc;\n-\tuint16_t model_id;\n \tuint32_t bufsize;\n \tchar *head_ptr;\n \tint core_id;\n \n-\tif (roc_env_is_asim())\n-\t\treturn 0;\n-\n-\tcnxk_mldev = dev->data->dev_private;\n \tcn10k_mldev = &cnxk_mldev->cn10k_mldev;\n \tfw = &cn10k_mldev->fw;\n \n-\t/* Dump model info */\n-\tfor (model_id = 0; model_id < dev->data->nb_models; model_id++) {\n-\t\tmodel = dev->data->models[model_id];\n-\t\tif (model != NULL) {\n-\t\t\tcn10k_ml_model_print(dev, model_id, fp);\n-\t\t\tfprintf(fp, \"\\n\");\n-\t\t}\n-\t}\n-\n \t/* Dump OCM state */\n-\tcn10k_ml_ocm_print(dev, fp);\n+\tcn10k_ml_ocm_print(cnxk_mldev, fp);\n+\n+\tif (roc_env_is_asim())\n+\t\treturn 0;\n \n \t/* Dump debug buffer */\n \tfor (core_id = 0; core_id <= 1; core_id++) {\n@@ -1207,17 +1045,15 @@ cn10k_ml_dev_dump(struct rte_ml_dev *dev, FILE *fp)\n }\n \n int\n-cn10k_ml_dev_selftest(struct rte_ml_dev *dev)\n+cn10k_ml_dev_selftest(struct cnxk_ml_dev *cnxk_mldev)\n {\n \tstruct cn10k_ml_dev *cn10k_mldev;\n-\tstruct cnxk_ml_dev *cnxk_mldev;\n \tconst struct plt_memzone *mz;\n \tstruct cnxk_ml_req *req;\n \tuint64_t timeout_cycle;\n \tbool timeout;\n \tint ret;\n \n-\tcnxk_mldev = dev->data->dev_private;\n \tcn10k_mldev = &cnxk_mldev->cn10k_mldev;\n \tmz = plt_memzone_reserve_aligned(\"dev_selftest\", sizeof(struct cnxk_ml_req), 0,\n \t\t\t\t\t ML_CN10K_ALIGN_SIZE);\ndiff --git a/drivers/ml/cnxk/cn10k_ml_ops.h b/drivers/ml/cnxk/cn10k_ml_ops.h\nindex 780e2a9f9c..5fda98ae88 100644\n--- a/drivers/ml/cnxk/cn10k_ml_ops.h\n+++ b/drivers/ml/cnxk/cn10k_ml_ops.h\n@@ -295,8 +295,8 @@ int cn10k_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_d\n int cn10k_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev);\n int cn10k_ml_dev_start(struct cnxk_ml_dev *cnxk_mldev);\n int cn10k_ml_dev_stop(struct cnxk_ml_dev *cnxk_mldev);\n-int cn10k_ml_dev_dump(struct rte_ml_dev *dev, FILE *fp);\n-int cn10k_ml_dev_selftest(struct rte_ml_dev *dev);\n+int cn10k_ml_dev_dump(struct cnxk_ml_dev *cnxk_mldev, FILE *fp);\n+int cn10k_ml_dev_selftest(struct cnxk_ml_dev *cnxk_mldev);\n \n int cn10k_ml_dev_stats_get(struct rte_ml_dev *dev, struct rte_ml_dev_stats *stats);\n void cn10k_ml_dev_stats_reset(struct rte_ml_dev *dev);\ndiff --git a/drivers/ml/cnxk/cnxk_ml_model.c b/drivers/ml/cnxk/cnxk_ml_model.c\nindex 3d735ced3e..b069d4e3a5 100644\n--- a/drivers/ml/cnxk/cnxk_ml_model.c\n+++ b/drivers/ml/cnxk/cnxk_ml_model.c\n@@ -5,3 +5,36 @@\n #include <rte_mldev.h>\n \n #include \"cnxk_ml_model.h\"\n+#include \"cnxk_ml_utils.h\"\n+\n+void\n+cnxk_ml_model_dump(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model, FILE *fp)\n+{\n+\tstruct cnxk_ml_layer *layer;\n+\tuint16_t layer_id;\n+\n+\t/* Print debug info */\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \" Model Information (Model ID: %u, Name: %s)\\n\", model->model_id, model->name);\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"model_id\", model->model_id);\n+\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"name\", model->name);\n+\tfprintf(fp, \"%*s : 0x%016lx\\n\", FIELD_LEN, \"model\", PLT_U64_CAST(model));\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"batch_size\", model->batch_size);\n+\tfprintf(fp, \"%*s : %u\\n\", FIELD_LEN, \"nb_layers\", model->nb_layers);\n+\n+\t/* Print model state */\n+\tif (model->state == ML_CNXK_MODEL_STATE_LOADED)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"loaded\");\n+\tif (model->state == ML_CNXK_MODEL_STATE_JOB_ACTIVE)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"job_active\");\n+\tif (model->state == ML_CNXK_MODEL_STATE_STARTED)\n+\t\tfprintf(fp, \"%*s : %s\\n\", FIELD_LEN, \"state\", \"started\");\n+\tcnxk_ml_print_line(fp, LINE_LEN);\n+\tfprintf(fp, \"\\n\");\n+\n+\tfor (layer_id = 0; layer_id < model->nb_layers; layer_id++) {\n+\t\tlayer = &model->layer[layer_id];\n+\t\tcn10k_ml_layer_print(cnxk_mldev, layer, fp);\n+\t}\n+}\ndiff --git a/drivers/ml/cnxk/cnxk_ml_model.h b/drivers/ml/cnxk/cnxk_ml_model.h\nindex a2994dbb71..66d979dd3c 100644\n--- a/drivers/ml/cnxk/cnxk_ml_model.h\n+++ b/drivers/ml/cnxk/cnxk_ml_model.h\n@@ -108,4 +108,6 @@ struct cnxk_ml_model {\n \tplt_spinlock_t lock;\n };\n \n+void cnxk_ml_model_dump(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model, FILE *fp);\n+\n #endif /* _CNXK_ML_MODEL_H_ */\ndiff --git a/drivers/ml/cnxk/cnxk_ml_ops.c b/drivers/ml/cnxk/cnxk_ml_ops.c\nindex 63842025fc..66b88ddae1 100644\n--- a/drivers/ml/cnxk/cnxk_ml_ops.c\n+++ b/drivers/ml/cnxk/cnxk_ml_ops.c\n@@ -409,6 +409,41 @@ cnxk_ml_dev_stop(struct rte_ml_dev *dev)\n \treturn 0;\n }\n \n+static int\n+cnxk_ml_dev_dump(struct rte_ml_dev *dev, FILE *fp)\n+{\n+\tstruct cnxk_ml_dev *cnxk_mldev;\n+\tstruct cnxk_ml_model *model;\n+\tuint16_t model_id;\n+\n+\tif ((dev == NULL) || (fp == NULL))\n+\t\treturn -EINVAL;\n+\n+\tcnxk_mldev = dev->data->dev_private;\n+\n+\t/* Dump model info */\n+\tfor (model_id = 0; model_id < cnxk_mldev->mldev->data->nb_models; model_id++) {\n+\t\tmodel = cnxk_mldev->mldev->data->models[model_id];\n+\t\tif (model != NULL)\n+\t\t\tcnxk_ml_model_dump(cnxk_mldev, model, fp);\n+\t}\n+\n+\treturn cn10k_ml_dev_dump(cnxk_mldev, fp);\n+}\n+\n+static int\n+cnxk_ml_dev_selftest(struct rte_ml_dev *dev)\n+{\n+\tstruct cnxk_ml_dev *cnxk_mldev;\n+\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n+\n+\tcnxk_mldev = dev->data->dev_private;\n+\n+\treturn cn10k_ml_dev_selftest(cnxk_mldev);\n+}\n+\n static int\n cnxk_ml_dev_queue_pair_setup(struct rte_ml_dev *dev, uint16_t queue_pair_id,\n \t\t\t     const struct rte_ml_dev_qp_conf *qp_conf, int socket_id)\n@@ -729,8 +764,8 @@ struct rte_ml_dev_ops cnxk_ml_ops = {\n \t.dev_close = cnxk_ml_dev_close,\n \t.dev_start = cnxk_ml_dev_start,\n \t.dev_stop = cnxk_ml_dev_stop,\n-\t.dev_dump = cn10k_ml_dev_dump,\n-\t.dev_selftest = cn10k_ml_dev_selftest,\n+\t.dev_dump = cnxk_ml_dev_dump,\n+\t.dev_selftest = cnxk_ml_dev_selftest,\n \n \t/* Queue-pair handling ops */\n \t.dev_queue_pair_setup = cnxk_ml_dev_queue_pair_setup,\ndiff --git a/drivers/ml/cnxk/cnxk_ml_utils.c b/drivers/ml/cnxk/cnxk_ml_utils.c\nnew file mode 100644\nindex 0000000000..ca3670a9e8\n--- /dev/null\n+++ b/drivers/ml/cnxk/cnxk_ml_utils.c\n@@ -0,0 +1,15 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2023 Marvell.\n+ */\n+\n+#include \"cnxk_ml_utils.h\"\n+\n+void\n+cnxk_ml_print_line(FILE *fp, int len)\n+{\n+\tint i;\n+\n+\tfor (i = 0; i < len; i++)\n+\t\tfprintf(fp, \"-\");\n+\tfprintf(fp, \"\\n\");\n+}\ndiff --git a/drivers/ml/cnxk/cnxk_ml_utils.h b/drivers/ml/cnxk/cnxk_ml_utils.h\nnew file mode 100644\nindex 0000000000..ed2ab21346\n--- /dev/null\n+++ b/drivers/ml/cnxk/cnxk_ml_utils.h\n@@ -0,0 +1,17 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2023 Marvell.\n+ */\n+\n+#ifndef _CNXK_ML_UTILS_H_\n+#define _CNXK_ML_UTILS_H_\n+\n+#include <rte_mldev.h>\n+\n+/* Debug print width */\n+#define STR_LEN\t  12\n+#define FIELD_LEN 16\n+#define LINE_LEN  72\n+\n+void cnxk_ml_print_line(FILE *fp, int len);\n+\n+#endif /* _CNXK_ML_UTILS_H_ */\ndiff --git a/drivers/ml/cnxk/meson.build b/drivers/ml/cnxk/meson.build\nindex 79154c8698..5d27a87d91 100644\n--- a/drivers/ml/cnxk/meson.build\n+++ b/drivers/ml/cnxk/meson.build\n@@ -16,6 +16,7 @@ sources = files(\n         'cnxk_ml_io.c',\n         'cnxk_ml_model.c',\n         'cnxk_ml_ops.c',\n+        'cnxk_ml_utils.c',\n )\n \n deps += ['mldev', 'common_cnxk', 'kvargs', 'hash']\n",
    "prefixes": [
        "v9",
        "13/34"
    ]
}