common/cnxk: add telemetry endpoints to SSO

Message ID 20211213204309.5432-1-pbhagavatula@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series common/cnxk: add telemetry endpoints to SSO |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-broadcom-Functional success Functional Testing PASS
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance fail Performance Testing issues
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

Pavan Nikhilesh Bhagavatula Dec. 13, 2021, 8:43 p.m. UTC
  From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Add common telemetry endpoints for SSO.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 drivers/common/cnxk/cnxk_telemetry_sso.c | 50 ++++++++++++++++++++++++
 drivers/common/cnxk/meson.build          |  4 +-
 drivers/common/cnxk/roc_idev.c           | 20 ++++++++++
 drivers/common/cnxk/roc_idev_priv.h      |  3 ++
 drivers/common/cnxk/roc_sso.c            |  1 +
 drivers/common/cnxk/roc_sso_priv.h       |  1 +
 drivers/common/cnxk/roc_utils.c          |  3 ++
 7 files changed, 81 insertions(+), 1 deletion(-)
 create mode 100644 drivers/common/cnxk/cnxk_telemetry_sso.c
  

Comments

Jerin Jacob Jan. 24, 2022, 9:05 a.m. UTC | #1
On Tue, Dec 14, 2021 at 2:13 AM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Add common telemetry endpoints for SSO.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>


Applied to dpdk-next-net-eventdev/for-main. Thanks


