All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Duszynski <tduszynski@marvell.com>
To: Jakub Palider <jpalider@marvell.com>,
	Tomasz Duszynski <tduszynski@marvell.com>
Cc: <thomas@monjalon.net>, <dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>
Subject: [dpdk-dev] [PATCH v3 32/32] raw/cnxk_bphy: support for bphy selftest
Date: Mon, 21 Jun 2021 17:04:49 +0200	[thread overview]
Message-ID: <20210621150449.19070-33-tduszynski@marvell.com> (raw)
In-Reply-To: <20210621150449.19070-1-tduszynski@marvell.com>

Add support for performing selftest.

Signed-off-by: Jakub Palider <jpalider@marvell.com>
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
Reviewed-by: Jerin Jacob <jerinj@marvell.com>
---
 doc/guides/rawdevs/cnxk_bphy.rst  |   7 +-
 drivers/raw/cnxk_bphy/cnxk_bphy.c | 124 ++++++++++++++++++++++++++++++
 2 files changed, 127 insertions(+), 4 deletions(-)

diff --git a/doc/guides/rawdevs/cnxk_bphy.rst b/doc/guides/rawdevs/cnxk_bphy.rst
index 1e17d6071..bf7c00e6b 100644
--- a/doc/guides/rawdevs/cnxk_bphy.rst
+++ b/doc/guides/rawdevs/cnxk_bphy.rst
@@ -141,15 +141,14 @@ Message must have type set to ``CNXK_BPHY_IRQ_MSG_TYPE_MEM_GET``. There's a conv
 Self test
 ---------
 
-On EAL initialization, BPHY CGX/RPM devices will be probed and populated into
+On EAL initialization BPHY and BPHY CGX/RPM devices will be probed and populated into
 the raw devices. The rawdev ID of the device can be obtained using invocation
 of ``rte_rawdev_get_dev_id("NAME:x")`` from the test application, where:
 
-- NAME is the desired subsystem: use "BPHY_CGX" for
+- NAME is the desired subsystem: use "BPHY" for regular, and "BPHY_CGX" for
   RFOE module,
 - x is the device's bus id specified in "bus:device.func" (BDF) format.
 
 Use this identifier for further rawdev function calls.
 
-The driver's selftest rawdev API can be used to verify the BPHY CGX/RPM
-functionality.
+Selftest rawdev API can be used to verify the BPHY and BPHY CGX/RPM functionality.
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy.c b/drivers/raw/cnxk_bphy/cnxk_bphy.c
index 2a516ae73..9cb3f8d33 100644
--- a/drivers/raw/cnxk_bphy/cnxk_bphy.c
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy.c
@@ -11,6 +11,7 @@
 #include <rte_rawdev_pmd.h>
 
 #include <roc_api.h>
+#include <roc_bphy_irq.h>
 
 #include "cnxk_bphy_irq.h"
 #include "rte_pmd_bphy.h"
@@ -22,6 +23,128 @@ static const struct rte_pci_id pci_bphy_map[] = {
 	},
 };
 
