Torsten Duwe d6effd
From 1c94d8035905c10f4930708a9944f2ee65d26f47 Mon Sep 17 00:00:00 2001
Torsten Duwe d6effd
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe d6effd
Date: Thu, 16 Dec 2021 09:13:22 +0000
Torsten Duwe d6effd
Subject: [PATCH] crypto: qat - leverage read_poll_timeout in PFVF send
Torsten Duwe d6effd
Git-commit: 1c94d8035905c10f4930708a9944f2ee65d26f47
Torsten Duwe d6effd
Patch-mainline: v5.17-rc1
Torsten Duwe d6effd
References: jsc#PED-1073
Torsten Duwe d6effd
Torsten Duwe d6effd
Replace the polling loop, waiting for the remote end to acknowledge
Torsten Duwe d6effd
the reception of the message, with the equivalent and standard
Torsten Duwe d6effd
read_poll_timeout() in adf_gen2_pfvf_send().
Torsten Duwe d6effd
Torsten Duwe d6effd
Also, the use of the read_poll_timeout():
Torsten Duwe d6effd
- implies the use of microseconds for the timings, so update the previous
Torsten Duwe d6effd
  values from ms to us
Torsten Duwe d6effd
- allows to leverage the return value for both success and error,
Torsten Duwe d6effd
  removing the need for the reset of the 'ret' variable soon after the
Torsten Duwe d6effd
  'start' label.
Torsten Duwe d6effd
Torsten Duwe d6effd
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe d6effd
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe d6effd
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe d6effd
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Torsten Duwe d6effd
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe d6effd
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe d6effd
Torsten Duwe d6effd
---
Torsten Duwe d6effd
 drivers/crypto/qat/qat_common/adf_gen2_pfvf.c | 20 ++++++++-----------
Torsten Duwe d6effd
 1 file changed, 8 insertions(+), 12 deletions(-)
Torsten Duwe d6effd
Torsten Duwe d6effd
diff --git a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe d6effd
index 7a927bea4ac67..53c2e124944db 100644
Torsten Duwe d6effd
--- a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe d6effd
+++ b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe d6effd
@@ -1,6 +1,7 @@
Torsten Duwe d6effd
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe d6effd
 /* Copyright(c) 2021 Intel Corporation */
Torsten Duwe d6effd
 #include <linux/delay.h>
Torsten Duwe d6effd
+#include <linux/iopoll.h>
Torsten Duwe d6effd
 #include <linux/mutex.h>
Torsten Duwe d6effd
 #include <linux/types.h>
Torsten Duwe d6effd
 #include "adf_accel_devices.h"
Torsten Duwe d6effd
@@ -36,8 +37,8 @@ static const struct pfvf_csr_format csr_gen2_fmt = {
Torsten Duwe d6effd
 	{ ADF_PFVF_GEN2_MSGDATA_SHIFT, ADF_PFVF_GEN2_MSGDATA_MASK },
Torsten Duwe d6effd
 };
Torsten Duwe d6effd
 
Torsten Duwe d6effd
-#define ADF_PFVF_MSG_ACK_DELAY		2
Torsten Duwe d6effd
-#define ADF_PFVF_MSG_ACK_MAX_RETRY	100
Torsten Duwe d6effd
+#define ADF_PFVF_MSG_ACK_DELAY_US	2000
Torsten Duwe d6effd
+#define ADF_PFVF_MSG_ACK_MAX_DELAY_US	(ADF_PFVF_MSG_ACK_DELAY_US * 100)
Torsten Duwe d6effd
 
Torsten Duwe d6effd
 #define ADF_PFVF_MSG_RETRY_DELAY	5
Torsten Duwe d6effd
 #define ADF_PFVF_MSG_MAX_RETRIES	3
Torsten Duwe d6effd
@@ -143,7 +144,6 @@ static int adf_gen2_pfvf_send(struct adf_accel_dev *accel_dev,
Torsten Duwe d6effd
 	unsigned int retries = ADF_PFVF_MSG_MAX_RETRIES;
Torsten Duwe d6effd
 	struct mutex *lock = params->csr_lock;
Torsten Duwe d6effd
 	u32 pfvf_offset = params->pfvf_offset;
Torsten Duwe d6effd
-	u32 count = 0;
Torsten Duwe d6effd
 	u32 int_bit;
Torsten Duwe d6effd
 	u32 csr_val;
Torsten Duwe d6effd
 	u32 csr_msg;
Torsten Duwe d6effd
@@ -172,8 +172,6 @@ static int adf_gen2_pfvf_send(struct adf_accel_dev *accel_dev,
Torsten Duwe d6effd
 	mutex_lock(lock);
Torsten Duwe d6effd
 
Torsten Duwe d6effd
 start:
Torsten Duwe d6effd
-	ret = 0;
Torsten Duwe d6effd
-
Torsten Duwe d6effd
 	/* Check if the PFVF CSR is in use by remote function */
Torsten Duwe d6effd
 	csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
Torsten Duwe d6effd
 	if (gen2_csr_is_in_use(csr_val, local_offset)) {
Torsten Duwe d6effd
@@ -186,15 +184,13 @@ start:
Torsten Duwe d6effd
 	ADF_CSR_WR(pmisc_addr, pfvf_offset, csr_msg | int_bit);
Torsten Duwe d6effd
 
Torsten Duwe d6effd
 	/* Wait for confirmation from remote func it received the message */
Torsten Duwe d6effd
-	do {
Torsten Duwe d6effd
-		msleep(ADF_PFVF_MSG_ACK_DELAY);
Torsten Duwe d6effd
-		csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
Torsten Duwe d6effd
-	} while ((csr_val & int_bit) && (count++ < ADF_PFVF_MSG_ACK_MAX_RETRY));
Torsten Duwe d6effd
-
Torsten Duwe d6effd
-	if (csr_val & int_bit) {
Torsten Duwe d6effd
+	ret = read_poll_timeout(ADF_CSR_RD, csr_val, !(csr_val & int_bit),
Torsten Duwe d6effd
+				ADF_PFVF_MSG_ACK_DELAY_US,
Torsten Duwe d6effd
+				ADF_PFVF_MSG_ACK_MAX_DELAY_US,
Torsten Duwe d6effd
+				true, pmisc_addr, pfvf_offset);
Torsten Duwe d6effd
+	if (unlikely(ret < 0)) {
Torsten Duwe d6effd
 		dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
Torsten Duwe d6effd
 		csr_val &= ~int_bit;
Torsten Duwe d6effd
-		ret = -EIO;
Torsten Duwe d6effd
 	}
Torsten Duwe d6effd
 
Torsten Duwe d6effd
 	if (csr_val != csr_msg) {
Torsten Duwe d6effd
-- 
Torsten Duwe d6effd
2.35.3
Torsten Duwe d6effd