[v5,31/34] ml/cnxk: add generic ML malloc and free callback

Message ID 20231018064806.24145-32-syalavarthi@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series Implementation of revised ml/cnxk driver |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Srikanth Yalavarthi Oct. 18, 2023, 6:47 a.m. UTC
  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(+)
  

Patch

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 77c2b5bcdc..b627355917 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;
 	}