xref: /dpdk/app/test-mldev/test_model_common.c (revision 24364292061f197a9f608b1020b6886ec7b1216d)
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
ml_model_load(struct ml_test * test,struct ml_options * opt,struct ml_model * model,uint16_t fid)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 
53f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_LOADED;
54f6661e6dSSrikanth Yalavarthi 
55f6661e6dSSrikanth Yalavarthi 	return 0;
56f6661e6dSSrikanth Yalavarthi }
57f6661e6dSSrikanth Yalavarthi 
58f6661e6dSSrikanth Yalavarthi int
ml_model_unload(struct ml_test * test,struct ml_options * opt,struct ml_model * model,uint16_t fid)59f6661e6dSSrikanth Yalavarthi ml_model_unload(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
60f6661e6dSSrikanth Yalavarthi {
61f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
62f6661e6dSSrikanth Yalavarthi 	int ret;
63f6661e6dSSrikanth Yalavarthi 
64f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
65f6661e6dSSrikanth Yalavarthi 
66f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_INITIAL)
67f6661e6dSSrikanth Yalavarthi 		return 0;
68f6661e6dSSrikanth Yalavarthi 
69f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_LOADED)
70f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
71f6661e6dSSrikanth Yalavarthi 
72f6661e6dSSrikanth Yalavarthi 	/* unload model */
73f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_unload(opt->dev_id, model->id);
74f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
75f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to unload model: %s\n", opt->filelist[fid].model);
76f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
77f6661e6dSSrikanth Yalavarthi 		return ret;
78f6661e6dSSrikanth Yalavarthi 	}
79f6661e6dSSrikanth Yalavarthi 
80f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_INITIAL;
81f6661e6dSSrikanth Yalavarthi 
82f6661e6dSSrikanth Yalavarthi 	return 0;
83f6661e6dSSrikanth Yalavarthi }
84f6661e6dSSrikanth Yalavarthi 
85f6661e6dSSrikanth Yalavarthi int
ml_model_start(struct ml_test * test,struct ml_options * opt,struct ml_model * model,uint16_t fid)86f6661e6dSSrikanth Yalavarthi ml_model_start(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
87f6661e6dSSrikanth Yalavarthi {
88f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
89f6661e6dSSrikanth Yalavarthi 	int ret;
90f6661e6dSSrikanth Yalavarthi 
91f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
92f6661e6dSSrikanth Yalavarthi 
93f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_STARTED)
94f6661e6dSSrikanth Yalavarthi 		return 0;
95f6661e6dSSrikanth Yalavarthi 
96f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_LOADED)
97f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
98f6661e6dSSrikanth Yalavarthi 
99f6661e6dSSrikanth Yalavarthi 	/* start model */
100f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_start(opt->dev_id, model->id);
101f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
102f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to start model : %s\n", opt->filelist[fid].model);
103f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
104f6661e6dSSrikanth Yalavarthi 		return ret;
105f6661e6dSSrikanth Yalavarthi 	}
106f6661e6dSSrikanth Yalavarthi 
107f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_STARTED;
108f6661e6dSSrikanth Yalavarthi 
109f6661e6dSSrikanth Yalavarthi 	return 0;
110f6661e6dSSrikanth Yalavarthi }
111f6661e6dSSrikanth Yalavarthi 
112f6661e6dSSrikanth Yalavarthi int
ml_model_stop(struct ml_test * test,struct ml_options * opt,struct ml_model * model,uint16_t fid)113f6661e6dSSrikanth Yalavarthi ml_model_stop(struct ml_test *test, struct ml_options *opt, struct ml_model *model, uint16_t fid)
114f6661e6dSSrikanth Yalavarthi {
115f6661e6dSSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
116f6661e6dSSrikanth Yalavarthi 	int ret;
117f6661e6dSSrikanth Yalavarthi 
118f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(t);
119f6661e6dSSrikanth Yalavarthi 
120f6661e6dSSrikanth Yalavarthi 	if (model->state == MODEL_LOADED)
121f6661e6dSSrikanth Yalavarthi 		return 0;
122f6661e6dSSrikanth Yalavarthi 
123f6661e6dSSrikanth Yalavarthi 	if (model->state != MODEL_STARTED)
124f6661e6dSSrikanth Yalavarthi 		return -EINVAL;
125f6661e6dSSrikanth Yalavarthi 
126f6661e6dSSrikanth Yalavarthi 	/* stop model */
127f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_model_stop(opt->dev_id, model->id);
128f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
129f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to stop model: %s\n", opt->filelist[fid].model);
130f6661e6dSSrikanth Yalavarthi 		model->state = MODEL_ERROR;
131f6661e6dSSrikanth Yalavarthi 		return ret;
132f6661e6dSSrikanth Yalavarthi 	}
133f6661e6dSSrikanth Yalavarthi 
134f6661e6dSSrikanth Yalavarthi 	model->state = MODEL_LOADED;
135f6661e6dSSrikanth Yalavarthi 
136f6661e6dSSrikanth Yalavarthi 	return 0;
137f6661e6dSSrikanth Yalavarthi }
138