Added support to configure and close TVMDP library based
on ML device configuration options.
Updated meson build to enable Jansson, TVM runtime, TVMDP
library as build dependencies.
Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>
---
drivers/ml/cnxk/cnxk_ml_ops.c | 7 ++++
drivers/ml/cnxk/cnxk_ml_ops.h | 6 ++++
drivers/ml/cnxk/meson.build | 59 ++++++++++++++++++++++++++++++++
drivers/ml/cnxk/mvtvm_ml_ops.c | 41 ++++++++++++++++++++++
drivers/ml/cnxk/mvtvm_ml_ops.h | 19 ++++++++++
drivers/ml/cnxk/mvtvm_ml_stubs.c | 26 ++++++++++++++
drivers/ml/cnxk/mvtvm_ml_stubs.h | 15 ++++++++
7 files changed, 173 insertions(+)
create mode 100644 drivers/ml/cnxk/mvtvm_ml_ops.c
create mode 100644 drivers/ml/cnxk/mvtvm_ml_ops.h
create mode 100644 drivers/ml/cnxk/mvtvm_ml_stubs.c
create mode 100644 drivers/ml/cnxk/mvtvm_ml_stubs.h
@@ -564,6 +564,10 @@ cnxk_ml_dev_configure(struct rte_ml_dev *dev, const struct rte_ml_dev_config *co
goto error;
}
+ ret = mvtvm_ml_dev_configure(cnxk_mldev, conf);
+ if (ret != 0)
+ goto error;
+
/* Set device capabilities */
cnxk_mldev->max_nb_layers =
cnxk_mldev->cn10k_mldev.fw.req->cn10k_req.jd.fw_load.cap.s.max_models;
@@ -624,6 +628,9 @@ cnxk_ml_dev_close(struct rte_ml_dev *dev)
/* Un-initialize xstats */
cnxk_ml_xstats_uninit(cnxk_mldev);
+ if (mvtvm_ml_dev_close(cnxk_mldev) != 0)
+ plt_err("Failed to close MVTVM ML Device");
+
if (cn10k_ml_dev_close(cnxk_mldev) != 0)
plt_err("Failed to close CN10K ML Device");
@@ -12,6 +12,12 @@
#include "cn10k_ml_ops.h"
+#ifdef RTE_MLDEV_CNXK_ENABLE_MVTVM
+#include "mvtvm_ml_ops.h"
+#else
+#include "mvtvm_ml_stubs.h"
+#endif
+
/* Request structure */
struct cnxk_ml_req {
/* Device specific request */
@@ -7,6 +7,32 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
subdir_done()
endif
+enable_mvtvm = true
+
+if not jansson_dep.found()
+ message('drivers/ml/cnxk: jansson not found')
+ enable_mvtvm = false
+endif
+
+if not cc.check_header('dlpack/dlpack.h')
+ message('drivers/ml/cnxk: dlpack.h not found')
+ enable_mvtvm = false
+endif
+
+tvmrt_lib = cc.find_library('tvm_runtime', required: false)
+if tvmrt_lib.found()
+ tvmrt_dep = declare_dependency(dependencies: tvmrt_lib)
+else
+ message('drivers/ml/cnxk: tvm_runtime not found')
+ enable_mvtvm = false
+endif
+
+tvmdp_dep = dependency('tvmdp', required: false)
+if not tvmdp_dep.found()
+ message('drivers/ml/cnxk: tvmdp not found')
+ enable_mvtvm = false
+endif
+
driver_sdk_headers = files(
'cn10k_ml_dev.h',
'cn10k_ml_ops.h',
@@ -34,6 +60,39 @@ sources = files(
deps += ['mldev', 'common_cnxk', 'kvargs', 'hash']
+if enable_mvtvm
+
+dpdk_conf.set('RTE_MLDEV_CNXK_ENABLE_MVTVM', 1)
+
+driver_sdk_headers += files(
+ 'mvtvm_ml_ops.h',
+)
+
+sources += files(
+ 'mvtvm_ml_ops.c',
+)
+
+ext_deps += tvmrt_dep
+ext_deps += tvmdp_dep
+ext_deps += cc.find_library('stdc++', required: true)
+ext_deps += jansson_dep
+
+deps += ['bus_vdev']
+
+message('drivers/ml/cnxk: Enabled TVM model support')
+else
+message('drivers/ml/cnxk: Disabled TVM model support')
+
+driver_sdk_headers += files(
+ 'mvtvm_ml_stubs.h',
+)
+
+sources += files(
+ 'mvtvm_ml_stubs.c',
+)
+
+endif
+
require_iova_in_mbuf = false
if get_option('buildtype').contains('debug')
new file mode 100644
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2023 Marvell.
+ */
+
+#include <rte_common.h>
+#include <rte_cycles.h>
+#include <rte_mldev.h>
+#include <rte_mldev_pmd.h>
+
+#include "cnxk_ml_dev.h"
+#include "cnxk_ml_ops.h"
+
+int
+mvtvm_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_dev_config *conf)
+{
+ int ret;
+
+ RTE_SET_USED(conf);
+
+ /* Configure TVMDP library */
+ ret = tvmdp_configure(cnxk_mldev->mldev->data->nb_models, rte_get_tsc_cycles);
+ if (ret != 0)
+ plt_err("TVMDP configuration failed, error = %d\n", ret);
+
+ return ret;
+}
+
+int
+mvtvm_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev)
+{
+ int ret;
+
+ RTE_SET_USED(cnxk_mldev);
+
+ /* Close TVMDP library configuration */
+ ret = tvmdp_close();
+ if (ret != 0)
+ plt_err("TVMDP close failed, error = %d\n", ret);
+
+ return ret;
+}
new file mode 100644
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2023 Marvell.
+ */
+
+#ifndef _MVTVM_ML_OPS_H_
+#define _MVTVM_ML_OPS_H_
+
+#include <dlpack/dlpack.h>
+
+#include <tvmdp.h>
+
+#include <rte_mldev.h>
+
+struct cnxk_ml_dev;
+
+int mvtvm_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_dev_config *conf);
+int mvtvm_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev);
+
+#endif /* _MVTVM_ML_OPS_H_ */
new file mode 100644
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2023 Marvell.
+ */
+
+#include <rte_mldev.h>
+
+#include "mvtvm_ml_stubs.h"
+
+#include "cnxk_ml_dev.h"
+
+int
+mvtvm_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_dev_config *conf)
+{
+ RTE_SET_USED(cnxk_mldev);
+ RTE_SET_USED(conf);
+
+ return 0;
+}
+
+int
+mvtvm_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev)
+{
+ RTE_SET_USED(cnxk_mldev);
+
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2023 Marvell.
+ */
+
+#ifndef _MVTVM_ML_STUBS_H_
+#define _MVTVM_ML_STUBS_H_
+
+#include <rte_mldev.h>
+
+struct cnxk_ml_dev;
+
+int mvtvm_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, const struct rte_ml_dev_config *conf);
+int mvtvm_ml_dev_close(struct cnxk_ml_dev *cnxk_mldev);
+
+#endif /* _MVTVM_ML_STUBS_H_ */