+struct bphy_test {
+	int irq_num;
+	cnxk_bphy_intr_handler_t handler;
+	void *data;
+	int cpu;
+	bool handled_intr;
+	int handled_data;
+	int test_data;
+};
+
+static struct bphy_test *test;
+
+static void
+bphy_test_handler_fn(int irq_num, void *isr_data)
+{
+	test[irq_num].handled_intr = true;
+	test[irq_num].handled_data = *((int *)isr_data);
+}
+
+static int
+bphy_rawdev_selftest(uint16_t dev_id)
+{
+	unsigned int i, queues, descs;
+	uint64_t max_irq;
+	int ret;
+
+	queues = rte_rawdev_queue_count(dev_id);
+	if (queues == 0)
+		return -ENODEV;
+
+	ret = rte_rawdev_start(dev_id);
+	if (ret)
+		return ret;
+
+	ret = rte_rawdev_queue_conf_get(dev_id, CNXK_BPHY_DEF_QUEUE, &descs,
+					sizeof(descs));
+	if (ret)
+		goto err_desc;
+	if (descs != 1) {
+		ret = -ENODEV;
+		plt_err("Wrong number of descs reported\n");
+		goto err_desc;
+	}
+
+	ret = rte_pmd_bphy_intr_init(dev_id);
+	if (ret) {
+		plt_err("intr init failed");
+		return ret;
+	}
+
+	max_irq = cnxk_bphy_irq_max_get(dev_id);
+
+	test = rte_zmalloc("BPHY", max_irq * sizeof(*test), 0);
+	if (test == NULL) {
+		plt_err("intr alloc failed");
+		goto err_alloc;
+	}
+
+	for (i = 0; i < max_irq; i++) {
+		test[i].test_data = i;
+		test[i].irq_num = i;
+		test[i].handler = bphy_test_handler_fn;
+		test[i].data = &test[i].test_data;
+	}
+
+	for (i = 0; i < max_irq; i++) {
+		ret = rte_pmd_bphy_intr_register(dev_id, test[i].irq_num,
+						 test[i].handler, test[i].data,
+						 0);
+		if (ret == -ENOTSUP) {
+			/* In the test we iterate over all irq numbers
+			 * so if some of them are not supported by given
+			 * platform we treat respective results as valid
+			 * ones. This way they have no impact on overall
+			 * test results.
+			 */
+			test[i].handled_intr = true;
+			test[i].handled_data = test[i].test_data;
+			ret = 0;
+			continue;
+		}
+
+		if (ret) {
+			plt_err("intr register failed at irq %d", i);
+			goto err_register;
+		}
+	}
+
+	for (i = 0; i < max_irq; i++)
+		roc_bphy_intr_handler(i);
+
+	for (i = 0; i < max_irq; i++) {
+		if (!test[i].handled_intr) {
+			plt_err("intr %u not handled", i);
+			ret = -1;
+			break;
+		}
+		if (test[i].handled_data != test[i].test_data) {
+			plt_err("intr %u has wrong handler", i);
+			ret = -1;
+			break;
+		}
+	}
+
+err_register:
+	/*
+	 * In case of registration failure the loop goes over all
+	 * interrupts which is safe due to internal guards in
+	 * rte_pmd_bphy_intr_unregister().
+	 */
+	for (i = 0; i < max_irq; i++)
+		rte_pmd_bphy_intr_unregister(dev_id, i);
+
+	rte_free(test);
+err_alloc:
+	rte_pmd_bphy_intr_fini(dev_id);
+err_desc:
+	rte_rawdev_stop(dev_id);
+
+	return ret;
+}
+
 static void
 bphy_rawdev_get_name(char *name, struct rte_pci_device *pci_dev)
 {
@@ -122,6 +245,7 @@ static const struct rte_rawdev_ops bphy_rawdev_ops = {
 	.enqueue_bufs = cnxk_bphy_irq_enqueue_bufs,
 	.dequeue_bufs = cnxk_bphy_irq_dequeue_bufs,
 	.queue_count = cnxk_bphy_irq_queue_count,
+	.dev_selftest = bphy_rawdev_selftest,
 };
 
 static int
-- 
2.25.1


  parent reply	other threads:[~2021-06-21 15:08 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-31 21:41 [dpdk-dev] [PATCH 00/28] add support for baseband phy Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 01/28] common/cnxk: add bphy cgx/rpm initialization and cleanup Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 02/28] common/cnxk: add support for communication with atf Tomasz Duszynski
