1df2358f3SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause 2df2358f3SSrikanth Yalavarthi * Copyright (c) 2023 Marvell. 3df2358f3SSrikanth Yalavarthi */ 4df2358f3SSrikanth Yalavarthi 5df2358f3SSrikanth Yalavarthi #ifndef _MVTVM_ML_MODEL_H_ 6df2358f3SSrikanth Yalavarthi #define _MVTVM_ML_MODEL_H_ 7df2358f3SSrikanth Yalavarthi 8df2358f3SSrikanth Yalavarthi #include <tvmdp.h> 9df2358f3SSrikanth Yalavarthi 10df2358f3SSrikanth Yalavarthi #include <rte_mldev.h> 11df2358f3SSrikanth Yalavarthi 12df2358f3SSrikanth Yalavarthi #include "cnxk_ml_io.h" 13df2358f3SSrikanth Yalavarthi 145cea2c67SPrince Takkar struct cnxk_ml_dev; 158e4dd45cSSrikanth Yalavarthi struct cnxk_ml_model; 16dc57b0a0SSrikanth Yalavarthi struct cnxk_ml_layer; 178e4dd45cSSrikanth Yalavarthi 18df2358f3SSrikanth Yalavarthi /* Maximum number of objects per model */ 19df2358f3SSrikanth Yalavarthi #define ML_MVTVM_MODEL_OBJECT_MAX 3 20df2358f3SSrikanth Yalavarthi 21df2358f3SSrikanth Yalavarthi /* Objects list */ 22df2358f3SSrikanth Yalavarthi extern char mvtvm_object_list[ML_MVTVM_MODEL_OBJECT_MAX][RTE_ML_STR_MAX]; 23df2358f3SSrikanth Yalavarthi 24df2358f3SSrikanth Yalavarthi /* Model object structure */ 25df2358f3SSrikanth Yalavarthi struct mvtvm_ml_model_object { 26df2358f3SSrikanth Yalavarthi /* Name */ 27df2358f3SSrikanth Yalavarthi char name[RTE_ML_STR_MAX]; 28df2358f3SSrikanth Yalavarthi 29df2358f3SSrikanth Yalavarthi /* Temporary buffer */ 30df2358f3SSrikanth Yalavarthi uint8_t *buffer; 31df2358f3SSrikanth Yalavarthi 32df2358f3SSrikanth Yalavarthi /* Buffer size */ 33df2358f3SSrikanth Yalavarthi int64_t size; 34df2358f3SSrikanth Yalavarthi }; 35df2358f3SSrikanth Yalavarthi 3651edcbaeSSrikanth Yalavarthi /* Model fast-path stats */ 3751edcbaeSSrikanth Yalavarthi struct mvtvm_ml_model_xstats { 3851edcbaeSSrikanth Yalavarthi /* Total TVM runtime latency, sum of all inferences */ 3951edcbaeSSrikanth Yalavarthi uint64_t tvm_rt_latency_tot; 4051edcbaeSSrikanth Yalavarthi 4151edcbaeSSrikanth Yalavarthi /* TVM runtime latency */ 4251edcbaeSSrikanth Yalavarthi uint64_t tvm_rt_latency; 4351edcbaeSSrikanth Yalavarthi 4451edcbaeSSrikanth Yalavarthi /* Minimum TVM runtime latency */ 4551edcbaeSSrikanth Yalavarthi uint64_t tvm_rt_latency_min; 4651edcbaeSSrikanth Yalavarthi 4751edcbaeSSrikanth Yalavarthi /* Maximum TVM runtime latency */ 4851edcbaeSSrikanth Yalavarthi uint64_t tvm_rt_latency_max; 4951edcbaeSSrikanth Yalavarthi 5051edcbaeSSrikanth Yalavarthi /* Total jobs dequeued */ 5151edcbaeSSrikanth Yalavarthi uint64_t dequeued_count; 5251edcbaeSSrikanth Yalavarthi 5351edcbaeSSrikanth Yalavarthi /* Hardware stats reset index */ 5451edcbaeSSrikanth Yalavarthi uint64_t tvm_rt_reset_count; 5551edcbaeSSrikanth Yalavarthi }; 5651edcbaeSSrikanth Yalavarthi 57df2358f3SSrikanth Yalavarthi struct mvtvm_ml_model_data { 58df2358f3SSrikanth Yalavarthi /* Model metadata */ 59df2358f3SSrikanth Yalavarthi struct tvmdp_model_metadata metadata; 60df2358f3SSrikanth Yalavarthi 61df2358f3SSrikanth Yalavarthi /* Model objects */ 62df2358f3SSrikanth Yalavarthi struct tvmdp_model_object object; 63df2358f3SSrikanth Yalavarthi 64df2358f3SSrikanth Yalavarthi /* TVM runtime callbacks */ 65df2358f3SSrikanth Yalavarthi struct tvmrt_glow_callback cb; 66df2358f3SSrikanth Yalavarthi 67df2358f3SSrikanth Yalavarthi /* Model I/O info */ 68df2358f3SSrikanth Yalavarthi struct cnxk_ml_io_info info; 6951edcbaeSSrikanth Yalavarthi 7051edcbaeSSrikanth Yalavarthi /* Stats for burst ops */ 7151edcbaeSSrikanth Yalavarthi struct mvtvm_ml_model_xstats *burst_xstats; 72*c5586f49SAnup Prabhu 73*c5586f49SAnup Prabhu /* Input Tensor */ 74*c5586f49SAnup Prabhu DLTensor input_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT]; 75*c5586f49SAnup Prabhu 76*c5586f49SAnup Prabhu /* Output Tensor */ 77*c5586f49SAnup Prabhu DLTensor output_tensor[ML_CNXK_MODEL_MAX_INPUT_OUTPUT]; 78df2358f3SSrikanth Yalavarthi }; 79df2358f3SSrikanth Yalavarthi 8010563a5eSSrikanth Yalavarthi enum cnxk_ml_model_type mvtvm_ml_model_type_get(struct rte_ml_model_params *params); 81a16f8a48SSrikanth Yalavarthi int mvtvm_ml_model_blob_parse(struct rte_ml_model_params *params, 82a16f8a48SSrikanth Yalavarthi struct mvtvm_ml_model_object *object); 838e4dd45cSSrikanth Yalavarthi int mvtvm_ml_model_get_layer_id(struct cnxk_ml_model *model, const char *layer_name, 848e4dd45cSSrikanth Yalavarthi uint16_t *layer_id); 8533cfebd9SSrikanth Yalavarthi void mvtvm_ml_model_io_info_set(struct cnxk_ml_model *model); 8633cfebd9SSrikanth Yalavarthi struct cnxk_ml_io_info *mvtvm_ml_model_io_info_get(struct cnxk_ml_model *model, uint16_t layer_id); 875cea2c67SPrince Takkar void mvtvm_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model); 88dc57b0a0SSrikanth Yalavarthi void mvtvm_ml_layer_print(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_layer *layer, FILE *fp); 8910563a5eSSrikanth Yalavarthi 90df2358f3SSrikanth Yalavarthi #endif /* _MVTVM_ML_MODEL_H_ */ 91