|
Torsten Duwe |
2ca2bc |
From 6ed942ed3c47b3ebb4e8de3ff10e761cdf82ba74 Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
2ca2bc |
From: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
2ca2bc |
Date: Thu, 16 Dec 2021 09:13:17 +0000
|
|
Torsten Duwe |
2ca2bc |
Subject: [PATCH] crypto: qat - make PFVF message construction direction
|
|
Torsten Duwe |
2ca2bc |
agnostic
|
|
Torsten Duwe |
2ca2bc |
Git-commit: 6ed942ed3c47b3ebb4e8de3ff10e761cdf82ba74
|
|
Torsten Duwe |
2ca2bc |
Patch-mainline: v5.17-rc1
|
|
Torsten Duwe |
2ca2bc |
References: jsc#PED-1073
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
Currently PFVF messages are created upfront in the CSR format, that is
|
|
Torsten Duwe |
2ca2bc |
PF2VF messages starting from bit 0 and VF2PF from bit 16, and passed
|
|
Torsten Duwe |
2ca2bc |
along unmodified to the PFVF send function.
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
Refactor the code to allow the VF2PF messages to be built starting from
|
|
Torsten Duwe |
2ca2bc |
bit 0, as for the PF2VF messages. Shift the VF to PF messages just
|
|
Torsten Duwe |
2ca2bc |
before sending them, and refactor the send logic to handle messages
|
|
Torsten Duwe |
2ca2bc |
properly depending on the direction.
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
As a result all the messages are composed the same way regardless of
|
|
Torsten Duwe |
2ca2bc |
the direction.
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
2ca2bc |
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
2ca2bc |
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
|
|
Torsten Duwe |
2ca2bc |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
2ca2bc |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
---
|
|
Torsten Duwe |
2ca2bc |
drivers/crypto/qat/qat_common/adf_gen2_pfvf.c | 129 +++++++++++++-----
|
|
Torsten Duwe |
2ca2bc |
drivers/crypto/qat/qat_common/adf_pfvf_msg.h | 26 ++--
|
|
Torsten Duwe |
2ca2bc |
.../crypto/qat/qat_common/adf_pfvf_pf_msg.c | 4 +-
|
|
Torsten Duwe |
2ca2bc |
.../crypto/qat/qat_common/adf_pfvf_pf_proto.c | 10 +-
|
|
Torsten Duwe |
2ca2bc |
.../crypto/qat/qat_common/adf_pfvf_vf_msg.c | 20 +--
|
|
Torsten Duwe |
2ca2bc |
.../crypto/qat/qat_common/adf_pfvf_vf_proto.c | 2 +-
|
|
Torsten Duwe |
2ca2bc |
6 files changed, 120 insertions(+), 71 deletions(-)
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
|
|
Torsten Duwe |
2ca2bc |
index 5ac69ece34a85..2e0b9ac273931 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
|
|
Torsten Duwe |
2ca2bc |
@@ -17,6 +17,14 @@
|
|
Torsten Duwe |
2ca2bc |
#define ADF_GEN2_PF_PF2VF_OFFSET(i) (0x3A000 + 0x280 + ((i) * 0x04))
|
|
Torsten Duwe |
2ca2bc |
#define ADF_GEN2_VF_PF2VF_OFFSET 0x200
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_GEN2_CSR_IN_USE 0x6AC2
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_GEN2_CSR_IN_USE_MASK 0xFFFE
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+enum gen2_csr_pos {
|
|
Torsten Duwe |
2ca2bc |
+ ADF_GEN2_CSR_PF2VF_OFFSET = 0,
|
|
Torsten Duwe |
2ca2bc |
+ ADF_GEN2_CSR_VF2PF_OFFSET = 16,
|
|
Torsten Duwe |
2ca2bc |
+};
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PFVF_MSG_ACK_DELAY 2
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PFVF_MSG_ACK_MAX_RETRY 100
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
@@ -72,38 +80,81 @@ static void adf_gen2_disable_vf2pf_interrupts(void __iomem *pmisc_addr,
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
+static u32 gen2_csr_get_int_bit(enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ return ADF_PFVF_INT << offset;
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static u32 gen2_csr_msg_to_position(u32 csr_msg, enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ return (csr_msg & 0xFFFF) << offset;
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static u32 gen2_csr_msg_from_position(u32 csr_val, enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ return (csr_val >> offset) & 0xFFFF;
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static bool gen2_csr_is_in_use(u32 msg, enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ return ((msg >> offset) & ADF_GEN2_CSR_IN_USE_MASK) == ADF_GEN2_CSR_IN_USE;
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static void gen2_csr_clear_in_use(u32 *msg, enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ *msg &= ~(ADF_GEN2_CSR_IN_USE_MASK << offset);
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static void gen2_csr_set_in_use(u32 *msg, enum gen2_csr_pos offset)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ *msg |= (ADF_GEN2_CSR_IN_USE << offset);
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+static bool is_legacy_user_pfvf_message(u32 msg)
|
|
Torsten Duwe |
2ca2bc |
+{
|
|
Torsten Duwe |
2ca2bc |
+ return !(msg & ADF_PFVF_MSGORIGIN_SYSTEM);
|
|
Torsten Duwe |
2ca2bc |
+}
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
static int adf_gen2_pfvf_send(struct adf_accel_dev *accel_dev, u32 msg,
|
|
Torsten Duwe |
2ca2bc |
u8 vf_nr)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
void __iomem *pmisc_addr = adf_get_pmisc_base(accel_dev);
|
|
Torsten Duwe |
2ca2bc |
unsigned int retries = ADF_PFVF_MSG_MAX_RETRIES;
|
|
Torsten Duwe |
2ca2bc |
- u32 remote_in_use_mask, remote_in_use_pattern;
|
|
Torsten Duwe |
2ca2bc |
- u32 local_in_use_mask, local_in_use_pattern;
|
|
Torsten Duwe |
2ca2bc |
- u32 val, pfvf_offset, count = 0;
|
|
Torsten Duwe |
2ca2bc |
+ enum gen2_csr_pos remote_offset;
|
|
Torsten Duwe |
2ca2bc |
+ enum gen2_csr_pos local_offset;
|
|
Torsten Duwe |
2ca2bc |
struct mutex *lock; /* lock preventing concurrent acces of CSR */
|
|
Torsten Duwe |
2ca2bc |
+ u32 pfvf_offset;
|
|
Torsten Duwe |
2ca2bc |
+ u32 count = 0;
|
|
Torsten Duwe |
2ca2bc |
u32 int_bit;
|
|
Torsten Duwe |
2ca2bc |
+ u32 csr_val;
|
|
Torsten Duwe |
2ca2bc |
int ret;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
+ /* Gen2 messages, both PF->VF and VF->PF, are all 16 bits long. This
|
|
Torsten Duwe |
2ca2bc |
+ * allows us to build and read messages as if they where all 0 based.
|
|
Torsten Duwe |
2ca2bc |
+ * However, send and receive are in a single shared 32 bits register,
|
|
Torsten Duwe |
2ca2bc |
+ * so we need to shift and/or mask the message half before decoding
|
|
Torsten Duwe |
2ca2bc |
+ * it and after encoding it. Which one to shift depends on the
|
|
Torsten Duwe |
2ca2bc |
+ * direction.
|
|
Torsten Duwe |
2ca2bc |
+ */
|
|
Torsten Duwe |
2ca2bc |
if (accel_dev->is_vf) {
|
|
Torsten Duwe |
2ca2bc |
pfvf_offset = GET_PFVF_OPS(accel_dev)->get_vf2pf_offset(0);
|
|
Torsten Duwe |
2ca2bc |
lock = &accel_dev->vf.vf2pf_lock;
|
|
Torsten Duwe |
2ca2bc |
- local_in_use_mask = ADF_VF2PF_IN_USE_BY_VF_MASK;
|
|
Torsten Duwe |
2ca2bc |
- local_in_use_pattern = ADF_VF2PF_IN_USE_BY_VF;
|
|
Torsten Duwe |
2ca2bc |
- remote_in_use_mask = ADF_PF2VF_IN_USE_BY_PF_MASK;
|
|
Torsten Duwe |
2ca2bc |
- remote_in_use_pattern = ADF_PF2VF_IN_USE_BY_PF;
|
|
Torsten Duwe |
2ca2bc |
- int_bit = ADF_VF2PF_INT;
|
|
Torsten Duwe |
2ca2bc |
+ local_offset = ADF_GEN2_CSR_VF2PF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
+ remote_offset = ADF_GEN2_CSR_PF2VF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
} else {
|
|
Torsten Duwe |
2ca2bc |
pfvf_offset = GET_PFVF_OPS(accel_dev)->get_pf2vf_offset(vf_nr);
|
|
Torsten Duwe |
2ca2bc |
lock = &accel_dev->pf.vf_info[vf_nr].pf2vf_lock;
|
|
Torsten Duwe |
2ca2bc |
- local_in_use_mask = ADF_PF2VF_IN_USE_BY_PF_MASK;
|
|
Torsten Duwe |
2ca2bc |
- local_in_use_pattern = ADF_PF2VF_IN_USE_BY_PF;
|
|
Torsten Duwe |
2ca2bc |
- remote_in_use_mask = ADF_VF2PF_IN_USE_BY_VF_MASK;
|
|
Torsten Duwe |
2ca2bc |
- remote_in_use_pattern = ADF_VF2PF_IN_USE_BY_VF;
|
|
Torsten Duwe |
2ca2bc |
- int_bit = ADF_PF2VF_INT;
|
|
Torsten Duwe |
2ca2bc |
+ local_offset = ADF_GEN2_CSR_PF2VF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
+ remote_offset = ADF_GEN2_CSR_VF2PF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- msg &= ~local_in_use_mask;
|
|
Torsten Duwe |
2ca2bc |
- msg |= local_in_use_pattern;
|
|
Torsten Duwe |
2ca2bc |
+ int_bit = gen2_csr_get_int_bit(local_offset);
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+ /* Pre-calculate message, shifting it in place and setting
|
|
Torsten Duwe |
2ca2bc |
+ * the in use pattern
|
|
Torsten Duwe |
2ca2bc |
+ */
|
|
Torsten Duwe |
2ca2bc |
+ msg = gen2_csr_msg_to_position(msg, local_offset);
|
|
Torsten Duwe |
2ca2bc |
+ gen2_csr_set_in_use(&msg, remote_offset);
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
mutex_lock(lock);
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
@@ -111,8 +162,8 @@ start:
|
|
Torsten Duwe |
2ca2bc |
ret = 0;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* Check if the PFVF CSR is in use by remote function */
|
|
Torsten Duwe |
2ca2bc |
- val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
- if ((val & remote_in_use_mask) == remote_in_use_pattern) {
|
|
Torsten Duwe |
2ca2bc |
+ csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
+ if (gen2_csr_is_in_use(csr_val, local_offset)) {
|
|
Torsten Duwe |
2ca2bc |
dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
2ca2bc |
"PFVF CSR in use by remote function\n");
|
|
Torsten Duwe |
2ca2bc |
goto retry;
|
|
Torsten Duwe |
2ca2bc |
@@ -124,23 +175,25 @@ start:
|
|
Torsten Duwe |
2ca2bc |
/* Wait for confirmation from remote func it received the message */
|
|
Torsten Duwe |
2ca2bc |
do {
|
|
Torsten Duwe |
2ca2bc |
msleep(ADF_PFVF_MSG_ACK_DELAY);
|
|
Torsten Duwe |
2ca2bc |
- val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
- } while ((val & int_bit) && (count++ < ADF_PFVF_MSG_ACK_MAX_RETRY));
|
|
Torsten Duwe |
2ca2bc |
+ csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
+ } while ((csr_val & int_bit) && (count++ < ADF_PFVF_MSG_ACK_MAX_RETRY));
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- if (val & int_bit) {
|
|
Torsten Duwe |
2ca2bc |
+ if (csr_val & int_bit) {
|
|
Torsten Duwe |
2ca2bc |
dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
|
|
Torsten Duwe |
2ca2bc |
- val &= ~int_bit;
|
|
Torsten Duwe |
2ca2bc |
+ csr_val &= ~int_bit;
|
|
Torsten Duwe |
2ca2bc |
ret = -EIO;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- if (val != msg) {
|
|
Torsten Duwe |
2ca2bc |
+ if (csr_val != msg) {
|
|
Torsten Duwe |
2ca2bc |
dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
2ca2bc |
"Collision - PFVF CSR overwritten by remote function\n");
|
|
Torsten Duwe |
2ca2bc |
goto retry;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* Finished with the PFVF CSR; relinquish it and leave msg in CSR */
|
|
Torsten Duwe |
2ca2bc |
- ADF_CSR_WR(pmisc_addr, pfvf_offset, val & ~local_in_use_mask);
|
|
Torsten Duwe |
2ca2bc |
+ gen2_csr_clear_in_use(&csr_val, remote_offset);
|
|
Torsten Duwe |
2ca2bc |
+ ADF_CSR_WR(pmisc_addr, pfvf_offset, csr_val);
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
out:
|
|
Torsten Duwe |
2ca2bc |
mutex_unlock(lock);
|
|
Torsten Duwe |
2ca2bc |
return ret;
|
|
Torsten Duwe |
2ca2bc |
@@ -158,39 +211,43 @@ retry:
|
|
Torsten Duwe |
2ca2bc |
static u32 adf_gen2_pfvf_recv(struct adf_accel_dev *accel_dev, u8 vf_nr)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
void __iomem *pmisc_addr = adf_get_pmisc_base(accel_dev);
|
|
Torsten Duwe |
2ca2bc |
+ enum gen2_csr_pos local_offset;
|
|
Torsten Duwe |
2ca2bc |
u32 pfvf_offset;
|
|
Torsten Duwe |
2ca2bc |
- u32 msg_origin;
|
|
Torsten Duwe |
2ca2bc |
u32 int_bit;
|
|
Torsten Duwe |
2ca2bc |
+ u32 csr_val;
|
|
Torsten Duwe |
2ca2bc |
u32 msg;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
if (accel_dev->is_vf) {
|
|
Torsten Duwe |
2ca2bc |
pfvf_offset = GET_PFVF_OPS(accel_dev)->get_pf2vf_offset(0);
|
|
Torsten Duwe |
2ca2bc |
- int_bit = ADF_PF2VF_INT;
|
|
Torsten Duwe |
2ca2bc |
- msg_origin = ADF_PF2VF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
+ local_offset = ADF_GEN2_CSR_PF2VF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
} else {
|
|
Torsten Duwe |
2ca2bc |
pfvf_offset = GET_PFVF_OPS(accel_dev)->get_vf2pf_offset(vf_nr);
|
|
Torsten Duwe |
2ca2bc |
- int_bit = ADF_VF2PF_INT;
|
|
Torsten Duwe |
2ca2bc |
- msg_origin = ADF_VF2PF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
+ local_offset = ADF_GEN2_CSR_VF2PF_OFFSET;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
+ int_bit = gen2_csr_get_int_bit(local_offset);
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
/* Read message */
|
|
Torsten Duwe |
2ca2bc |
- msg = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
- if (!(msg & int_bit)) {
|
|
Torsten Duwe |
2ca2bc |
+ csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
2ca2bc |
+ if (!(csr_val & int_bit)) {
|
|
Torsten Duwe |
2ca2bc |
dev_info(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
2ca2bc |
- "Spurious PFVF interrupt, msg 0x%.8x. Ignored\n", msg);
|
|
Torsten Duwe |
2ca2bc |
+ "Spurious PFVF interrupt, msg 0x%.8x. Ignored\n", csr_val);
|
|
Torsten Duwe |
2ca2bc |
return 0;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- /* Ignore legacy non-system (non-kernel) VF2PF messages */
|
|
Torsten Duwe |
2ca2bc |
- if (!(msg & msg_origin)) {
|
|
Torsten Duwe |
2ca2bc |
+ /* Extract the message from the CSR */
|
|
Torsten Duwe |
2ca2bc |
+ msg = gen2_csr_msg_from_position(csr_val, local_offset);
|
|
Torsten Duwe |
2ca2bc |
+
|
|
Torsten Duwe |
2ca2bc |
+ /* Ignore legacy non-system (non-kernel) messages */
|
|
Torsten Duwe |
2ca2bc |
+ if (unlikely(is_legacy_user_pfvf_message(msg))) {
|
|
Torsten Duwe |
2ca2bc |
dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
2ca2bc |
- "Ignored non-system message (0x%.8x);\n", msg);
|
|
Torsten Duwe |
2ca2bc |
+ "Ignored non-system message (0x%.8x);\n", csr_val);
|
|
Torsten Duwe |
2ca2bc |
return 0;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* To ACK, clear the INT bit */
|
|
Torsten Duwe |
2ca2bc |
- msg &= ~int_bit;
|
|
Torsten Duwe |
2ca2bc |
- ADF_CSR_WR(pmisc_addr, pfvf_offset, msg);
|
|
Torsten Duwe |
2ca2bc |
+ csr_val &= ~int_bit;
|
|
Torsten Duwe |
2ca2bc |
+ ADF_CSR_WR(pmisc_addr, pfvf_offset, csr_val);
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
return msg;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
2ca2bc |
index 8b476072df285..3ba88bcd07269 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
2ca2bc |
@@ -53,27 +53,19 @@
|
|
Torsten Duwe |
2ca2bc |
* adf_gen2_pfvf_send() in adf_pf2vf_msg.c).
|
|
Torsten Duwe |
2ca2bc |
*/
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
-/* PF->VF messages */
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_INT BIT(0)
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_MSGORIGIN_SYSTEM BIT(1)
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_IN_USE_BY_PF 0x6AC20000
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_IN_USE_BY_PF_MASK 0xFFFE0000
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_MSGTYPE_MASK 0x0000003C
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_MSGTYPE_SHIFT 2
|
|
Torsten Duwe |
2ca2bc |
+/* PFVF message common bits */
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PFVF_INT BIT(0)
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PFVF_MSGORIGIN_SYSTEM BIT(1)
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PFVF_MSGTYPE_SHIFT 2
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PFVF_MSGTYPE_MASK 0x0F
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
+/* PF->VF messages */
|
|
Torsten Duwe |
2ca2bc |
enum pf2vf_msgtype {
|
|
Torsten Duwe |
2ca2bc |
ADF_PF2VF_MSGTYPE_RESTARTING = 0x01,
|
|
Torsten Duwe |
2ca2bc |
ADF_PF2VF_MSGTYPE_VERSION_RESP = 0x02,
|
|
Torsten Duwe |
2ca2bc |
};
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* VF->PF messages */
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_INT BIT(16)
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_MSGORIGIN_SYSTEM BIT(17)
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_IN_USE_BY_VF 0x00006AC2
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_IN_USE_BY_VF_MASK 0x0000FFFE
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_MSGTYPE_MASK 0x003C0000
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_MSGTYPE_SHIFT 18
|
|
Torsten Duwe |
2ca2bc |
-
|
|
Torsten Duwe |
2ca2bc |
enum vf2pf_msgtype {
|
|
Torsten Duwe |
2ca2bc |
ADF_VF2PF_MSGTYPE_INIT = 0x03,
|
|
Torsten Duwe |
2ca2bc |
ADF_VF2PF_MSGTYPE_SHUTDOWN = 0x04,
|
|
Torsten Duwe |
2ca2bc |
@@ -90,10 +82,10 @@ enum pfvf_compatibility_version {
|
|
Torsten Duwe |
2ca2bc |
/* PF->VF Version Response */
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PF2VF_MINORVERSION_SHIFT 6
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PF2VF_MAJORVERSION_SHIFT 10
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_VERSION_RESP_VERS_MASK 0x00003FC0
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PF2VF_VERSION_RESP_VERS_SHIFT 6
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_PF2VF_VERSION_RESP_RESULT_MASK 0x0000C000
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PF2VF_VERSION_RESP_VERS_MASK 0xFF
|
|
Torsten Duwe |
2ca2bc |
#define ADF_PF2VF_VERSION_RESP_RESULT_SHIFT 14
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_PF2VF_VERSION_RESP_RESULT_MASK 0x03
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
enum pf2vf_compat_response {
|
|
Torsten Duwe |
2ca2bc |
ADF_PF2VF_VF_COMPATIBLE = 0x01,
|
|
Torsten Duwe |
2ca2bc |
@@ -102,6 +94,6 @@ enum pf2vf_compat_response {
|
|
Torsten Duwe |
2ca2bc |
};
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* VF->PF Compatible Version Request */
|
|
Torsten Duwe |
2ca2bc |
-#define ADF_VF2PF_COMPAT_VER_REQ_SHIFT 22
|
|
Torsten Duwe |
2ca2bc |
+#define ADF_VF2PF_COMPAT_VER_REQ_SHIFT 6
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
#endif /* ADF_PFVF_MSG_H */
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c b/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c
|
|
Torsten Duwe |
2ca2bc |
index 647b82e6c4baf..4057d7d74d620 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c
|
|
Torsten Duwe |
2ca2bc |
@@ -9,8 +9,8 @@
|
|
Torsten Duwe |
2ca2bc |
void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
struct adf_accel_vf_info *vf;
|
|
Torsten Duwe |
2ca2bc |
- u32 msg = (ADF_PF2VF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
- (ADF_PF2VF_MSGTYPE_RESTARTING << ADF_PF2VF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
+ u32 msg = (ADF_PFVF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
+ (ADF_PF2VF_MSGTYPE_RESTARTING << ADF_PFVF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
int i, num_vfs = pci_num_vf(accel_to_pci_dev(accel_dev));
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
for (i = 0, vf = accel_dev->pf.vf_info; i < num_vfs; i++, vf++) {
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
2ca2bc |
index 4f20dd35fcd45..fb477eb89fef7 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
2ca2bc |
@@ -42,7 +42,7 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
|
|
Torsten Duwe |
2ca2bc |
struct adf_accel_vf_info *vf_info = &accel_dev->pf.vf_info[vf_nr];
|
|
Torsten Duwe |
2ca2bc |
u32 resp = 0;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- switch ((msg & ADF_VF2PF_MSGTYPE_MASK) >> ADF_VF2PF_MSGTYPE_SHIFT) {
|
|
Torsten Duwe |
2ca2bc |
+ switch ((msg >> ADF_PFVF_MSGTYPE_SHIFT) & ADF_PFVF_MSGTYPE_MASK) {
|
|
Torsten Duwe |
2ca2bc |
case ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ:
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
u8 vf_compat_ver = msg >> ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
@@ -57,9 +57,9 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
|
|
Torsten Duwe |
2ca2bc |
else
|
|
Torsten Duwe |
2ca2bc |
compat = ADF_PF2VF_VF_COMPAT_UNKNOWN;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- resp = ADF_PF2VF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
+ resp = ADF_PFVF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
resp |= ADF_PF2VF_MSGTYPE_VERSION_RESP <<
|
|
Torsten Duwe |
2ca2bc |
- ADF_PF2VF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
+ ADF_PFVF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
resp |= ADF_PFVF_COMPAT_THIS_VERSION <<
|
|
Torsten Duwe |
2ca2bc |
ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
resp |= compat << ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
@@ -76,9 +76,9 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
|
|
Torsten Duwe |
2ca2bc |
/* PF always newer than legacy VF */
|
|
Torsten Duwe |
2ca2bc |
compat = ADF_PF2VF_VF_COMPATIBLE;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- resp = ADF_PF2VF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
+ resp = ADF_PFVF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
resp |= ADF_PF2VF_MSGTYPE_VERSION_RESP <<
|
|
Torsten Duwe |
2ca2bc |
- ADF_PF2VF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
+ ADF_PFVF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
/* Set legacy major and minor version num */
|
|
Torsten Duwe |
2ca2bc |
resp |= 1 << ADF_PF2VF_MAJORVERSION_SHIFT |
|
|
Torsten Duwe |
2ca2bc |
1 << ADF_PF2VF_MINORVERSION_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c b/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c
|
|
Torsten Duwe |
2ca2bc |
index 7635818399024..c9e929651a7d8 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c
|
|
Torsten Duwe |
2ca2bc |
@@ -16,8 +16,8 @@
|
|
Torsten Duwe |
2ca2bc |
*/
|
|
Torsten Duwe |
2ca2bc |
int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
- u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
- (ADF_VF2PF_MSGTYPE_INIT << ADF_VF2PF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
+ u32 msg = (ADF_PFVF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
+ (ADF_VF2PF_MSGTYPE_INIT << ADF_PFVF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
if (adf_send_vf2pf_msg(accel_dev, msg)) {
|
|
Torsten Duwe |
2ca2bc |
dev_err(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
2ca2bc |
@@ -39,8 +39,8 @@ EXPORT_SYMBOL_GPL(adf_vf2pf_notify_init);
|
|
Torsten Duwe |
2ca2bc |
*/
|
|
Torsten Duwe |
2ca2bc |
void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
- u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
- (ADF_VF2PF_MSGTYPE_SHUTDOWN << ADF_VF2PF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
+ u32 msg = (ADF_PFVF_MSGORIGIN_SYSTEM |
|
|
Torsten Duwe |
2ca2bc |
+ (ADF_VF2PF_MSGTYPE_SHUTDOWN << ADF_PFVF_MSGTYPE_SHIFT));
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
if (test_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status))
|
|
Torsten Duwe |
2ca2bc |
if (adf_send_vf2pf_msg(accel_dev, msg))
|
|
Torsten Duwe |
2ca2bc |
@@ -57,8 +57,8 @@ int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
2ca2bc |
u32 resp;
|
|
Torsten Duwe |
2ca2bc |
int ret;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- msg = ADF_VF2PF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
- msg |= ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ << ADF_VF2PF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
+ msg = ADF_PFVF_MSGORIGIN_SYSTEM;
|
|
Torsten Duwe |
2ca2bc |
+ msg |= ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ << ADF_PFVF_MSGTYPE_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
@@ -69,10 +69,10 @@ int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
2ca2bc |
return ret;
|
|
Torsten Duwe |
2ca2bc |
}
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
- pf_version = (resp & ADF_PF2VF_VERSION_RESP_VERS_MASK)
|
|
Torsten Duwe |
2ca2bc |
- >> ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
- compat = (resp & ADF_PF2VF_VERSION_RESP_RESULT_MASK)
|
|
Torsten Duwe |
2ca2bc |
- >> ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
|
|
Torsten Duwe |
2ca2bc |
+ pf_version = (resp >> ADF_PF2VF_VERSION_RESP_VERS_SHIFT)
|
|
Torsten Duwe |
2ca2bc |
+ & ADF_PF2VF_VERSION_RESP_VERS_MASK;
|
|
Torsten Duwe |
2ca2bc |
+ compat = (resp >> ADF_PF2VF_VERSION_RESP_RESULT_SHIFT)
|
|
Torsten Duwe |
2ca2bc |
+ & ADF_PF2VF_VERSION_RESP_RESULT_MASK;
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
/* Response from PF received, check compatibility */
|
|
Torsten Duwe |
2ca2bc |
switch (compat) {
|
|
Torsten Duwe |
2ca2bc |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
2ca2bc |
index 9c7489ed122ca..f8d1c7d0ec4e6 100644
|
|
Torsten Duwe |
2ca2bc |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
2ca2bc |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
2ca2bc |
@@ -88,7 +88,7 @@ int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg, u32 *resp)
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
static bool adf_handle_pf2vf_msg(struct adf_accel_dev *accel_dev, u32 msg)
|
|
Torsten Duwe |
2ca2bc |
{
|
|
Torsten Duwe |
2ca2bc |
- switch ((msg & ADF_PF2VF_MSGTYPE_MASK) >> ADF_PF2VF_MSGTYPE_SHIFT) {
|
|
Torsten Duwe |
2ca2bc |
+ switch ((msg >> ADF_PFVF_MSGTYPE_SHIFT) & ADF_PFVF_MSGTYPE_MASK) {
|
|
Torsten Duwe |
2ca2bc |
case ADF_PF2VF_MSGTYPE_RESTARTING:
|
|
Torsten Duwe |
2ca2bc |
dev_dbg(&GET_DEV(accel_dev), "Restarting message received from PF\n");
|
|
Torsten Duwe |
2ca2bc |
|
|
Torsten Duwe |
2ca2bc |
--
|
|
Torsten Duwe |
2ca2bc |
2.35.3
|
|
Torsten Duwe |
2ca2bc |
|