> ---
>  drivers/common/cnxk/cnxk_telemetry_sso.c | 50 ++++++++++++++++++++++++
>  drivers/common/cnxk/meson.build          |  4 +-
>  drivers/common/cnxk/roc_idev.c           | 20 ++++++++++
>  drivers/common/cnxk/roc_idev_priv.h      |  3 ++
>  drivers/common/cnxk/roc_sso.c            |  1 +
>  drivers/common/cnxk/roc_sso_priv.h       |  1 +
>  drivers/common/cnxk/roc_utils.c          |  3 ++
>  7 files changed, 81 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/common/cnxk/cnxk_telemetry_sso.c
>
> diff --git a/drivers/common/cnxk/cnxk_telemetry_sso.c b/drivers/common/cnxk/cnxk_telemetry_sso.c
> new file mode 100644
> index 0000000000..822934ebd7
> --- /dev/null
> +++ b/drivers/common/cnxk/cnxk_telemetry_sso.c
> @@ -0,0 +1,50 @@
> +
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright(C) 2021 Marvell.
> + */
> +
> +#include <unistd.h>
> +
> +#include "cnxk_telemetry.h"
> +#include "roc_api.h"
> +#include "roc_priv.h"
> +
> +static int
> +cnxk_tel_sso(struct plt_tel_data *d)
> +{
> +       struct roc_sso *roc_sso;
> +       struct sso *sso;
> +
> +       roc_sso = idev_sso_get();
> +       if (roc_sso == NULL)
> +               return SSO_ERR_DEVICE_NOT_BOUNDED;
> +
> +       sso = roc_sso_to_sso_priv(roc_sso);
> +       plt_tel_data_add_dict_ptr(d, "roc_sso", roc_sso);
> +       plt_tel_data_add_dict_ptr(d, "sso", sso);
> +       plt_tel_data_add_dict_int(d, "max_hws", roc_sso->max_hws);
> +       plt_tel_data_add_dict_int(d, "max_hwgrp", roc_sso->max_hwgrp);
> +       plt_tel_data_add_dict_int(d, "nb_hws", roc_sso->nb_hws);
> +       plt_tel_data_add_dict_int(d, "nb_hwgrp", roc_sso->nb_hwgrp);
> +       plt_tel_data_add_dict_int(d, "pf_func", sso->dev.pf_func);
> +       plt_tel_data_add_dict_int(d, "pid", getpid());
> +
> +       return 0;
> +}
> +
> +static int
> +cnxk_sso_tel_handle_info(const char *cmd __plt_unused,
> +                        const char *params __plt_unused,
> +                        struct plt_tel_data *d)
> +{
> +       plt_tel_data_start_dict(d);
> +       cnxk_tel_sso(d);
> +       return 0;
> +}
> +
> +PLT_INIT(cnxk_telemetry_sso_init)
> +{
> +       plt_telemetry_register_cmd(
> +               "/cnxk/sso/info", cnxk_sso_tel_handle_info,
> +               "Returns sso information. Takes no parameters");
> +}
> diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
> index 4928f7e549..88407af828 100644
> --- a/drivers/common/cnxk/meson.build
> +++ b/drivers/common/cnxk/meson.build
> @@ -77,6 +77,8 @@ includes += include_directories('../../../lib/meter')
>  # Telemetry common code
>  sources += files('cnxk_telemetry_bphy.c',
>                   'cnxk_telemetry_npa.c',
> -                 'cnxk_telemetry_nix.c')
> +                 'cnxk_telemetry_nix.c',
> +                 'cnxk_telemetry_sso.c',
> +)
>
>  deps += ['bus_pci', 'net', 'telemetry']
> diff --git a/drivers/common/cnxk/roc_idev.c b/drivers/common/cnxk/roc_idev.c
> index 648f37b3bb..b1f38fb5fc 100644
> --- a/drivers/common/cnxk/roc_idev.c
> +++ b/drivers/common/cnxk/roc_idev.c
> @@ -206,3 +206,23 @@ roc_idev_npa_nix_get(void)
>         dev = container_of(npa_lf, struct dev, npa);
>         return dev->roc_nix;
>  }
> +
> +struct roc_sso *
> +idev_sso_get(void)
> +{
> +       struct idev_cfg *idev = idev_get_cfg();
> +
> +       if (idev != NULL)
> +               return __atomic_load_n(&idev->sso, __ATOMIC_ACQUIRE);
> +
> +       return NULL;
> +}
> +
> +void
> +idev_sso_set(struct roc_sso *sso)
> +{
> +       struct idev_cfg *idev = idev_get_cfg();
> +
> +       if (idev != NULL)
> +               __atomic_store_n(&idev->sso, sso, __ATOMIC_RELEASE);
> +}
> diff --git a/drivers/common/cnxk/roc_idev_priv.h b/drivers/common/cnxk/roc_idev_priv.h
> index 2c8309b8fd..46eebffcbb 100644
> --- a/drivers/common/cnxk/roc_idev_priv.h
> +++ b/drivers/common/cnxk/roc_idev_priv.h
> @@ -21,6 +21,7 @@ struct idev_cfg {
>         uint64_t lmt_base_addr;
>         struct roc_bphy *bphy;
>         struct roc_cpt *cpt;
> +       struct roc_sso *sso;
>         struct nix_inl_dev *nix_inl_dev;
>         plt_spinlock_t nix_inl_dev_lock;
>  };
> @@ -39,6 +40,8 @@ uint16_t idev_npa_lf_active(struct dev *dev);
>  /* idev sso */
>  void idev_sso_pffunc_set(uint16_t sso_pf_func);
>  uint16_t idev_sso_pffunc_get(void);
> +struct roc_sso *idev_sso_get(void);
> +void idev_sso_set(struct roc_sso *sso);
>
>  /* idev lmt */
>  uint16_t idev_lmt_pffunc_get(void);
> diff --git a/drivers/common/cnxk/roc_sso.c b/drivers/common/cnxk/roc_sso.c
> index 45ff16ca0e..1b85f04970 100644
> --- a/drivers/common/cnxk/roc_sso.c
> +++ b/drivers/common/cnxk/roc_sso.c
> @@ -726,6 +726,7 @@ roc_sso_dev_init(struct roc_sso *roc_sso)
>                 link_mem = PLT_PTR_ADD(link_mem, link_map_sz);
>         }
>         idev_sso_pffunc_set(sso->dev.pf_func);
> +       idev_sso_set(roc_sso);
>         sso->pci_dev = pci_dev;
>         sso->dev.drv_inited = true;
>         roc_sso->lmt_base = sso->dev.lmt_base;
> diff --git a/drivers/common/cnxk/roc_sso_priv.h b/drivers/common/cnxk/roc_sso_priv.h
> index 2e1b025d1c..09729d4f62 100644
> --- a/drivers/common/cnxk/roc_sso_priv.h
> +++ b/drivers/common/cnxk/roc_sso_priv.h
> @@ -26,6 +26,7 @@ struct sso {
>
>  enum sso_err_status {
>         SSO_ERR_PARAM = -4096,
> +       SSO_ERR_DEVICE_NOT_BOUNDED = -4097,
>  };
>
>  enum sso_lf_type {
> diff --git a/drivers/common/cnxk/roc_utils.c b/drivers/common/cnxk/roc_utils.c
> index f1b5ef3b70..495e62a315 100644
> --- a/drivers/common/cnxk/roc_utils.c
> +++ b/drivers/common/cnxk/roc_utils.c
> @@ -220,6 +220,9 @@ roc_error_msg_get(int errorcode)
>         case NIX_AF_ERR_PTP_CONFIG_FAIL:
>                 err_msg = "PTP config failed";
>                 break;
> +       case SSO_ERR_DEVICE_NOT_BOUNDED:
> +               err_msg = "SSO pf/vf not found";
> +               break;
>         case UTIL_ERR_FS:
>                 err_msg = "file operation failed";
>                 break;
> --
> 2.17.1
>
  

Patch

diff --git a/drivers/common/cnxk/cnxk_telemetry_sso.c b/drivers/common/cnxk/cnxk_telemetry_sso.c
new file mode 100644
index 0000000000..822934ebd7
--- /dev/null
+++ b/drivers/common/cnxk/cnxk_telemetry_sso.c
@@ -0,0 +1,50 @@ 
+
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include <unistd.h>
+
+#include "cnxk_telemetry.h"
+#include "roc_api.h"
+#include "roc_priv.h"
+
+static int
+cnxk_tel_sso(struct plt_tel_data *d)
+{
+	struct roc_sso *roc_sso;
+	struct sso *sso;
+
+	roc_sso = idev_sso_get();
+	if (roc_sso == NULL)
+		return SSO_ERR_DEVICE_NOT_BOUNDED;
+
+	sso = roc_sso_to_sso_priv(roc_sso);
+	plt_tel_data_add_dict_ptr(d, "roc_sso", roc_sso);
+	plt_tel_data_add_dict_ptr(d, "sso", sso);
+	plt_tel_data_add_dict_int(d, "max_hws", roc_sso->max_hws);
+	plt_tel_data_add_dict_int(d, "max_hwgrp", roc_sso->max_hwgrp);
+	plt_tel_data_add_dict_int(d, "nb_hws", roc_sso->nb_hws);
+	plt_tel_data_add_dict_int(d, "nb_hwgrp", roc_sso->nb_hwgrp);
+	plt_tel_data_add_dict_int(d, "pf_func", sso->dev.pf_func);
+	plt_tel_data_add_dict_int(d, "pid", getpid());
+
+	return 0;
+}
+
+static int
+cnxk_sso_tel_handle_info(const char *cmd __plt_unused,
+			 const char *params __plt_unused,
+			 struct plt_tel_data *d)
+{
+	plt_tel_data_start_dict(d);
+	cnxk_tel_sso(d);
+	return 0;
+}
+
+PLT_INIT(cnxk_telemetry_sso_init)
+{
+	plt_telemetry_register_cmd(
+		"/cnxk/sso/info", cnxk_sso_tel_handle_info,
+		"Returns sso information. Takes no parameters");
+}
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index 4928f7e549..88407af828 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -77,6 +77,8 @@  includes += include_directories('../../../lib/meter')
 # Telemetry common code
 sources += files('cnxk_telemetry_bphy.c',
                  'cnxk_telemetry_npa.c',
-                 'cnxk_telemetry_nix.c')
+                 'cnxk_telemetry_nix.c',
+                 'cnxk_telemetry_sso.c',
+)
 
 deps += ['bus_pci', 'net', 'telemetry']
diff --git a/drivers/common/cnxk/roc_idev.c b/drivers/common/cnxk/roc_idev.c
index 648f37b3bb..b1f38fb5fc 100644
--- a/drivers/common/cnxk/roc_idev.c
+++ b/drivers/common/cnxk/roc_idev.c
@@ -206,3 +206,23 @@  roc_idev_npa_nix_get(void)
 	dev = container_of(npa_lf, struct dev, npa);
 	return dev->roc_nix;
 }
