xref: /dpdk/app/test-mldev/test_model_common.c (revision fccf444cfe059fad295f4037ba221ddfee694cc0)
1f6661e6dSSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2f6661e6dSSrikanth Yalavarthi  * Copyright (c) 2022 Marvell.
3f6661e6dSSrikanth Yalavarthi  */
4f6661e6dSSrikanth Yalavarthi 
5f6661e6dSSrikanth Yalavarthi #include <errno.h>
6f6661e6dSSrikanth Yalavarthi 
7f6661e6dSSrikanth Yalavarthi #include <rte_common.h>
8f6661e6dSSrikanth Yalavarthi #include <rte_malloc.h>
9f6661e6dSSrikanth Yalavarthi #include <rte_mldev.h>
10f6661e6dSSrikanth Yalavarthi 
11f6661e6dSSrikanth Yalavarthi #include "ml_common.h"
12f6661e6dSSrikanth Yalavarthi #include "test_model_common.h"
13f6661e6dSSrikanth Yalavarthi 
14f6661e6dSSrikanth Yalavarthi int
15f6661e6dSSrikanth Yalavarthi ml_model_load(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
16f6661e6dSSrikanth Yalavarthi {
17f6661e6dSSrikanth Yalavarthi 	struct rte_ml_model_params model_params;
18f6661e6dSSrikanth Yalavarthi 	int ret;
19f6661e6dSSrikanth Yalavarthi 
20*fccf444cSSrikanth Yalavarthi 	RTE_SET_USED(test);
21*fccf444cSSrikanth Yalavarthi 
22f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_LOADED)
23f6661e6dSSrikanth Yalavarthi 		return 0;
24f6661e6dSSrikanth Yalavarthi 
25f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_INITIAL)
26f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
27f6661e6dSSrikanth Yalavarthi 
28f6661e6dSSrikanth Yalavarthi 	/* read model binary */
29*fccf444cSSrikanth Yalavarthi 	ret = ml_read_file(opt->filelist[fid].model, &model_params.size,
30*fccf444cSSrikanth Yalavarthi 			   (char **)&model_params.addr);
31*fccf444cSSrikanth Yalavarthi 	if (ret != 0)
32*fccf444cSSrikanth Yalavarthi 		return ret;
33f6661e6dSSrikanth Yalavarthi 
34f6661e6dSSrikanth Yalavarthi 	/* load model to device */
35f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_load(opt->dev_id, &model_params, &model->id);
36f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
37f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to load model : %s\n", opt->filelist[fid].model);
38f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
39*fccf444cSSrikanth Yalavarthi 		free(model_params.addr);
40f6661e6dSSrikanth Yalavarthi 		return ret;
41f6661e6dSSrikanth Yalavarthi 	}
42f6661e6dSSrikanth Yalavarthi 
43*fccf444cSSrikanth Yalavarthi 	/* release buffer */
44*fccf444cSSrikanth Yalavarthi 	free(model_params.addr);
45f6661e6dSSrikanth Yalavarthi 
46f6661e6dSSrikanth Yalavarthi 	/* get model info */
47f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_info_get(opt->dev_id, model->id, &model->info);
48f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
49f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to get model info : %s\n", opt->filelist[fid].model);
50f6661e6dSSrikanth Yalavarthi 		return ret;
51f6661e6dSSrikanth Yalavarthi 	}
52f6661e6dSSrikanth Yalavarthi 
5338e884b5SSrikanth Yalavarthi 	/* Update number of batches */
5438e884b5SSrikanth Yalavarthi 	if (opt->batches == 0)
5538e884b5SSrikanth Yalavarthi 		model->nb_batches = model->info.batch_size;
5638e884b5SSrikanth Yalavarthi 	else
5738e884b5SSrikanth Yalavarthi 		model->nb_batches = opt->batches;
5838e884b5SSrikanth Yalavarthi 
59f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_LOADED;
60f6661e6dSSrikanth Yalavarthi 
61f6661e6dSSrikanth Yalavarthi 	return 0;
62f6661e6dSSrikanth Yalavarthi }
63f6661e6dSSrikanth Yalavarthi 
64f6661e6dSSrikanth Yalavarthi int
65f6661e6dSSrikanth Yalavarthi ml_model_unload(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
66f6661e6dSSrikanth Yalavarthi {
67f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
68f6661e6dSSrikanth Yalavarthi 	int ret;
69f6661e6dSSrikanth Yalavarthi 
70f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
71f6661e6dSSrikanth Yalavarthi 
72f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_INITIAL)
73f6661e6dSSrikanth Yalavarthi 		return 0;
74f6661e6dSSrikanth Yalavarthi 
75f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_LOADED)
76f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
77f6661e6dSSrikanth Yalavarthi 
78f6661e6dSSrikanth Yalavarthi 	/* unload model */
79f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_unload(opt->dev_id, model->id);
80f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
81f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to unload model: %s\n", opt->filelist[fid].model);
82f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
83f6661e6dSSrikanth Yalavarthi 		return ret;
84f6661e6dSSrikanth Yalavarthi 	}
85f6661e6dSSrikanth Yalavarthi 
86f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_INITIAL;
87f6661e6dSSrikanth Yalavarthi 
88f6661e6dSSrikanth Yalavarthi 	return 0;
89f6661e6dSSrikanth Yalavarthi }
90f6661e6dSSrikanth Yalavarthi 
91f6661e6dSSrikanth Yalavarthi int
92f6661e6dSSrikanth Yalavarthi ml_model_start(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
93f6661e6dSSrikanth Yalavarthi {
94f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
95f6661e6dSSrikanth Yalavarthi 	int ret;
96f6661e6dSSrikanth Yalavarthi 
97f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
98f6661e6dSSrikanth Yalavarthi 
99f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_STARTED)
100f6661e6dSSrikanth Yalavarthi 		return 0;
101f6661e6dSSrikanth Yalavarthi 
102f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_LOADED)
103f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
104f6661e6dSSrikanth Yalavarthi 
105f6661e6dSSrikanth Yalavarthi 	/* start model */
106f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_start(opt->dev_id, model->id);
107f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
108f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to start model : %s\n", opt->filelist[fid].model);
109f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
110f6661e6dSSrikanth Yalavarthi 		return ret;
111f6661e6dSSrikanth Yalavarthi 	}
112f6661e6dSSrikanth Yalavarthi 
113f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_STARTED;
114f6661e6dSSrikanth Yalavarthi 
115f6661e6dSSrikanth Yalavarthi 	return 0;
116f6661e6dSSrikanth Yalavarthi }
117f6661e6dSSrikanth Yalavarthi 
118f6661e6dSSrikanth Yalavarthi int
119f6661e6dSSrikanth Yalavarthi ml_model_stop(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
120f6661e6dSSrikanth Yalavarthi {
121f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
122f6661e6dSSrikanth Yalavarthi 	int ret;
123f6661e6dSSrikanth Yalavarthi 
124f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
125f6661e6dSSrikanth Yalavarthi 
126f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_LOADED)
127f6661e6dSSrikanth Yalavarthi 		return 0;
128f6661e6dSSrikanth Yalavarthi 
129f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_STARTED)
130f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
131f6661e6dSSrikanth Yalavarthi 
132f6661e6dSSrikanth Yalavarthi 	/* stop model */
133f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_stop(opt->dev_id, model->id);
134f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
135f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to stop model: %s\n", opt->filelist[fid].model);
136f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
137f6661e6dSSrikanth Yalavarthi 		return ret;
138f6661e6dSSrikanth Yalavarthi 	}
139f6661e6dSSrikanth Yalavarthi 
140f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_LOADED;
141f6661e6dSSrikanth Yalavarthi 
142f6661e6dSSrikanth Yalavarthi 	return 0;
143f6661e6dSSrikanth Yalavarthi }
144