Torsten Duwe fcf9fe
From bd59b769ddac0db24d2d43ca5e40b29a58d7b205 Mon Sep 17 00:00:00 2001
Torsten Duwe fcf9fe
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe fcf9fe
Date: Wed, 17 Nov 2021 14:30:42 +0000
Torsten Duwe fcf9fe
Subject: [PATCH] crypto: qat - split PFVF message decoding from handling
Torsten Duwe fcf9fe
Git-commit: bd59b769ddac0db24d2d43ca5e40b29a58d7b205
Torsten Duwe fcf9fe
Patch-mainline: v5.17-rc1
Torsten Duwe fcf9fe
References: jsc#PED-1073
Torsten Duwe fcf9fe
Torsten Duwe fcf9fe
Refactor the receive and handle logic to separate the parsing and
Torsten Duwe fcf9fe
handling of the PFVF message from the initial retrieval and ACK.
Torsten Duwe fcf9fe
Torsten Duwe fcf9fe
This is to allow the intoduction of the recv function in a subsequent
Torsten Duwe fcf9fe
patch.
Torsten Duwe fcf9fe
Torsten Duwe fcf9fe
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe fcf9fe
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe fcf9fe
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe fcf9fe
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe fcf9fe
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe fcf9fe
Torsten Duwe fcf9fe
---
Torsten Duwe fcf9fe
 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 68 ++++++++++++-------
Torsten Duwe fcf9fe
 drivers/crypto/qat/qat_common/adf_vf2pf_msg.c | 62 ++++++++---------
Torsten Duwe fcf9fe
 2 files changed, 71 insertions(+), 59 deletions(-)
Torsten Duwe fcf9fe
Torsten Duwe fcf9fe
diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe fcf9fe
index 296f54805e332..201744825e23a 100644
Torsten Duwe fcf9fe
--- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe fcf9fe
+++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe fcf9fe
@@ -178,30 +178,12 @@ static int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe fcf9fe
 	return 0;
Torsten Duwe fcf9fe
 }
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
-bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe fcf9fe
+static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
Torsten Duwe fcf9fe
+				u32 msg, u32 *response)
Torsten Duwe fcf9fe
 {
Torsten Duwe fcf9fe
 	struct adf_accel_vf_info *vf_info = &accel_dev->pf.vf_info[vf_nr];
Torsten Duwe fcf9fe
 	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe fcf9fe
-	int bar_id = hw_data->get_misc_bar_id(hw_data);
Torsten Duwe fcf9fe
-	struct adf_bar *pmisc = &GET_BARS(accel_dev)[bar_id];
Torsten Duwe fcf9fe
-	void __iomem *pmisc_addr = pmisc->virt_addr;
Torsten Duwe fcf9fe
-	u32 msg, resp = 0;
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-	/* Read message from the VF */
Torsten Duwe fcf9fe
-	msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr));
Torsten Duwe fcf9fe
-	if (!(msg & ADF_VF2PF_INT)) {
Torsten Duwe fcf9fe
-		dev_info(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
-			 "Spurious VF2PF interrupt, msg %X. Ignored\n", msg);
Torsten Duwe fcf9fe
-		return true;
Torsten Duwe fcf9fe
-	}
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-	if (!(msg & ADF_VF2PF_MSGORIGIN_SYSTEM))
Torsten Duwe fcf9fe
-		/* Ignore legacy non-system (non-kernel) VF2PF messages */
Torsten Duwe fcf9fe
-		return true;
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-	/* To ACK, clear the VF2PFINT bit */
Torsten Duwe fcf9fe
-	msg &= ~ADF_VF2PF_INT;
Torsten Duwe fcf9fe
-	ADF_CSR_WR(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr), msg);
Torsten Duwe fcf9fe
+	u32 resp = 0;
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
 	switch ((msg & ADF_VF2PF_MSGTYPE_MASK) >> ADF_VF2PF_MSGTYPE_SHIFT) {
Torsten Duwe fcf9fe
 	case ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ:
Torsten Duwe fcf9fe
@@ -271,17 +253,51 @@ bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe fcf9fe
 		}
Torsten Duwe fcf9fe
 		break;
Torsten Duwe fcf9fe
 	default:
