LCOV - code coverage report
Current view: top level - drivers/ml/cnxk - cnxk_ml_model.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 40 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 2 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright (c) 2023 Marvell.
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <rte_hash_crc.h>
       6                 :            : #include <rte_mldev.h>
       7                 :            : 
       8                 :            : #include "cnxk_ml_model.h"
       9                 :            : #include "cnxk_ml_utils.h"
      10                 :            : 
      11                 :            : enum cnxk_ml_model_type
      12                 :          0 : cnxk_ml_model_get_type(struct rte_ml_model_params *params)
      13                 :            : {
      14                 :            :         struct cn10k_ml_model_metadata_header *metadata_header;
      15                 :            :         enum cnxk_ml_model_type type;
      16                 :            :         uint32_t payload_crc32c;
      17                 :            :         uint32_t header_crc32c;
      18                 :            : 
      19                 :          0 :         type = mvtvm_ml_model_type_get(params);
      20         [ #  # ]:          0 :         if (type == ML_CNXK_MODEL_TYPE_TVM)
      21                 :            :                 return ML_CNXK_MODEL_TYPE_TVM;
      22         [ #  # ]:          0 :         else if (type == ML_CNXK_MODEL_TYPE_INVALID)
      23                 :            :                 return ML_CNXK_MODEL_TYPE_INVALID;
      24                 :            : 
      25                 :            :         /* Check model magic string */
      26                 :          0 :         metadata_header = (struct cn10k_ml_model_metadata_header *)params->addr;
      27         [ #  # ]:          0 :         if (strncmp((char *)metadata_header->magic, MRVL_ML_MODEL_MAGIC_STRING, 4) != 0) {
      28                 :          0 :                 plt_err("Invalid Glow model, magic = %s", metadata_header->magic);
      29                 :          0 :                 return ML_CNXK_MODEL_TYPE_INVALID;
      30                 :            :         }
      31                 :            : 
      32                 :            :         /* Header CRC check */
      33         [ #  # ]:          0 :         if (metadata_header->header_crc32c != 0) {
      34                 :          0 :                 header_crc32c = rte_hash_crc(
      35                 :            :                         params->addr,
      36                 :            :                         sizeof(struct cn10k_ml_model_metadata_header) - sizeof(uint32_t), 0);
      37                 :            : 
      38         [ #  # ]:          0 :                 if (header_crc32c != metadata_header->header_crc32c) {
      39                 :          0 :                         plt_err("Invalid Glow model, Header CRC mismatch");
      40                 :          0 :                         return ML_CNXK_MODEL_TYPE_INVALID;
      41                 :            :                 }
      42                 :            :         }
      43                 :            : 
      44                 :            :         /* Payload CRC check */
      45         [ #  # ]:          0 :         if (metadata_header->payload_crc32c != 0) {
      46                 :          0 :                 payload_crc32c = rte_hash_crc(
      47                 :          0 :                         PLT_PTR_ADD(params->addr, sizeof(struct cn10k_ml_model_metadata_header)),
      48                 :          0 :                         params->size - sizeof(struct cn10k_ml_model_metadata_header), 0);
      49                 :            : 
      50         [ #  # ]:          0 :                 if (payload_crc32c != metadata_header->payload_crc32c) {
      51                 :          0 :                         plt_err("Invalid Glow model, Payload CRC mismatch");
      52                 :          0 :                         return ML_CNXK_MODEL_TYPE_INVALID;
      53                 :            :                 }
      54                 :            :         }
      55                 :            : 
      56                 :            :         return ML_CNXK_MODEL_TYPE_GLOW;
      57                 :            : }
      58                 :            : 
      59                 :            : void
      60                 :          0 : cnxk_ml_model_dump(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model, FILE *fp)
      61                 :            : {
      62                 :            :         struct cnxk_ml_layer *layer;
      63                 :            :         uint16_t layer_id;
      64                 :            : 
      65                 :            :         /* Print debug info */
      66                 :          0 :         cnxk_ml_print_line(fp, LINE_LEN);
      67                 :          0 :         fprintf(fp, " Model Information (Model ID: %u, Name: %s)\n", model->model_id, model->name);
      68                 :          0 :         cnxk_ml_print_line(fp, LINE_LEN);
      69                 :          0 :         fprintf(fp, "%*s : %u\n", FIELD_LEN, "model_id", model->model_id);
      70                 :            :         fprintf(fp, "%*s : %s\n", FIELD_LEN, "name", model->name);
      71                 :          0 :         fprintf(fp, "%*s : %d\n", FIELD_LEN, "type", model->type);
      72                 :          0 :         fprintf(fp, "%*s : %d\n", FIELD_LEN, "subtype", model->subtype);
      73                 :          0 :         fprintf(fp, "%*s : 0x%016lx\n", FIELD_LEN, "model", PLT_U64_CAST(model));
      74                 :          0 :         fprintf(fp, "%*s : %u\n", FIELD_LEN, "batch_size", model->batch_size);
      75                 :          0 :         fprintf(fp, "%*s : %u\n", FIELD_LEN, "nb_layers", model->nb_layers);
      76                 :            : 
      77                 :            :         /* Print model state */
      78         [ #  # ]:          0 :         if (model->state == ML_CNXK_MODEL_STATE_LOADED)
      79                 :            :                 fprintf(fp, "%*s : %s\n", FIELD_LEN, "state", "loaded");
      80         [ #  # ]:          0 :         if (model->state == ML_CNXK_MODEL_STATE_JOB_ACTIVE)
      81                 :            :                 fprintf(fp, "%*s : %s\n", FIELD_LEN, "state", "job_active");
      82         [ #  # ]:          0 :         if (model->state == ML_CNXK_MODEL_STATE_STARTED)
      83                 :            :                 fprintf(fp, "%*s : %s\n", FIELD_LEN, "state", "started");
      84                 :          0 :         cnxk_ml_print_line(fp, LINE_LEN);
      85                 :            :         fprintf(fp, "\n");
      86                 :            : 
      87         [ #  # ]:          0 :         for (layer_id = 0; layer_id < model->nb_layers; layer_id++) {
      88                 :          0 :                 layer = &model->layer[layer_id];
      89         [ #  # ]:          0 :                 if (layer->type == ML_CNXK_LAYER_TYPE_MRVL)
      90                 :          0 :                         cn10k_ml_layer_print(cnxk_mldev, layer, fp);
      91                 :            :                 else
      92                 :          0 :                         mvtvm_ml_layer_print(cnxk_mldev, layer, fp);
      93                 :            :         }
      94                 :          0 : }

Generated by: LCOV version 1.14