Torsten Duwe d8bed3
From 720aa72a77f402a8d33ad1ddef72a4bf6e973fdd Mon Sep 17 00:00:00 2001
Torsten Duwe d8bed3
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe d8bed3
Date: Wed, 17 Nov 2021 14:30:39 +0000
Torsten Duwe d8bed3
Subject: [PATCH] crypto: qat - move interrupt code out of the PFVF handler
Torsten Duwe d8bed3
Git-commit: 720aa72a77f402a8d33ad1ddef72a4bf6e973fdd
Torsten Duwe d8bed3
Patch-mainline: v5.17-rc1
Torsten Duwe d8bed3
References: jsc#PED-1073
Torsten Duwe d8bed3
Torsten Duwe d8bed3
Move the interrupt handling call from the PF specific protocol file,
Torsten Duwe d8bed3
adf_pf2vf_msg.c, to adf_sriov.c to maintain the PFVF files focused on
Torsten Duwe d8bed3
the protocol handling.
Torsten Duwe d8bed3
Torsten Duwe d8bed3
The function adf_vf2pf_req_hndl() has been renamed as
Torsten Duwe d8bed3
adf_recv_and_handle_vf2pf_msg() to reflect its actual purpose and
Torsten Duwe d8bed3
maintain consistency with the VF side. This function now returns a
Torsten Duwe d8bed3
boolean indicating to the caller if interrupts need to be re-enabled or
Torsten Duwe d8bed3
not.
Torsten Duwe d8bed3
Torsten Duwe d8bed3
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe d8bed3
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe d8bed3
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe d8bed3
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe d8bed3
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe d8bed3
Torsten Duwe d8bed3
---
Torsten Duwe d8bed3
 drivers/crypto/qat/qat_common/adf_common_drv.h |  2 +-
Torsten Duwe d8bed3
 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c  | 15 ++++++---------
Torsten Duwe d8bed3
 drivers/crypto/qat/qat_common/adf_sriov.c      | 10 +++++++++-
Torsten Duwe d8bed3
 3 files changed, 16 insertions(+), 11 deletions(-)
Torsten Duwe d8bed3
Torsten Duwe d8bed3
diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe d8bed3
index 56ee2d5a6b370..db9d045e6a062 100644
Torsten Duwe d8bed3
--- a/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe d8bed3
+++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe d8bed3
@@ -64,7 +64,6 @@ void adf_dev_shutdown(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
 void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
 int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
-void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info);
Torsten Duwe d8bed3
 void adf_devmgr_update_class_index(struct adf_hw_device_data *hw_data);
Torsten Duwe d8bed3
 void adf_clean_vf_map(bool);
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
@@ -196,6 +195,7 @@ void adf_disable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
Torsten Duwe d8bed3
 void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
Torsten Duwe d8bed3
 				 u32 vf_mask);
Torsten Duwe d8bed3
 bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
+bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr);
Torsten Duwe d8bed3
 int adf_pf2vf_handle_pf_restarting(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
 int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
 void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
Torsten Duwe d8bed3
diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe d8bed3
index d0492530c84ab..796301e9fe5bc 100644
Torsten Duwe d8bed3
--- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe d8bed3
+++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe d8bed3
@@ -178,21 +178,21 @@ static int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe d8bed3
 	return 0;
Torsten Duwe d8bed3
 }
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
-void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
Torsten Duwe d8bed3
+bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe d8bed3
 {
Torsten Duwe d8bed3
-	struct adf_accel_dev *accel_dev = vf_info->accel_dev;
Torsten Duwe d8bed3
+	struct adf_accel_vf_info *vf_info = &accel_dev->pf.vf_info[vf_nr];
Torsten Duwe d8bed3
 	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe d8bed3
 	int bar_id = hw_data->get_misc_bar_id(hw_data);
Torsten Duwe d8bed3
 	struct adf_bar *pmisc = &GET_BARS(accel_dev)[bar_id];
Torsten Duwe d8bed3
 	void __iomem *pmisc_addr = pmisc->virt_addr;
Torsten Duwe d8bed3
-	u32 msg, resp = 0, vf_nr = vf_info->vf_nr;
Torsten Duwe d8bed3
+	u32 msg, resp = 0;
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
 	/* Read message from the VF */
Torsten Duwe d8bed3
 	msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr));
Torsten Duwe d8bed3
 	if (!(msg & ADF_VF2PF_INT)) {
Torsten Duwe d8bed3
 		dev_info(&GET_DEV(accel_dev),
Torsten Duwe d8bed3
 			 "Spurious VF2PF interrupt, msg %X. Ignored\n", msg);
Torsten Duwe d8bed3
-		goto out;
Torsten Duwe d8bed3
+		return true;
Torsten Duwe d8bed3
 	}
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
 	/* To ACK, clear the VF2PFINT bit */
Torsten Duwe d8bed3
@@ -277,14 +277,11 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
Torsten Duwe d8bed3
 	if (resp && adf_send_pf2vf_msg(accel_dev, vf_nr, resp))
Torsten Duwe d8bed3
 		dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
-out:
Torsten Duwe d8bed3
-	/* re-enable interrupt on PF from this VF */
Torsten Duwe d8bed3
-	adf_enable_vf2pf_interrupts(accel_dev, (1 << vf_nr));
Torsten Duwe d8bed3
-
Torsten Duwe d8bed3
-	return;
Torsten Duwe d8bed3
+	return true;
Torsten Duwe d8bed3
 err:
Torsten Duwe d8bed3
 	dev_dbg(&GET_DEV(accel_dev), "Unknown message from VF%d (0x%x);\n",
Torsten Duwe d8bed3
 		vf_nr + 1, msg);
Torsten Duwe d8bed3
+	return false;
Torsten Duwe d8bed3
 }
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
 void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
Torsten Duwe d8bed3
diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe d8bed3
index 90ec057f9183d..b1a814ac1d679 100644
Torsten Duwe d8bed3
--- a/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe d8bed3
+++ b/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe d8bed3
@@ -19,8 +19,16 @@ static void adf_iov_send_resp(struct work_struct *work)
Torsten Duwe d8bed3
 {
Torsten Duwe d8bed3
 	struct adf_pf2vf_resp *pf2vf_resp =
Torsten Duwe d8bed3
 		container_of(work, struct adf_pf2vf_resp, pf2vf_resp_work);
Torsten Duwe d8bed3
+	struct adf_accel_vf_info *vf_info = pf2vf_resp->vf_info;
Torsten Duwe d8bed3
+	struct adf_accel_dev *accel_dev = vf_info->accel_dev;
Torsten Duwe d8bed3
+	u32 vf_nr = vf_info->vf_nr;
Torsten Duwe d8bed3
+	bool ret;
Torsten Duwe d8bed3
+
Torsten Duwe d8bed3
+	ret = adf_recv_and_handle_vf2pf_msg(accel_dev, vf_nr);
Torsten Duwe d8bed3
+	if (ret)
Torsten Duwe d8bed3
+		/* re-enable interrupt on PF from this VF */
Torsten Duwe d8bed3
+		adf_enable_vf2pf_interrupts(accel_dev, 1 << vf_nr);
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
-	adf_vf2pf_req_hndl(pf2vf_resp->vf_info);
Torsten Duwe d8bed3
 	kfree(pf2vf_resp);
Torsten Duwe d8bed3
 }
Torsten Duwe d8bed3
 
Torsten Duwe d8bed3
-- 
Torsten Duwe d8bed3
2.35.3
Torsten Duwe d8bed3