Torsten Duwe fcf9fe
-		goto err;
Torsten Duwe fcf9fe
+		dev_dbg(&GET_DEV(accel_dev), "Unknown message from VF%d (0x%x)\n",
Torsten Duwe fcf9fe
+			vf_nr + 1, msg);
Torsten Duwe fcf9fe
+		return -ENOMSG;
Torsten Duwe fcf9fe
+	}
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	*response = resp;
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	return 0;
Torsten Duwe fcf9fe
+}
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe fcf9fe
+{
Torsten Duwe fcf9fe
+	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe fcf9fe
+	int bar_id = hw_data->get_misc_bar_id(hw_data);
Torsten Duwe fcf9fe
+	struct adf_bar *pmisc = &GET_BARS(accel_dev)[bar_id];
Torsten Duwe fcf9fe
+	void __iomem *pmisc_addr = pmisc->virt_addr;
Torsten Duwe fcf9fe
+	u32 msg, resp = 0;
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	/* Read message from the VF */
Torsten Duwe fcf9fe
+	msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr));
Torsten Duwe fcf9fe
+	if (!(msg & ADF_VF2PF_INT)) {
Torsten Duwe fcf9fe
+		dev_info(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
+			 "Spurious VF2PF interrupt, msg %X. Ignored\n", msg);
Torsten Duwe fcf9fe
+		return true;
Torsten Duwe fcf9fe
+	}
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	/* Ignore legacy non-system (non-kernel) VF2PF messages */
Torsten Duwe fcf9fe
+	if (!(msg & ADF_VF2PF_MSGORIGIN_SYSTEM)) {
Torsten Duwe fcf9fe
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
+			"Ignored non-system message from VF%d (0x%x);\n",
Torsten Duwe fcf9fe
+			vf_nr + 1, msg);
Torsten Duwe fcf9fe
+		return true;
Torsten Duwe fcf9fe
 	}
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
+	/* To ACK, clear the VF2PFINT bit */
Torsten Duwe fcf9fe
+	msg &= ~ADF_VF2PF_INT;
Torsten Duwe fcf9fe
+	ADF_CSR_WR(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr), msg);
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	if (adf_handle_vf2pf_msg(accel_dev, vf_nr, msg, &resp))
Torsten Duwe fcf9fe
+		return false;
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
 	if (resp && adf_send_pf2vf_msg(accel_dev, vf_nr, resp))
Torsten Duwe fcf9fe
 		dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
 	return true;
Torsten Duwe fcf9fe
-err:
Torsten Duwe fcf9fe
-	dev_dbg(&GET_DEV(accel_dev), "Unknown message from VF%d (0x%x);\n",
Torsten Duwe fcf9fe
-		vf_nr + 1, msg);
Torsten Duwe fcf9fe
-	return false;
Torsten Duwe fcf9fe
 }
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
 void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
Torsten Duwe fcf9fe
diff --git a/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c b/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe fcf9fe
index e383232b06856..01a6e68f256b6 100644
Torsten Duwe fcf9fe
--- a/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe fcf9fe
+++ b/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe fcf9fe
@@ -47,6 +47,34 @@ void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
Torsten Duwe fcf9fe
 }