+
+struct roc_sso *
+idev_sso_get(void)
+{
+	struct idev_cfg *idev = idev_get_cfg();
+
+	if (idev != NULL)
+		return __atomic_load_n(&idev->sso, __ATOMIC_ACQUIRE);
+
+	return NULL;
+}
+
+void
+idev_sso_set(struct roc_sso *sso)
+{
+	struct idev_cfg *idev = idev_get_cfg();
+
+	if (idev != NULL)
+		__atomic_store_n(&idev->sso, sso, __ATOMIC_RELEASE);
+}
diff --git a/drivers/common/cnxk/roc_idev_priv.h b/drivers/common/cnxk/roc_idev_priv.h
index 2c8309b8fd..46eebffcbb 100644
--- a/drivers/common/cnxk/roc_idev_priv.h
+++ b/drivers/common/cnxk/roc_idev_priv.h
@@ -21,6 +21,7 @@  struct idev_cfg {
 	uint64_t lmt_base_addr;
 	struct roc_bphy *bphy;
 	struct roc_cpt *cpt;
+	struct roc_sso *sso;
 	struct nix_inl_dev *nix_inl_dev;
 	plt_spinlock_t nix_inl_dev_lock;
 };
@@ -39,6 +40,8 @@  uint16_t idev_npa_lf_active(struct dev *dev);
 /* idev sso */
 void idev_sso_pffunc_set(uint16_t sso_pf_func);
 uint16_t idev_sso_pffunc_get(void);
