Torsten Duwe 2343cd
From aa3c68634df86280087e8a4f2d3ba751eee3c6b4 Mon Sep 17 00:00:00 2001
Torsten Duwe 2343cd
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 2343cd
Date: Tue, 28 Sep 2021 12:44:39 +0100
Torsten Duwe 2343cd
Subject: [PATCH] crypto: qat - extract send and wait from
Torsten Duwe 2343cd
 adf_vf2pf_request_version()
Torsten Duwe 2343cd
Git-commit: aa3c68634df86280087e8a4f2d3ba751eee3c6b4
Torsten Duwe 2343cd
Patch-mainline: v5.16-rc1
Torsten Duwe 2343cd
References: jsc#PED-1073
Torsten Duwe 2343cd
Torsten Duwe 2343cd
In the function adf_vf2pf_request_version(), the VF sends a request to
Torsten Duwe 2343cd
the PF and waits for a response before parsing and handling it.
Torsten Duwe 2343cd
Torsten Duwe 2343cd
Since this pattern will be used by other requests, define a new
Torsten Duwe 2343cd
function, adf_send_vf2pf_req(), that only deals with sending a VF2PF
Torsten Duwe 2343cd
request and waiting for a response.
Torsten Duwe 2343cd
Torsten Duwe 2343cd
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 2343cd
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 2343cd
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 2343cd
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe 2343cd
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe 2343cd
Torsten Duwe 2343cd
---
Torsten Duwe 2343cd
 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 50 ++++++++++++++-----
Torsten Duwe 2343cd
 1 file changed, 37 insertions(+), 13 deletions(-)
Torsten Duwe 2343cd
Torsten Duwe 2343cd
diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 2343cd
index 23bcbb2e22e2f..711f6e3f66735 100644
Torsten Duwe 2343cd
--- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 2343cd
+++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 2343cd
@@ -181,6 +181,42 @@ int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 2343cd
 	return adf_iov_putmsg(accel_dev, msg, 0);
Torsten Duwe 2343cd
 }
Torsten Duwe 2343cd
 
Torsten Duwe 2343cd
+/**
Torsten Duwe 2343cd
+ * adf_send_vf2pf_req() - send VF2PF request message
Torsten Duwe 2343cd
+ * @accel_dev:	Pointer to acceleration device.
Torsten Duwe 2343cd
+ * @msg:	Request message to send
Torsten Duwe 2343cd
+ *
Torsten Duwe 2343cd
+ * This function sends a message that requires a response from the VF to the PF
Torsten Duwe 2343cd
+ * and waits for a reply.
Torsten Duwe 2343cd
+ *
Torsten Duwe 2343cd
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 2343cd
+ */
Torsten Duwe 2343cd
+static int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 2343cd
+{
Torsten Duwe 2343cd
+	unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
Torsten Duwe 2343cd
+	int ret;
Torsten Duwe 2343cd
+
Torsten Duwe 2343cd
+	reinit_completion(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 2343cd
+
Torsten Duwe 2343cd
+	/* Send request from VF to PF */
Torsten Duwe 2343cd
+	ret = adf_send_vf2pf_msg(accel_dev, msg);
Torsten Duwe 2343cd
+	if (ret) {
Torsten Duwe 2343cd
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 2343cd
+			"Failed to send request msg to PF\n");
Torsten Duwe 2343cd
+		return ret;
Torsten Duwe 2343cd
+	}
Torsten Duwe 2343cd
+
Torsten Duwe 2343cd
+	/* Wait for response */
Torsten Duwe 2343cd
+	if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
Torsten Duwe 2343cd
+					 timeout)) {
Torsten Duwe 2343cd
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 2343cd
+			"PFVF request/response message timeout expired\n");
Torsten Duwe 2343cd
+		return -EIO;
Torsten Duwe 2343cd
+	}
Torsten Duwe 2343cd
+
Torsten Duwe 2343cd
+	return 0;
Torsten Duwe 2343cd
+}
Torsten Duwe 2343cd
+
Torsten Duwe 2343cd
 void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
Torsten Duwe 2343cd
 {
Torsten Duwe 2343cd
 	struct adf_accel_dev *accel_dev = vf_info->accel_dev;
Torsten Duwe 2343cd
@@ -306,7 +342,6 @@ void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
Torsten Duwe 2343cd
 
Torsten Duwe 2343cd
 static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
Torsten Duwe 2343cd
 {
Torsten Duwe 2343cd
-	unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
Torsten Duwe 2343cd
 	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe 2343cd
 	u32 msg = 0;
Torsten Duwe 2343cd
 	int ret;
Torsten Duwe 2343cd
@@ -316,24 +351,13 @@ static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
Torsten Duwe 2343cd
 	msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
Torsten Duwe 2343cd
 	BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
Torsten Duwe 2343cd
 
Torsten Duwe 2343cd
-	reinit_completion(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 2343cd
-
Torsten Duwe 2343cd
-	/* Send request from VF to PF */
Torsten Duwe 2343cd
-	ret = adf_send_vf2pf_msg(accel_dev, msg);
Torsten Duwe 2343cd
+	ret = adf_send_vf2pf_req(accel_dev, msg);
Torsten Duwe 2343cd
 	if (ret) {
Torsten Duwe 2343cd
 		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 2343cd
 			"Failed to send Compatibility Version Request.\n");
Torsten Duwe 2343cd
 		return ret;
Torsten Duwe 2343cd
 	}
Torsten Duwe 2343cd
 
Torsten Duwe 2343cd
-	/* Wait for response */
Torsten Duwe 2343cd
-	if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
Torsten Duwe 2343cd
-					 timeout)) {
Torsten Duwe 2343cd
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 2343cd
-			"IOV request/response message timeout expired\n");
Torsten Duwe 2343cd
-		return -EIO;
Torsten Duwe 2343cd
-	}
Torsten Duwe 2343cd
-
Torsten Duwe 2343cd
 	/* Response from PF received, check compatibility */
Torsten Duwe 2343cd
 	switch (accel_dev->vf.compatible) {
Torsten Duwe 2343cd
 	case ADF_PF2VF_VF_COMPATIBLE:
Torsten Duwe 2343cd
-- 
Torsten Duwe 2343cd
2.35.3
Torsten Duwe 2343cd