Torsten Duwe fcf9fe
 EXPORT_SYMBOL_GPL(adf_vf2pf_notify_shutdown);
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
+static bool adf_handle_pf2vf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe fcf9fe
+{
Torsten Duwe fcf9fe
+	switch ((msg & ADF_PF2VF_MSGTYPE_MASK) >> ADF_PF2VF_MSGTYPE_SHIFT) {
Torsten Duwe fcf9fe
+	case ADF_PF2VF_MSGTYPE_RESTARTING:
Torsten Duwe fcf9fe
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
+			"Restarting msg received from PF 0x%x\n", msg);
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+		adf_pf2vf_handle_pf_restarting(accel_dev);
Torsten Duwe fcf9fe
+		return false;
Torsten Duwe fcf9fe
+	case ADF_PF2VF_MSGTYPE_VERSION_RESP:
Torsten Duwe fcf9fe
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
+			"Version resp received from PF 0x%x\n", msg);
Torsten Duwe fcf9fe
+		accel_dev->vf.pf_version =
Torsten Duwe fcf9fe
+			(msg & ADF_PF2VF_VERSION_RESP_VERS_MASK) >>
Torsten Duwe fcf9fe
+			ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
Torsten Duwe fcf9fe
+		accel_dev->vf.compatible =
Torsten Duwe fcf9fe
+			(msg & ADF_PF2VF_VERSION_RESP_RESULT_MASK) >>
Torsten Duwe fcf9fe
+			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe fcf9fe
+		complete(&accel_dev->vf.iov_msg_completion);
Torsten Duwe fcf9fe
+		return true;
Torsten Duwe fcf9fe
+	default:
Torsten Duwe fcf9fe
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
+			"Unknown PF2VF message(0x%x)\n", msg);
Torsten Duwe fcf9fe
+	}
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
+	return false;
Torsten Duwe fcf9fe
+}
Torsten Duwe fcf9fe
+
Torsten Duwe fcf9fe
 bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe fcf9fe
 {
Torsten Duwe fcf9fe
 	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe fcf9fe
@@ -54,7 +82,6 @@ bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe fcf9fe
 			&GET_BARS(accel_dev)[hw_data->get_misc_bar_id(hw_data)];
Torsten Duwe fcf9fe
 	void __iomem *pmisc_bar_addr = pmisc->virt_addr;
Torsten Duwe fcf9fe
 	u32 offset = hw_data->get_pf2vf_offset(0);
Torsten Duwe fcf9fe
-	bool ret;
Torsten Duwe fcf9fe
 	u32 msg;
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
 	/* Read the message from PF */
Torsten Duwe fcf9fe
@@ -73,36 +100,5 @@ bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe fcf9fe
 	msg &= ~ADF_PF2VF_INT;
Torsten Duwe fcf9fe
 	ADF_CSR_WR(pmisc_bar_addr, offset, msg);
Torsten Duwe fcf9fe
 
Torsten Duwe fcf9fe
-	switch ((msg & ADF_PF2VF_MSGTYPE_MASK) >> ADF_PF2VF_MSGTYPE_SHIFT) {
Torsten Duwe fcf9fe
-	case ADF_PF2VF_MSGTYPE_RESTARTING:
Torsten Duwe fcf9fe
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
-			"Restarting msg received from PF 0x%x\n", msg);
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-		adf_pf2vf_handle_pf_restarting(accel_dev);
Torsten Duwe fcf9fe
-		ret = false;
Torsten Duwe fcf9fe
-		break;
Torsten Duwe fcf9fe
-	case ADF_PF2VF_MSGTYPE_VERSION_RESP:
Torsten Duwe fcf9fe
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
-			"Version resp received from PF 0x%x\n", msg);
Torsten Duwe fcf9fe
-		accel_dev->vf.pf_version =
Torsten Duwe fcf9fe
-			(msg & ADF_PF2VF_VERSION_RESP_VERS_MASK) >>
Torsten Duwe fcf9fe
-			ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
Torsten Duwe fcf9fe
-		accel_dev->vf.compatible =
Torsten Duwe fcf9fe
-			(msg & ADF_PF2VF_VERSION_RESP_RESULT_MASK) >>
Torsten Duwe fcf9fe
-			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe fcf9fe
-		complete(&accel_dev->vf.iov_msg_completion);
Torsten Duwe fcf9fe
-		ret = true;
Torsten Duwe fcf9fe
-		break;
Torsten Duwe fcf9fe
-	default:
Torsten Duwe fcf9fe
-		goto err;
Torsten Duwe fcf9fe
-	}
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-	return ret;
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-err:
Torsten Duwe fcf9fe
-	dev_err(&GET_DEV(accel_dev),
Torsten Duwe fcf9fe
-		"Unknown message from PF (0x%x); leaving PF2VF ints disabled\n",
Torsten Duwe fcf9fe
-		msg);
Torsten Duwe fcf9fe
-
Torsten Duwe fcf9fe
-	return false;
Torsten Duwe fcf9fe
+	return adf_handle_pf2vf_msg(accel_dev, msg);
Torsten Duwe fcf9fe
 }
Torsten Duwe fcf9fe
-- 
Torsten Duwe fcf9fe
2.35.3
Torsten Duwe fcf9fe