+struct roc_sso *idev_sso_get(void);
+void idev_sso_set(struct roc_sso *sso);
 
 /* idev lmt */
 uint16_t idev_lmt_pffunc_get(void);
diff --git a/drivers/common/cnxk/roc_sso.c b/drivers/common/cnxk/roc_sso.c
index 45ff16ca0e..1b85f04970 100644
--- a/drivers/common/cnxk/roc_sso.c
+++ b/drivers/common/cnxk/roc_sso.c
@@ -726,6 +726,7 @@  roc_sso_dev_init(struct roc_sso *roc_sso)
 		link_mem = PLT_PTR_ADD(link_mem, link_map_sz);
 	}
 	idev_sso_pffunc_set(sso->dev.pf_func);
+	idev_sso_set(roc_sso);
 	sso->pci_dev = pci_dev;
 	sso->dev.drv_inited = true;
 	roc_sso->lmt_base = sso->dev.lmt_base;
diff --git a/drivers/common/cnxk/roc_sso_priv.h b/drivers/common/cnxk/roc_sso_priv.h
index 2e1b025d1c..09729d4f62 100644
--- a/drivers/common/cnxk/roc_sso_priv.h
+++ b/drivers/common/cnxk/roc_sso_priv.h
@@ -26,6 +26,7 @@  struct sso {
 
 enum sso_err_status {
 	SSO_ERR_PARAM = -4096,
+	SSO_ERR_DEVICE_NOT_BOUNDED = -4097,
 };
 
 enum sso_lf_type {
diff --git a/drivers/common/cnxk/roc_utils.c b/drivers/common/cnxk/roc_utils.c
index f1b5ef3b70..495e62a315 100644
--- a/drivers/common/cnxk/roc_utils.c
+++ b/drivers/common/cnxk/roc_utils.c
@@ -220,6 +220,9 @@  roc_error_msg_get(int errorcode)
 	case NIX_AF_ERR_PTP_CONFIG_FAIL:
 		err_msg = "PTP config failed";
 		break;
+	case SSO_ERR_DEVICE_NOT_BOUNDED:
+		err_msg = "SSO pf/vf not found";
+		break;
 	case UTIL_ERR_FS:
 		err_msg = "file operation failed";
 		break;