|
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 |
|