Implemented generic ML malloc and free callbacks

Signed-off-by: Srikanth Yalavarthi <syalavar...@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(+)

diff --git a/drivers/ml/cnxk/cn10k_ml_ops.c b/drivers/ml/cnxk/cn10k_ml_ops.c
index 7802425c87..01b0a44caa 100644
--- a/drivers/ml/cnxk/cn10k_ml_ops.c
+++ b/drivers/ml/cnxk/cn10k_ml_ops.c
@@ -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);
+}
diff --git a/drivers/ml/cnxk/cn10k_ml_ops.h b/drivers/ml/cnxk/cn10k_ml_ops.h
index 9c41c1c0b0..eb3e1c139c 100644
--- a/drivers/ml/cnxk/cn10k_ml_ops.h
+++ b/drivers/ml/cnxk/cn10k_ml_ops.h
@@ -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);
diff --git a/drivers/ml/cnxk/mvtvm_ml_ops.c b/drivers/ml/cnxk/mvtvm_ml_ops.c
index a50b31ec6e..9d59e28661 100644
--- a/drivers/ml/cnxk/mvtvm_ml_ops.c
+++ b/drivers/ml/cnxk/mvtvm_ml_ops.c
@@ -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;
        }
-- 
2.42.0

Reply via email to