|
Torsten Duwe |
57cdfd |
From a9dc0d966605377e9aa512efdcaf9653f40cc2d5 Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
57cdfd |
From: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
57cdfd |
Date: Thu, 16 Dec 2021 09:13:31 +0000
|
|
Torsten Duwe |
57cdfd |
Subject: [PATCH] crypto: qat - add PFVF support to the GEN4 host driver
|
|
Torsten Duwe |
57cdfd |
Git-commit: a9dc0d966605377e9aa512efdcaf9653f40cc2d5
|
|
Torsten Duwe |
57cdfd |
Patch-mainline: v5.17-rc1
|
|
Torsten Duwe |
57cdfd |
References: jsc#PED-1073
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
So far PFVF support for GEN4 devices has been kept effectively disabled
|
|
Torsten Duwe |
57cdfd |
due to lack of support. This patch adds all the GEN4 specific logic to
|
|
Torsten Duwe |
57cdfd |
make PFVF fully functional on PF.
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
57cdfd |
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
57cdfd |
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
57cdfd |
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
|
|
Torsten Duwe |
57cdfd |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
57cdfd |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
---
|
|
Torsten Duwe |
57cdfd |
.../crypto/qat/qat_4xxx/adf_4xxx_hw_data.c | 10 +-
|
|
Torsten Duwe |
57cdfd |
drivers/crypto/qat/qat_common/Makefile | 2 +-
|
|
Torsten Duwe |
57cdfd |
drivers/crypto/qat/qat_common/adf_gen4_pfvf.c | 148 ++++++++++++++++++
|
|
Torsten Duwe |
57cdfd |
drivers/crypto/qat/qat_common/adf_gen4_pfvf.h | 17 ++
|
|
Torsten Duwe |
57cdfd |
drivers/crypto/qat/qat_common/adf_pfvf_msg.h | 29 +++-
|
|
Torsten Duwe |
57cdfd |
5 files changed, 196 insertions(+), 10 deletions(-)
|
|
Torsten Duwe |
57cdfd |
create mode 100644 drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
57cdfd |
create mode 100644 drivers/crypto/qat/qat_common/adf_gen4_pfvf.h
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
diff --git a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
|
|
Torsten Duwe |
57cdfd |
index 67cd20f443ab4..ef71aa4efd646 100644
|
|
Torsten Duwe |
57cdfd |
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
|
|
Torsten Duwe |
57cdfd |
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
|
|
Torsten Duwe |
57cdfd |
@@ -4,6 +4,7 @@
|
|
Torsten Duwe |
57cdfd |
#include <adf_accel_devices.h>
|
|
Torsten Duwe |
57cdfd |
#include <adf_common_drv.h>
|
|
Torsten Duwe |
57cdfd |
#include <adf_gen4_hw_data.h>
|
|
Torsten Duwe |
57cdfd |
+#include <adf_gen4_pfvf.h>
|
|
Torsten Duwe |
57cdfd |
#include "adf_4xxx_hw_data.h"
|
|
Torsten Duwe |
57cdfd |
#include "icp_qat_hw.h"
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
@@ -228,12 +229,6 @@ static u32 uof_get_ae_mask(u32 obj_num)
|
|
Torsten Duwe |
57cdfd |
return adf_4xxx_fw_config[obj_num].ae_mask;
|
|
Torsten Duwe |
57cdfd |
}
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
-static u32 get_vf2pf_sources(void __iomem *pmisc_addr)
|
|
Torsten Duwe |
57cdfd |
-{
|
|
Torsten Duwe |
57cdfd |
- /* For the moment do not report vf2pf sources */
|
|
Torsten Duwe |
57cdfd |
- return 0;
|
|
Torsten Duwe |
57cdfd |
-}
|
|
Torsten Duwe |
57cdfd |
-
|
|
Torsten Duwe |
57cdfd |
void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data)
|
|
Torsten Duwe |
57cdfd |
{
|
|
Torsten Duwe |
57cdfd |
hw_data->dev_class = &adf_4xxx_class;
|
|
Torsten Duwe |
57cdfd |
@@ -278,12 +273,11 @@ void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data)
|
|
Torsten Duwe |
57cdfd |
hw_data->uof_get_ae_mask = uof_get_ae_mask;
|
|
Torsten Duwe |
57cdfd |
hw_data->set_msix_rttable = set_msix_default_rttable;
|
|
Torsten Duwe |
57cdfd |
hw_data->set_ssm_wdtimer = adf_gen4_set_ssm_wdtimer;
|
|
Torsten Duwe |
57cdfd |
- hw_data->pfvf_ops.enable_comms = adf_pfvf_comms_disabled;
|
|
Torsten Duwe |
57cdfd |
- hw_data->pfvf_ops.get_vf2pf_sources = get_vf2pf_sources;
|
|
Torsten Duwe |
57cdfd |
hw_data->disable_iov = adf_disable_sriov;
|
|
Torsten Duwe |
57cdfd |
hw_data->ring_pair_reset = adf_gen4_ring_pair_reset;
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
adf_gen4_init_hw_csr_ops(&hw_data->csr_ops);
|
|
Torsten Duwe |
57cdfd |
+ adf_gen4_init_pf_pfvf_ops(&hw_data->pfvf_ops);
|
|
Torsten Duwe |
57cdfd |
}
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
void adf_clean_hw_data_4xxx(struct adf_hw_device_data *hw_data)
|
|
Torsten Duwe |
57cdfd |
diff --git a/drivers/crypto/qat/qat_common/Makefile b/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
57cdfd |
index 80f6cb424753c..7e191a42a5c7e 100644
|
|
Torsten Duwe |
57cdfd |
--- a/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
57cdfd |
+++ b/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
57cdfd |
@@ -22,4 +22,4 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_transport_debug.o
|
|
Torsten Duwe |
57cdfd |
intel_qat-$(CONFIG_PCI_IOV) += adf_sriov.o adf_vf_isr.o adf_pfvf_utils.o \
|
|
Torsten Duwe |
57cdfd |
adf_pfvf_pf_msg.o adf_pfvf_pf_proto.o \
|
|
Torsten Duwe |
57cdfd |
adf_pfvf_vf_msg.o adf_pfvf_vf_proto.o \
|
|
Torsten Duwe |
57cdfd |
- adf_gen2_pfvf.o
|
|
Torsten Duwe |
57cdfd |
+ adf_gen2_pfvf.o adf_gen4_pfvf.o
|
|
Torsten Duwe |
57cdfd |
diff --git a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
57cdfd |
new file mode 100644
|
|
Torsten Duwe |
57cdfd |
index 0000000000000..8efbedf63bc80
|
|
Torsten Duwe |
57cdfd |
--- /dev/null
|
|
Torsten Duwe |
57cdfd |
+++ b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
57cdfd |
@@ -0,0 +1,148 @@
|
|
Torsten Duwe |
57cdfd |
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
|
|
Torsten Duwe |
57cdfd |
+/* Copyright(c) 2021 Intel Corporation */
|
|
Torsten Duwe |
57cdfd |
+#include <linux/iopoll.h>
|
|
Torsten Duwe |
57cdfd |
+#include <linux/mutex.h>
|
|
Torsten Duwe |
57cdfd |
+#include <linux/types.h>
|
|
Torsten Duwe |
57cdfd |
+#include "adf_accel_devices.h"
|
|
Torsten Duwe |
57cdfd |
+#include "adf_common_drv.h"
|
|
Torsten Duwe |
57cdfd |
+#include "adf_gen4_pfvf.h"
|
|
Torsten Duwe |
57cdfd |
+#include "adf_pfvf_pf_proto.h"
|
|
Torsten Duwe |
57cdfd |
+#include "adf_pfvf_utils.h"
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_MAX_NUM_VFS 16
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_PF2VM_OFFSET(i) (0x40B010 + ((i) * 0x20))
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_VM2PF_OFFSET(i) (0x40B014 + ((i) * 0x20))
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+/* VF2PF interrupt source registers */
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_VM2PF_SOU(i) (0x41A180 + ((i) * 4))
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_VM2PF_MSK(i) (0x41A1C0 + ((i) * 4))
|
|
Torsten Duwe |
57cdfd |
+#define ADF_4XXX_VM2PF_INT_EN_MSK BIT(0)
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#define ADF_PFVF_GEN4_MSGTYPE_SHIFT 2
|
|
Torsten Duwe |
57cdfd |
+#define ADF_PFVF_GEN4_MSGTYPE_MASK 0x3F
|
|
Torsten Duwe |
57cdfd |
+#define ADF_PFVF_GEN4_MSGDATA_SHIFT 8
|
|
Torsten Duwe |
57cdfd |
+#define ADF_PFVF_GEN4_MSGDATA_MASK 0xFFFFFF
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static const struct pfvf_csr_format csr_gen4_fmt = {
|
|
Torsten Duwe |
57cdfd |
+ { ADF_PFVF_GEN4_MSGTYPE_SHIFT, ADF_PFVF_GEN4_MSGTYPE_MASK },
|
|
Torsten Duwe |
57cdfd |
+ { ADF_PFVF_GEN4_MSGDATA_SHIFT, ADF_PFVF_GEN4_MSGDATA_MASK },
|
|
Torsten Duwe |
57cdfd |
+};
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static u32 adf_gen4_pf_get_pf2vf_offset(u32 i)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ return ADF_4XXX_PF2VM_OFFSET(i);
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static u32 adf_gen4_pf_get_vf2pf_offset(u32 i)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ return ADF_4XXX_VM2PF_OFFSET(i);
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static u32 adf_gen4_get_vf2pf_sources(void __iomem *pmisc_addr)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ int i;
|
|
Torsten Duwe |
57cdfd |
+ u32 sou, mask;
|
|
Torsten Duwe |
57cdfd |
+ int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
57cdfd |
+ u32 vf_mask = 0;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ for (i = 0; i < num_csrs; i++) {
|
|
Torsten Duwe |
57cdfd |
+ sou = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_SOU(i));
|
|
Torsten Duwe |
57cdfd |
+ mask = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_MSK(i));
|
|
Torsten Duwe |
57cdfd |
+ sou &= ~mask;
|
|
Torsten Duwe |
57cdfd |
+ vf_mask |= sou << i;
|
|
Torsten Duwe |
57cdfd |
+ }
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ return vf_mask;
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static void adf_gen4_enable_vf2pf_interrupts(void __iomem *pmisc_addr,
|
|
Torsten Duwe |
57cdfd |
+ u32 vf_mask)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
57cdfd |
+ unsigned long mask = vf_mask;
|
|
Torsten Duwe |
57cdfd |
+ unsigned int val;
|
|
Torsten Duwe |
57cdfd |
+ int i;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ for_each_set_bit(i, &mask, num_csrs) {
|
|
Torsten Duwe |
57cdfd |
+ unsigned int offset = ADF_4XXX_VM2PF_MSK(i);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ val = ADF_CSR_RD(pmisc_addr, offset) & ~ADF_4XXX_VM2PF_INT_EN_MSK;
|
|
Torsten Duwe |
57cdfd |
+ ADF_CSR_WR(pmisc_addr, offset, val);
|
|
Torsten Duwe |
57cdfd |
+ }
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static void adf_gen4_disable_vf2pf_interrupts(void __iomem *pmisc_addr,
|
|
Torsten Duwe |
57cdfd |
+ u32 vf_mask)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
57cdfd |
+ unsigned long mask = vf_mask;
|
|
Torsten Duwe |
57cdfd |
+ unsigned int val;
|
|
Torsten Duwe |
57cdfd |
+ int i;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ for_each_set_bit(i, &mask, num_csrs) {
|
|
Torsten Duwe |
57cdfd |
+ unsigned int offset = ADF_4XXX_VM2PF_MSK(i);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ val = ADF_CSR_RD(pmisc_addr, offset) | ADF_4XXX_VM2PF_INT_EN_MSK;
|
|
Torsten Duwe |
57cdfd |
+ ADF_CSR_WR(pmisc_addr, offset, val);
|
|
Torsten Duwe |
57cdfd |
+ }
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static int adf_gen4_pfvf_send(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
57cdfd |
+ struct pfvf_message msg, u32 pfvf_offset,
|
|
Torsten Duwe |
57cdfd |
+ struct mutex *csr_lock)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ void __iomem *pmisc_addr = adf_get_pmisc_base(accel_dev);
|
|
Torsten Duwe |
57cdfd |
+ u32 csr_val;
|
|
Torsten Duwe |
57cdfd |
+ int ret;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ csr_val = adf_pfvf_csr_msg_of(accel_dev, msg, &csr_gen4_fmt);
|
|
Torsten Duwe |
57cdfd |
+ if (unlikely(!csr_val))
|
|
Torsten Duwe |
57cdfd |
+ return -EINVAL;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ mutex_lock(csr_lock);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ ADF_CSR_WR(pmisc_addr, pfvf_offset, csr_val | ADF_PFVF_INT);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ /* Wait for confirmation from remote that it received the message */
|
|
Torsten Duwe |
57cdfd |
+ ret = read_poll_timeout(ADF_CSR_RD, csr_val, !(csr_val & ADF_PFVF_INT),
|
|
Torsten Duwe |
57cdfd |
+ ADF_PFVF_MSG_ACK_DELAY_US,
|
|
Torsten Duwe |
57cdfd |
+ ADF_PFVF_MSG_ACK_MAX_DELAY_US,
|
|
Torsten Duwe |
57cdfd |
+ true, pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
57cdfd |
+ if (ret < 0)
|
|
Torsten Duwe |
57cdfd |
+ dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ mutex_unlock(csr_lock);
|
|
Torsten Duwe |
57cdfd |
+ return ret;
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+static struct pfvf_message adf_gen4_pfvf_recv(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
57cdfd |
+ u32 pfvf_offset, u8 compat_ver)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ void __iomem *pmisc_addr = adf_get_pmisc_base(accel_dev);
|
|
Torsten Duwe |
57cdfd |
+ u32 csr_val;
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ /* Read message from the CSR */
|
|
Torsten Duwe |
57cdfd |
+ csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ /* We can now acknowledge the message reception by clearing the
|
|
Torsten Duwe |
57cdfd |
+ * interrupt bit
|
|
Torsten Duwe |
57cdfd |
+ */
|
|
Torsten Duwe |
57cdfd |
+ ADF_CSR_WR(pmisc_addr, pfvf_offset, csr_val & ~ADF_PFVF_INT);
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+ /* Return the pfvf_message format */
|
|
Torsten Duwe |
57cdfd |
+ return adf_pfvf_message_of(accel_dev, csr_val, &csr_gen4_fmt);
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+void adf_gen4_init_pf_pfvf_ops(struct adf_pfvf_ops *pfvf_ops)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->enable_comms = adf_enable_pf2vf_comms;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->get_pf2vf_offset = adf_gen4_pf_get_pf2vf_offset;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->get_vf2pf_offset = adf_gen4_pf_get_vf2pf_offset;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->get_vf2pf_sources = adf_gen4_get_vf2pf_sources;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->enable_vf2pf_interrupts = adf_gen4_enable_vf2pf_interrupts;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->disable_vf2pf_interrupts = adf_gen4_disable_vf2pf_interrupts;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->send_msg = adf_gen4_pfvf_send;
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->recv_msg = adf_gen4_pfvf_recv;
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+EXPORT_SYMBOL_GPL(adf_gen4_init_pf_pfvf_ops);
|
|
Torsten Duwe |
57cdfd |
diff --git a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.h b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.h
|
|
Torsten Duwe |
57cdfd |
new file mode 100644
|
|
Torsten Duwe |
57cdfd |
index 0000000000000..17d1b774d4a8d
|
|
Torsten Duwe |
57cdfd |
--- /dev/null
|
|
Torsten Duwe |
57cdfd |
+++ b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.h
|
|
Torsten Duwe |
57cdfd |
@@ -0,0 +1,17 @@
|
|
Torsten Duwe |
57cdfd |
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
|
|
Torsten Duwe |
57cdfd |
+/* Copyright(c) 2021 Intel Corporation */
|
|
Torsten Duwe |
57cdfd |
+#ifndef ADF_GEN4_PFVF_H
|
|
Torsten Duwe |
57cdfd |
+#define ADF_GEN4_PFVF_H
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#include "adf_accel_devices.h"
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#ifdef CONFIG_PCI_IOV
|
|
Torsten Duwe |
57cdfd |
+void adf_gen4_init_pf_pfvf_ops(struct adf_pfvf_ops *pfvf_ops);
|
|
Torsten Duwe |
57cdfd |
+#else
|
|
Torsten Duwe |
57cdfd |
+static inline void adf_gen4_init_pf_pfvf_ops(struct adf_pfvf_ops *pfvf_ops)
|
|
Torsten Duwe |
57cdfd |
+{
|
|
Torsten Duwe |
57cdfd |
+ pfvf_ops->enable_comms = adf_pfvf_comms_disabled;
|
|
Torsten Duwe |
57cdfd |
+}
|
|
Torsten Duwe |
57cdfd |
+#endif
|
|
Torsten Duwe |
57cdfd |
+
|
|
Torsten Duwe |
57cdfd |
+#endif /* ADF_GEN4_PFVF_H */
|
|
Torsten Duwe |
57cdfd |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
57cdfd |
index 1d3cad7d49995..f00e9e2c585b4 100644
|
|
Torsten Duwe |
57cdfd |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
57cdfd |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
57cdfd |
@@ -6,7 +6,8 @@
|
|
Torsten Duwe |
57cdfd |
#include <linux/bits.h>
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
/*
|
|
Torsten Duwe |
57cdfd |
- * PF<->VF Messaging
|
|
Torsten Duwe |
57cdfd |
+ * PF<->VF Gen2 Messaging format
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
* The PF has an array of 32-bit PF2VF registers, one for each VF. The
|
|
Torsten Duwe |
57cdfd |
* PF can access all these registers; each VF can access only the one
|
|
Torsten Duwe |
57cdfd |
* register associated with that particular VF.
|
|
Torsten Duwe |
57cdfd |
@@ -53,6 +54,32 @@
|
|
Torsten Duwe |
57cdfd |
* respectively, the other 16 bits are written to first with a defined
|
|
Torsten Duwe |
57cdfd |
* IN_USE_BY pattern as part of a collision control scheme (see function
|
|
Torsten Duwe |
57cdfd |
* adf_gen2_pfvf_send() in adf_pf2vf_msg.c).
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ * PF<->VF Gen4 Messaging format
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ * Similarly to the gen2 messaging format, 32-bit long registers are used for
|
|
Torsten Duwe |
57cdfd |
+ * communication between PF and VFs. However, each VF and PF share a pair of
|
|
Torsten Duwe |
57cdfd |
+ * 32-bits register to avoid collisions: one for PV to VF messages and one
|
|
Torsten Duwe |
57cdfd |
+ * for VF to PF messages.
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ * Both the Interrupt bit and the Message Origin bit retain the same position
|
|
Torsten Duwe |
57cdfd |
+ * and meaning, although non-system messages are now deprecated and not
|
|
Torsten Duwe |
57cdfd |
+ * expected.
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ * 31 30 9 8 7 6 5 4 3 2 1 0
|
|
Torsten Duwe |
57cdfd |
+ * _______________________________________________
|
|
Torsten Duwe |
57cdfd |
+ * | | | . . . | | | | | | | | | | |
|
|
Torsten Duwe |
57cdfd |
+ * +-----------------------------------------------+
|
|
Torsten Duwe |
57cdfd |
+ * \_____________________/ \_______________/ ^ ^
|
|
Torsten Duwe |
57cdfd |
+ * ^ ^ | |
|
|
Torsten Duwe |
57cdfd |
+ * | | | PF/VF Int
|
|
Torsten Duwe |
57cdfd |
+ * | | Message Origin
|
|
Torsten Duwe |
57cdfd |
+ * | Message Type
|
|
Torsten Duwe |
57cdfd |
+ * Message-specific Data/Reserved
|
|
Torsten Duwe |
57cdfd |
+ *
|
|
Torsten Duwe |
57cdfd |
+ * For both formats, the message reception is acknowledged by lowering the
|
|
Torsten Duwe |
57cdfd |
+ * interrupt bit on the register where the message was sent.
|
|
Torsten Duwe |
57cdfd |
*/
|
|
Torsten Duwe |
57cdfd |
|
|
Torsten Duwe |
57cdfd |
/* PFVF message common bits */
|
|
Torsten Duwe |
57cdfd |
--
|
|
Torsten Duwe |
57cdfd |
2.35.3
|
|
Torsten Duwe |
57cdfd |
|