Implemented generic ML malloc and free callbacks
Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>
---
drivers/ml/cnxk/cn10k_ml_ops.c | 30 ++++++++++++++++++++++++++++++
drivers/ml/cnxk/cn10k_ml_ops.h | 3 +++
drivers/ml/cnxk/mvtvm_ml_ops.c | 2 ++
3 files changed, 35 insertions(+)
@@ -1497,3 +1497,33 @@ cn10k_ml_io_free(void *device, uint16_t model_id, const char *layer_name)
return plt_memzone_free(mz);
}
+
+int
+cn10k_ml_malloc(const char *name, size_t size, uint32_t align, void **addr)
+{
+ const struct plt_memzone *mz;
+
+ mz = plt_memzone_reserve_aligned(name, size, 0, align);
+ if (mz == NULL) {
+ plt_err("ml_malloc failed: Unable to allocate memory: name = %s", name);
+ return -ENOMEM;
+ }
+
+ *addr = mz->addr;
+
+ return 0;
+}
+
+int
+cn10k_ml_free(const char *name)
+{
+ const struct plt_memzone *mz;
+
+ mz = plt_memzone_lookup(name);
+ if (mz == NULL) {
+ plt_err("ml_free failed: Memzone not found: name = %s", name);
+ return -EINVAL;
+ }
+
+ return plt_memzone_free(mz);
+}
@@ -333,6 +333,9 @@ int cn10k_ml_io_alloc(void *device, uint16_t model_id, const char *layer_name,
uint64_t **input_qbuffer, uint64_t **output_qbuffer);
int cn10k_ml_io_free(void *device, uint16_t model_id, const char *layer_name);
+int cn10k_ml_malloc(const char *name, size_t size, uint32_t align, void **addr);
+int cn10k_ml_free(const char *name);
+
/* xstats ops */
void cn10k_ml_xstat_model_name_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *model,
uint16_t stat_id, uint16_t entry, char *suffix);
@@ -234,6 +234,8 @@ mvtvm_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *
callback->tvmrt_glow_layer_unload = cn10k_ml_layer_unload;
callback->tvmrt_io_alloc = cn10k_ml_io_alloc;
callback->tvmrt_io_free = cn10k_ml_io_free;
+ callback->tvmrt_malloc = cn10k_ml_malloc;
+ callback->tvmrt_free = cn10k_ml_free;
} else {
callback = NULL;
}