From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 8E1BDA052A;
	Sun, 12 Jul 2020 23:00:58 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id AB5C21D561;
	Sun, 12 Jul 2020 22:59:58 +0200 (CEST)
Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])
 by dpdk.org (Postfix) with ESMTP id 594A21D55C
 for <dev@dpdk.org>; Sun, 12 Jul 2020 22:59:56 +0200 (CEST)
Received: from Internal Mail-Server by MTLPINE1 (envelope-from
 orika@mellanox.com) with SMTP; 12 Jul 2020 23:59:53 +0300
Received: from pegasus04.mtr.labs.mlnx. (pegasus04.mtr.labs.mlnx
 [10.210.16.126])
 by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 06CKxFG5025997;
 Sun, 12 Jul 2020 23:59:53 +0300
From: Ori Kam <orika@mellanox.com>
To: jerinj@marvell.com, xiang.w.wang@intel.com, matan@mellanox.com,
 viacheslavo@mellanox.com
Cc: guyk@marvell.com, dev@dpdk.org, pbhagavatula@marvell.com,
 shahafs@mellanox.com, hemant.agrawal@nxp.com, opher@mellanox.com,
 alexr@mellanox.com, dovrat@marvell.com, pkapoor@marvell.com,
 nipun.gupta@nxp.com, bruce.richardson@intel.com, yang.a.hong@intel.com,
 harry.chang@intel.com, gu.jian1@zte.com.cn, shanjiangh@chinatelecom.cn,
 zhangy.yun@chinatelecom.cn, lixingfu@huachentel.com,
 wushuai@inspur.com, yuyingxia@yxlink.com, fanchenggang@sunyainfo.com,
 davidfgao@tencent.com, liuzhong1@chinaunicom.cn, zhaoyong11@huawei.com,
 oc@yunify.com, jim@netgate.com, hongjun.ni@intel.com, deri@ntop.org,
 fc@napatech.com, arthur.su@lionic.com, thomas@monjalon.net,
 orika@mellanox.com, rasland@mellanox.com
Date: Sun, 12 Jul 2020 20:58:51 +0000
Message-Id: <1594587541-110442-11-git-send-email-orika@mellanox.com>
X-Mailer: git-send-email 1.8.3.1
In-Reply-To: <1594587541-110442-1-git-send-email-orika@mellanox.com>
References: <1593941027-86651-1-git-send-email-orika@mellanox.com>
 <1594587541-110442-1-git-send-email-orika@mellanox.com>
Subject: [dpdk-dev] [PATCH v2 10/20] regex/mlx5: add engine status check
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

This commit checks the engine status.

Signed-off-by: Ori Kam <orika@mellanox.com>
---
 drivers/regex/mlx5/mlx5_regex.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/regex/mlx5/mlx5_regex.c b/drivers/regex/mlx5/mlx5_regex.c
index d264ecd..c469a10 100644
--- a/drivers/regex/mlx5/mlx5_regex.c
+++ b/drivers/regex/mlx5/mlx5_regex.c
@@ -17,6 +17,7 @@
 
 #include "mlx5_regex.h"
 #include "mlx5_regex_utils.h"
+#include "mlx5_rxp_csrs.h"
 
 int mlx5_regex_logtype;
 
@@ -49,6 +50,28 @@
 	mlx5_glue->free_device_list(ibv_list);
 	return ibv_match;
 }
+static int
+mlx5_regex_engines_status(struct ibv_context *ctx, int num_engines)
+{
+	uint32_t fpga_ident = 0;
+	int err;
+	int i;
+
+	for (i = 0; i < num_engines; i++) {
+		err = mlx5_devx_regex_register_read(ctx, i,
+						    MLX5_RXP_CSR_IDENTIFIER,
+						    &fpga_ident);
+		fpga_ident = (fpga_ident & (0x0000FFFF));
+		if (err || fpga_ident != MLX5_RXP_IDENTIFER) {
+			DRV_LOG(ERR, "Failed setup RXP %d err %d database "
+				"memory 0x%x", i, err, fpga_ident);
+			if (!err)
+				err = EINVAL;
+			return err;
+		}
+	}
+	return 0;
+}
 
 static void
 mlx5_regex_get_name(char *name, struct rte_pci_device *pci_dev __rte_unused)
@@ -109,6 +132,11 @@
 		rte_errno = ENOTSUP;
 		goto error;
 	}
+	if (mlx5_regex_engines_status(ctx, 2)) {
+		DRV_LOG(ERR, "RegEx engine error.");
+		rte_errno = ENOMEM;
+		goto error;
+	}
 	priv = rte_zmalloc("mlx5 regex device private", sizeof(*priv),
 			   RTE_CACHE_LINE_SIZE);
 	if (!priv) {
-- 
1.8.3.1