2021-06-10  5:06   ` Jerin Jacob
2021-05-31 21:41 ` [dpdk-dev] [PATCH 03/28] common/cnxk: add support for getting link information Tomasz Duszynski
2021-06-10  5:09   ` Jerin Jacob
2021-05-31 21:41 ` [dpdk-dev] [PATCH 04/28] common/cnxk: add support for changing internal loopback Tomasz Duszynski
2021-06-10  6:19   ` Jerin Jacob
2021-05-31 21:41 ` [dpdk-dev] [PATCH 05/28] common/cnxk: add support for changing ptp mode Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 06/28] common/cnxk: add support for setting link mode Tomasz Duszynski
2021-06-10  6:21   ` Jerin Jacob
2021-05-31 21:41 ` [dpdk-dev] [PATCH 07/28] common/cnxk: add support for changing link state Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 08/28] common/cnxk: add support for lmac start/stop Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 09/28] raw/cnxk_bphy: add bphy cgx/rpm skeleton driver Tomasz Duszynski
2021-06-01  7:30   ` Thomas Monjalon
2021-06-10  6:40   ` Jerin Jacob
2021-05-31 21:41 ` [dpdk-dev] [PATCH 10/28] raw/cnxk_bphy: add support for reading queue configuration Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 11/28] raw/cnxk_bphy: add support for reading queue count Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 12/28] raw/cnxk_bphy: add support for enqueue operation Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 13/28] raw/cnxk_bphy: add support for dequeue operation Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 14/28] raw/cnxk_bphy: add support for performing selftest Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 15/28] common/cnxk: add support for device init and fini Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 16/28] common/cnxk: add support for baseband phy irq setup Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 17/28] common/cnxk: add support for checking irq availability Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 18/28] common/cnxk: add support for retrieving irq stack Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 19/28] common/cnxk: add support for removing " Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 20/28] common/cnxk: add support for setting bphy irq handler Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 21/28] common/cnxk: add support for clearing " Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 22/28] common/cnxk: add support for registering bphy irq Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 23/28] raw/cnxk_bphy: add baseband phy skeleton driver Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 24/28] raw/cnxk_bphy: add support for interrupt init and cleanup Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 25/28] raw/cnxk_bphy: add support for reading number of irqs Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 26/28] raw/cnxk_bphy: add support for retrieving device memory Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 27/28] raw/cnxk_bphy: add support for registering irq handlers Tomasz Duszynski
2021-05-31 21:41 ` [dpdk-dev] [PATCH 28/28] raw/cnxk_bphy: add support for selftest Tomasz Duszynski
2021-06-10  6:54 ` [dpdk-dev] [PATCH 00/28] add support for baseband phy Jerin Jacob
2021-06-15 11:03 ` [dpdk-dev] [PATCH v2 00/32] " Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 01/32] common/cnxk: add bphy cgx/rpm initialization and cleanup Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 02/32] common/cnxk: support for communication with atf Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 03/32] common/cnxk: support for getting link information Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 04/32] common/cnxk: support for changing internal loopback Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 05/32] common/cnxk: support for changing ptp mode Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 06/32] common/cnxk: support for setting link mode Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 07/32] common/cnxk: support for changing link state Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 08/32] common/cnxk: support for lmac start/stop Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 09/32] raw/cnxk_bphy: add bphy cgx/rpm skeleton driver Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 10/32] raw/cnxk_bphy: support for reading queue configuration Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 11/32] raw/cnxk_bphy: support for reading queue count Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 12/32] raw/cnxk_bphy: support for enqueue operation Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 13/32] raw/cnxk_bphy: support for dequeue operation Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 14/32] raw/cnxk_bphy: support for performing selftest Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 15/32] common/cnxk: support for device init and fini Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 16/32] common/cnxk: support for baseband PHY irq setup Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 17/32] common/cnxk: support for checking irq availability Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 18/32] common/cnxk: support for retrieving irq stack Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 19/32] common/cnxk: support for removing " Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 20/32] common/cnxk: support for setting bphy irq handler Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 21/32] common/cnxk: support for clearing " Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 22/32] common/cnxk: support for registering bphy irq Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 23/32] raw/cnxk_bphy: add baseband PHY skeleton driver Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 24/32] raw/cnxk_bphy: support for reading bphy queue configuration Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 25/32] raw/cnxk_bphy: support for reading bphy queue count Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 26/32] raw/cnxk_bphy: support for bphy enqueue operation Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 27/32] raw/cnxk_bphy: support for bphy dequeue operation Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 28/32] raw/cnxk_bphy: support for interrupt init and cleanup Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 29/32] raw/cnxk_bphy: support for reading number of bphy irqs Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 30/32] raw/cnxk_bphy: support for retrieving bphy device memory Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 31/32] raw/cnxk_bphy: support for registering bphy irq handlers Tomasz Duszynski
2021-06-15 11:03   ` [dpdk-dev] [PATCH v2 32/32] raw/cnxk_bphy: support for bphy selftest Tomasz Duszynski
2021-06-21  8:43   ` [dpdk-dev] [PATCH v2 00/32] add support for baseband phy Jerin Jacob
2021-06-21 15:04 ` [dpdk-dev] [PATCH v3 " Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 01/32] common/cnxk: add bphy cgx/rpm initialization and cleanup Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 02/32] common/cnxk: support for communication with atf Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 03/32] common/cnxk: support for getting link information Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 04/32] common/cnxk: support for changing internal loopback Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 05/32] common/cnxk: support for changing ptp mode Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 06/32] common/cnxk: support for setting link mode Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 07/32] common/cnxk: support for changing link state Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 08/32] common/cnxk: support for lmac start/stop Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 09/32] raw/cnxk_bphy: add bphy cgx/rpm skeleton driver Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 10/32] raw/cnxk_bphy: support for reading queue configuration Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 11/32] raw/cnxk_bphy: support for reading queue count Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 12/32] raw/cnxk_bphy: support for enqueue operation Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 13/32] raw/cnxk_bphy: support for dequeue operation Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 14/32] raw/cnxk_bphy: support for performing selftest Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 15/32] common/cnxk: support for device init and fini Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 16/32] common/cnxk: support for baseband PHY irq setup Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 17/32] common/cnxk: support for checking irq availability Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 18/32] common/cnxk: support for retrieving irq stack Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 19/32] common/cnxk: support for removing " Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 20/32] common/cnxk: support for setting bphy irq handler Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 21/32] common/cnxk: support for clearing " Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 22/32] common/cnxk: support for registering bphy irq Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 23/32] raw/cnxk_bphy: add baseband PHY skeleton driver Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 24/32] raw/cnxk_bphy: support for reading bphy queue configuration Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 25/32] raw/cnxk_bphy: support for reading bphy queue count Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 26/32] raw/cnxk_bphy: support for bphy enqueue operation Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 27/32] raw/cnxk_bphy: support for bphy dequeue operation Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 28/32] raw/cnxk_bphy: support for interrupt init and cleanup Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 29/32] raw/cnxk_bphy: support for reading number of bphy irqs Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 30/32] raw/cnxk_bphy: support for retrieving bphy device memory Tomasz Duszynski
2021-06-21 15:04   ` [dpdk-dev] [PATCH v3 31/32] raw/cnxk_bphy: support for registering bphy irq handlers Tomasz Duszynski
2021-06-21 15:04   ` Tomasz Duszynski [this message]
2021-07-05 21:12   ` [dpdk-dev] [PATCH v3 00/32] add support for baseband phy Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210621150449.19070-33-tduszynski@marvell.com \
    --to=tduszynski@marvell.com \
    --cc=dev@dpdk.org \
    --cc=jerinj@marvell.com \
    --cc=jpalider@marvell.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.