Torsten Duwe 55964e
From 09ce899a592f7a8ee19857ad0ef394e31be83c1d Mon Sep 17 00:00:00 2001
Torsten Duwe 55964e
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 55964e
Date: Wed, 17 Nov 2021 14:30:51 +0000
Torsten Duwe 55964e
Subject: [PATCH] crypto: qat - reorganize PFVF code
Torsten Duwe 55964e
Git-commit: 09ce899a592f7a8ee19857ad0ef394e31be83c1d
Torsten Duwe 55964e
Patch-mainline: v5.17-rc1
Torsten Duwe 55964e
References: jsc#PED-1073
Torsten Duwe 55964e
Torsten Duwe 55964e
Reorganize the structure of the PFVF code by moving the content of
Torsten Duwe 55964e
adf_pf2vf_msg.c and adf_vf2pf_msg.c.
Torsten Duwe 55964e
Torsten Duwe 55964e
The logic that handles high level messages has been moved to
Torsten Duwe 55964e
adf_pfvf_pf_msg.c and adf_pfvf_vf_msg.c.
Torsten Duwe 55964e
The implementation of low level communication primitives and the
Torsten Duwe 55964e
protocol is now included in adf_pfvf_pf_proto.c and adf_pfvf_vf_proto.c.
Torsten Duwe 55964e
Torsten Duwe 55964e
In addition, the file adf_pf2vf_msg.h has been renamed in adf_pfvf_msg.h
Torsten Duwe 55964e
since it common to PF and VF and the copyright date for the touched
Torsten Duwe 55964e
files has been updated.
Torsten Duwe 55964e
Torsten Duwe 55964e
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 55964e
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 55964e
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 55964e
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe 55964e
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe 55964e
Torsten Duwe 55964e
---
Torsten Duwe 55964e
 .../crypto/qat/qat_4xxx/adf_4xxx_hw_data.c    |   4 +-
Torsten Duwe 55964e
 .../crypto/qat/qat_c3xxx/adf_c3xxx_hw_data.c  |   4 +-
Torsten Duwe 55964e
 .../qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c     |   5 +-
Torsten Duwe 55964e
 .../crypto/qat/qat_c62x/adf_c62x_hw_data.c    |   4 +-
Torsten Duwe 55964e
 .../qat/qat_c62xvf/adf_c62xvf_hw_data.c       |   5 +-
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/Makefile        |   5 +-
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_common_drv.h    |  22 +-
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_gen2_pfvf.c |   4 +-
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 283 ------------------
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_pf2vf_msg.h |  94 ------
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_pfvf_msg.h  |  94 ++++++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_pf_msg.c   |  21 ++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_pf_msg.h   |  10 +
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_pf_proto.c | 158 ++++++++++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_pf_proto.h |  13 +
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_vf_msg.c   |  93 ++++++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_vf_msg.h   |  21 ++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_vf_proto.c | 133 ++++++++
Torsten Duwe 55964e
 .../crypto/qat/qat_common/adf_pfvf_vf_proto.h |  14 +
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_sriov.c     |   4 +-
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_vf2pf_msg.c | 100 -------
Torsten Duwe 55964e
 drivers/crypto/qat/qat_common/adf_vf_isr.c    |   1 -
Torsten Duwe 55964e
 .../qat/qat_dh895xcc/adf_dh895xcc_hw_data.c   |   4 +-
Torsten Duwe 55964e
 .../qat_dh895xccvf/adf_dh895xccvf_hw_data.c   |   5 +-
Torsten Duwe 55964e
 24 files changed, 583 insertions(+), 518 deletions(-)
Torsten Duwe 55964e
 delete mode 100644 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 55964e
 delete mode 100644 drivers/crypto/qat/qat_common/adf_pf2vf_msg.h
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_msg.h
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.h
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.h
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.h
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
Torsten Duwe 55964e
 create mode 100644 drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.h
Torsten Duwe 55964e
 delete mode 100644 drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe 55964e
Torsten Duwe 55964e
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 55964e
index ec57a2e2d1fcb..2a878d98f81aa 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,10 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2020 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <linux/iopoll.h>
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_gen4_hw_data.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
 #include "adf_4xxx_hw_data.h"
Torsten Duwe 55964e
 #include "icp_qat_hw.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_c3xxx/adf_c3xxx_hw_data.c b/drivers/crypto/qat/qat_c3xxx/adf_c3xxx_hw_data.c
Torsten Duwe 55964e
index d25f78660b8cb..94a11e72edae1 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_c3xxx/adf_c3xxx_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_c3xxx/adf_c3xxx_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,10 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2014 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2014 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
 #include "adf_c3xxx_hw_data.h"
Torsten Duwe 55964e
 #include "icp_qat_hw.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c b/drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c
Torsten Duwe 55964e
index c39733320063a..4c43a0d93fa60 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,11 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
+#include <adf_pfvf_vf_msg.h>
Torsten Duwe 55964e
 #include "adf_c3xxxvf_hw_data.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 static struct adf_hw_device_class c3xxxiov_class = {
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_c62x/adf_c62x_hw_data.c b/drivers/crypto/qat/qat_c62x/adf_c62x_hw_data.c
Torsten Duwe 55964e
index f24a01e1bc1a1..3cb1a88d97aec 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_c62x/adf_c62x_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_c62x/adf_c62x_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,10 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2014 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2014 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
 #include "adf_c62x_hw_data.h"
Torsten Duwe 55964e
 #include "icp_qat_hw.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c b/drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c
Torsten Duwe 55964e
index 03097bbe600a2..c4b23e2cd5796 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,11 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
+#include <adf_pfvf_vf_msg.h>
Torsten Duwe 55964e
 #include "adf_c62xvf_hw_data.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 static struct adf_hw_device_class c62xiov_class = {
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/Makefile b/drivers/crypto/qat/qat_common/Makefile
Torsten Duwe 55964e
index 676aef6533e0f..1376504d16ff7 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/Makefile
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/Makefile
Torsten Duwe 55964e
@@ -19,6 +19,7 @@ intel_qat-objs := adf_cfg.o \
Torsten Duwe 55964e
 	qat_hal.o
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 intel_qat-$(CONFIG_DEBUG_FS) += adf_transport_debug.o
Torsten Duwe 55964e
-intel_qat-$(CONFIG_PCI_IOV) += adf_sriov.o adf_pf2vf_msg.o \
Torsten Duwe 55964e
-			       adf_vf2pf_msg.o adf_vf_isr.o \
Torsten Duwe 55964e
+intel_qat-$(CONFIG_PCI_IOV) += adf_sriov.o adf_vf_isr.o \
Torsten Duwe 55964e
+			       adf_pfvf_pf_msg.o adf_pfvf_pf_proto.o \
Torsten Duwe 55964e
+			       adf_pfvf_vf_msg.o adf_pfvf_vf_proto.o \
Torsten Duwe 55964e
 			       adf_gen2_pfvf.o
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 55964e
index c0699e4535027..2d8b720855054 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 55964e
@@ -1,5 +1,5 @@
Torsten Duwe 55964e
 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
-/* Copyright(c) 2014 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2014 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #ifndef ADF_DRV_H
Torsten Duwe 55964e
 #define ADF_DRV_H
Torsten Duwe 55964e
 
Torsten Duwe 55964e
@@ -62,8 +62,6 @@ int adf_dev_start(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_dev_stop(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_dev_shutdown(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 
Torsten Duwe 55964e
-void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
-int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_devmgr_update_class_index(struct adf_hw_device_data *hw_data);
Torsten Duwe 55964e
 void adf_clean_vf_map(bool);
Torsten Duwe 55964e
 
Torsten Duwe 55964e
@@ -199,13 +197,9 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
Torsten Duwe 55964e
 bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr);
Torsten Duwe 55964e
 int adf_pf2vf_handle_pf_restarting(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
-int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 void adf_schedule_vf2pf_handler(struct adf_accel_vf_info *vf_info);
Torsten Duwe 55964e
-int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg);
Torsten Duwe 55964e
-int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
-void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 int adf_init_pf_wq(void);
Torsten Duwe 55964e
 void adf_exit_pf_wq(void);
Torsten Duwe 55964e
 int adf_init_vf_wq(void);
Torsten Duwe 55964e
@@ -214,11 +208,6 @@ void adf_flush_vf_wq(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
 #else
Torsten Duwe 55964e
 #define adf_sriov_configure NULL
Torsten Duwe 55964e
 
Torsten Duwe 55964e
-static inline int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
 static inline void adf_disable_sriov(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
 {
Torsten Duwe 55964e
 }
Torsten Duwe 55964e
@@ -231,15 +220,6 @@ static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
 {
Torsten Duwe 55964e
 }
Torsten Duwe 55964e
 
Torsten Duwe 55964e
-static inline int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-static inline void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
 static inline int adf_init_pf_wq(void)
Torsten Duwe 55964e
 {
Torsten Duwe 55964e
 	return 0;
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe 55964e
index f79c3ca28283a..f3a0a9d651e0d 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_gen2_pfvf.c
Torsten Duwe 55964e
@@ -6,7 +6,9 @@
Torsten Duwe 55964e
 #include "adf_accel_devices.h"
Torsten Duwe 55964e
 #include "adf_common_drv.h"
Torsten Duwe 55964e
 #include "adf_gen2_pfvf.h"
Torsten Duwe 55964e
-#include "adf_pf2vf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_pf_proto.h"
Torsten Duwe 55964e
+#include "adf_pfvf_vf_proto.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
  /* VF2PF interrupts */
Torsten Duwe 55964e
 #define ADF_GEN2_ERR_REG_VF2PF(vf_src)	(((vf_src) & 0x01FFFE00) >> 9)
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 55964e
deleted file mode 100644
Torsten Duwe 55964e
index c064e8bab50dd..0000000000000
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
Torsten Duwe 55964e
+++ /dev/null
Torsten Duwe 55964e
@@ -1,283 +0,0 @@
Torsten Duwe 55964e
-// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
-#include "adf_accel_devices.h"
Torsten Duwe 55964e
-#include "adf_common_drv.h"
Torsten Duwe 55964e
-#include "adf_pf2vf_msg.h"
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-#define ADF_PFVF_MSG_COLLISION_DETECT_DELAY	10
Torsten Duwe 55964e
-#define ADF_PFVF_MSG_ACK_DELAY			2
Torsten Duwe 55964e
-#define ADF_PFVF_MSG_ACK_MAX_RETRY		100
Torsten Duwe 55964e
-#define ADF_PFVF_MSG_RESP_TIMEOUT	(ADF_PFVF_MSG_ACK_DELAY * \
Torsten Duwe 55964e
-					 ADF_PFVF_MSG_ACK_MAX_RETRY + \
Torsten Duwe 55964e
-					 ADF_PFVF_MSG_COLLISION_DETECT_DELAY)
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_send_pf2vf_msg() - send PF to VF message
Torsten Duwe 55964e
- * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
- * @vf_nr:	VF number to which the message will be sent
Torsten Duwe 55964e
- * @msg:	Message to send
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function allows the PF to send a message to a specific VF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-static int adf_send_pf2vf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr, u32 msg)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return GET_PFVF_OPS(accel_dev)->send_msg(accel_dev, msg, vf_nr);
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_send_vf2pf_msg() - send VF to PF message
Torsten Duwe 55964e
- * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
- * @msg:	Message to send
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function allows the VF to send a message to the PF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return GET_PFVF_OPS(accel_dev)->send_msg(accel_dev, msg, 0);
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_recv_vf2pf_msg() - receive a VF to PF message
Torsten Duwe 55964e
- * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
- * @vf_nr:	Number of the VF from where the message will be received
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function allows the PF to receive a message from a specific VF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: a valid message on success, zero otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-static u32 adf_recv_vf2pf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return GET_PFVF_OPS(accel_dev)->recv_msg(accel_dev, vf_nr);
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_send_vf2pf_req() - send VF2PF request message
Torsten Duwe 55964e
- * @accel_dev:	Pointer to acceleration device.
Torsten Duwe 55964e
- * @msg:	Request message to send
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function sends a message that requires a response from the VF to the PF
Torsten Duwe 55964e
- * and waits for a reply.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-static int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
Torsten Duwe 55964e
-	int ret;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	reinit_completion(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	/* Send request from VF to PF */
Torsten Duwe 55964e
-	ret = adf_send_vf2pf_msg(accel_dev, msg);
Torsten Duwe 55964e
-	if (ret) {
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Failed to send request msg to PF\n");
Torsten Duwe 55964e
-		return ret;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	/* Wait for response */
Torsten Duwe 55964e
-	if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
Torsten Duwe 55964e
-					 timeout)) {
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"PFVF request/response message timeout expired\n");
Torsten Duwe 55964e
-		return -EIO;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
Torsten Duwe 55964e
-				u32 msg, u32 *response)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	struct adf_accel_vf_info *vf_info = &accel_dev->pf.vf_info[vf_nr];
Torsten Duwe 55964e
-	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe 55964e
-	u32 resp = 0;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	switch ((msg & ADF_VF2PF_MSGTYPE_MASK) >> ADF_VF2PF_MSGTYPE_SHIFT) {
Torsten Duwe 55964e
-	case ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ:
Torsten Duwe 55964e
-		{
Torsten Duwe 55964e
-		u8 vf_compat_ver = msg >> ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-		resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
-			 (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
Torsten Duwe 55964e
-			  ADF_PF2VF_MSGTYPE_SHIFT) |
Torsten Duwe 55964e
-			 (ADF_PFVF_COMPAT_THIS_VERSION <<
Torsten Duwe 55964e
-			  ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Compatibility Version Request from VF%d vers=%u\n",
Torsten Duwe 55964e
-			vf_nr + 1, vf_compat_ver);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-		if (vf_compat_ver < hw_data->min_iov_compat_ver) {
Torsten Duwe 55964e
-			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-				"VF (vers %d) incompatible with PF (vers %d)\n",
Torsten Duwe 55964e
-				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
-			resp |= ADF_PF2VF_VF_INCOMPATIBLE <<
Torsten Duwe 55964e
-				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
-		} else if (vf_compat_ver > ADF_PFVF_COMPAT_THIS_VERSION) {
Torsten Duwe 55964e
-			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-				"VF (vers %d) compat with PF (vers %d) unkn.\n",
Torsten Duwe 55964e
-				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
-			resp |= ADF_PF2VF_VF_COMPAT_UNKNOWN <<
Torsten Duwe 55964e
-				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
-		} else {
Torsten Duwe 55964e
-			dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-				"VF (vers %d) compatible with PF (vers %d)\n",
Torsten Duwe 55964e
-				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
-			resp |= ADF_PF2VF_VF_COMPATIBLE <<
Torsten Duwe 55964e
-				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
-		}
Torsten Duwe 55964e
-		}
Torsten Duwe 55964e
-		break;
Torsten Duwe 55964e
-	case ADF_VF2PF_MSGTYPE_VERSION_REQ:
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Legacy VersionRequest received from VF%d 0x%x\n",
Torsten Duwe 55964e
-			vf_nr + 1, msg);
Torsten Duwe 55964e
-		resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
-			 (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
Torsten Duwe 55964e
-			  ADF_PF2VF_MSGTYPE_SHIFT) |
Torsten Duwe 55964e
-			 (ADF_PFVF_COMPAT_THIS_VERSION <<
Torsten Duwe 55964e
-			  ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
Torsten Duwe 55964e
-		resp |= ADF_PF2VF_VF_COMPATIBLE <<
Torsten Duwe 55964e
-			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
-		/* Set legacy major and minor version num */
Torsten Duwe 55964e
-		resp |= 1 << ADF_PF2VF_MAJORVERSION_SHIFT |
Torsten Duwe 55964e
-			1 << ADF_PF2VF_MINORVERSION_SHIFT;
Torsten Duwe 55964e
-		break;
Torsten Duwe 55964e
-	case ADF_VF2PF_MSGTYPE_INIT:
Torsten Duwe 55964e
-		{
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Init message received from VF%d 0x%x\n",
Torsten Duwe 55964e
-			vf_nr + 1, msg);
Torsten Duwe 55964e
-		vf_info->init = true;
Torsten Duwe 55964e
-		}
Torsten Duwe 55964e
-		break;
Torsten Duwe 55964e
-	case ADF_VF2PF_MSGTYPE_SHUTDOWN:
Torsten Duwe 55964e
-		{
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Shutdown message received from VF%d 0x%x\n",
Torsten Duwe 55964e
-			vf_nr + 1, msg);
Torsten Duwe 55964e
-		vf_info->init = false;
Torsten Duwe 55964e
-		}
Torsten Duwe 55964e
-		break;
Torsten Duwe 55964e
-	default:
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev), "Unknown message from VF%d (0x%x)\n",
Torsten Duwe 55964e
-			vf_nr + 1, msg);
Torsten Duwe 55964e
-		return -ENOMSG;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	*response = resp;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	u32 resp = 0;
Torsten Duwe 55964e
-	u32 msg;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	msg = adf_recv_vf2pf_msg(accel_dev, vf_nr);
Torsten Duwe 55964e
-	if (!msg)
Torsten Duwe 55964e
-		return true;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	if (adf_handle_vf2pf_msg(accel_dev, vf_nr, msg, &resp))
Torsten Duwe 55964e
-		return false;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	if (resp && adf_send_pf2vf_msg(accel_dev, vf_nr, resp))
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return true;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	struct adf_accel_vf_info *vf;
Torsten Duwe 55964e
-	u32 msg = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
-		(ADF_PF2VF_MSGTYPE_RESTARTING << ADF_PF2VF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
-	int i, num_vfs = pci_num_vf(accel_to_pci_dev(accel_dev));
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	for (i = 0, vf = accel_dev->pf.vf_info; i < num_vfs; i++, vf++) {
Torsten Duwe 55964e
-		if (vf->init && adf_send_pf2vf_msg(accel_dev, i, msg))
Torsten Duwe 55964e
-			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-				"Failed to send restarting msg to VF%d\n", i);
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe 55964e
-	u32 msg = 0;
Torsten Duwe 55964e
-	int ret;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	msg = ADF_VF2PF_MSGORIGIN_SYSTEM;
Torsten Duwe 55964e
-	msg |= ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ << ADF_VF2PF_MSGTYPE_SHIFT;
Torsten Duwe 55964e
-	msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
Torsten Duwe 55964e
-	BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	ret = adf_send_vf2pf_req(accel_dev, msg);
Torsten Duwe 55964e
-	if (ret) {
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Failed to send Compatibility Version Request.\n");
Torsten Duwe 55964e
-		return ret;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	/* Response from PF received, check compatibility */
Torsten Duwe 55964e
-	switch (accel_dev->vf.compatible) {
Torsten Duwe 55964e
-	case ADF_PF2VF_VF_COMPATIBLE:
Torsten Duwe 55964e
-		break;
Torsten Duwe 55964e
-	case ADF_PF2VF_VF_COMPAT_UNKNOWN:
Torsten Duwe 55964e
-		/* VF is newer than PF and decides whether it is compatible */
Torsten Duwe 55964e
-		if (accel_dev->vf.pf_version >= hw_data->min_iov_compat_ver) {
Torsten Duwe 55964e
-			accel_dev->vf.compatible = ADF_PF2VF_VF_COMPATIBLE;
Torsten Duwe 55964e
-			break;
Torsten Duwe 55964e
-		}
Torsten Duwe 55964e
-		fallthrough;
Torsten Duwe 55964e
-	case ADF_PF2VF_VF_INCOMPATIBLE:
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"PF (vers %d) and VF (vers %d) are not compatible\n",
Torsten Duwe 55964e
-			accel_dev->vf.pf_version,
Torsten Duwe 55964e
-			ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
-		return -EINVAL;
Torsten Duwe 55964e
-	default:
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Invalid response from PF; assume not compatible\n");
Torsten Duwe 55964e
-		return -EINVAL;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-	return ret;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_enable_vf2pf_comms() - Function enables communication from vf to pf
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * @accel_dev: Pointer to acceleration device virtual function.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	adf_enable_pf2vf_interrupts(accel_dev);
Torsten Duwe 55964e
-	return adf_vf2pf_request_version(accel_dev);
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-EXPORT_SYMBOL_GPL(adf_enable_vf2pf_comms);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_enable_pf2vf_comms() - Function enables communication from pf to vf
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * @accel_dev: Pointer to acceleration device virtual function.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function carries out the necessary steps to setup and start the PFVF
Torsten Duwe 55964e
- * communication channel, if any.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	spin_lock_init(&accel_dev->pf.vf2pf_ints_lock);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-EXPORT_SYMBOL_GPL(adf_enable_pf2vf_comms);
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.h b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.h
Torsten Duwe 55964e
deleted file mode 100644
Torsten Duwe 55964e
index 73eb8f13ad095..0000000000000
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.h
Torsten Duwe 55964e
+++ /dev/null
Torsten Duwe 55964e
@@ -1,94 +0,0 @@
Torsten Duwe 55964e
-/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
-#ifndef ADF_PF2VF_MSG_H
Torsten Duwe 55964e
-#define ADF_PF2VF_MSG_H
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/*
Torsten Duwe 55964e
- * PF<->VF Messaging
Torsten Duwe 55964e
- * The PF has an array of 32-bit PF2VF registers, one for each VF.  The
Torsten Duwe 55964e
- * PF can access all these registers; each VF can access only the one
Torsten Duwe 55964e
- * register associated with that particular VF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * The register functionally is split into two parts:
Torsten Duwe 55964e
- * The bottom half is for PF->VF messages. In particular when the first
Torsten Duwe 55964e
- * bit of this register (bit 0) gets set an interrupt will be triggered
Torsten Duwe 55964e
- * in the respective VF.
Torsten Duwe 55964e
- * The top half is for VF->PF messages. In particular when the first bit
Torsten Duwe 55964e
- * of this half of register (bit 16) gets set an interrupt will be triggered
Torsten Duwe 55964e
- * in the PF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * The remaining bits within this register are available to encode messages.
Torsten Duwe 55964e
- * and implement a collision control mechanism to prevent concurrent use of
Torsten Duwe 55964e
- * the PF2VF register by both the PF and VF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- *  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Torsten Duwe 55964e
- *  _______________________________________________
Torsten Duwe 55964e
- * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
Torsten Duwe 55964e
- * +-----------------------------------------------+
Torsten Duwe 55964e
- *  \___________________________/ \_________/ ^   ^
Torsten Duwe 55964e
- *                ^                    ^      |   |
Torsten Duwe 55964e
- *                |                    |      |   VF2PF Int
Torsten Duwe 55964e
- *                |                    |      Message Origin
Torsten Duwe 55964e
- *                |                    Message Type
Torsten Duwe 55964e
- *                Message-specific Data/Reserved
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- *  15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Torsten Duwe 55964e
- *  _______________________________________________
Torsten Duwe 55964e
- * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
Torsten Duwe 55964e
- * +-----------------------------------------------+
Torsten Duwe 55964e
- *  \___________________________/ \_________/ ^   ^
Torsten Duwe 55964e
- *                ^                    ^      |   |
Torsten Duwe 55964e
- *                |                    |      |   PF2VF Int
Torsten Duwe 55964e
- *                |                    |      Message Origin
Torsten Duwe 55964e
- *                |                    Message Type
Torsten Duwe 55964e
- *                Message-specific Data/Reserved
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Message Origin (Should always be 1)
Torsten Duwe 55964e
- * A legacy out-of-tree QAT driver allowed for a set of messages not supported
Torsten Duwe 55964e
- * by this driver; these had a Msg Origin of 0 and are ignored by this driver.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * When a PF or VF attempts to send a message in the lower or upper 16 bits,
Torsten Duwe 55964e
- * respectively, the other 16 bits are written to first with a defined
Torsten Duwe 55964e
- * IN_USE_BY pattern as part of a collision control scheme (see function
Torsten Duwe 55964e
- * adf_gen2_pfvf_send() in adf_pf2vf_msg.c).
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-#define ADF_PFVF_COMPAT_THIS_VERSION		0x1	/* PF<->VF compat */
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/* PF->VF messages */
Torsten Duwe 55964e
-#define ADF_PF2VF_INT				BIT(0)
Torsten Duwe 55964e
-#define ADF_PF2VF_MSGORIGIN_SYSTEM		BIT(1)
Torsten Duwe 55964e
-#define ADF_PF2VF_MSGTYPE_MASK			0x0000003C
Torsten Duwe 55964e
-#define ADF_PF2VF_MSGTYPE_SHIFT			2
Torsten Duwe 55964e
-#define ADF_PF2VF_MSGTYPE_RESTARTING		0x01
Torsten Duwe 55964e
-#define ADF_PF2VF_MSGTYPE_VERSION_RESP		0x02
Torsten Duwe 55964e
-#define ADF_PF2VF_IN_USE_BY_PF			0x6AC20000
Torsten Duwe 55964e
-#define ADF_PF2VF_IN_USE_BY_PF_MASK		0xFFFE0000
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/* PF->VF Version Response */
Torsten Duwe 55964e
-#define ADF_PF2VF_VERSION_RESP_VERS_MASK	0x00003FC0
Torsten Duwe 55964e
-#define ADF_PF2VF_VERSION_RESP_VERS_SHIFT	6
Torsten Duwe 55964e
-#define ADF_PF2VF_VERSION_RESP_RESULT_MASK	0x0000C000
Torsten Duwe 55964e
-#define ADF_PF2VF_VERSION_RESP_RESULT_SHIFT	14
Torsten Duwe 55964e
-#define ADF_PF2VF_MINORVERSION_SHIFT		6
Torsten Duwe 55964e
-#define ADF_PF2VF_MAJORVERSION_SHIFT		10
Torsten Duwe 55964e
-#define ADF_PF2VF_VF_COMPATIBLE			1
Torsten Duwe 55964e
-#define ADF_PF2VF_VF_INCOMPATIBLE		2
Torsten Duwe 55964e
-#define ADF_PF2VF_VF_COMPAT_UNKNOWN		3
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/* VF->PF messages */
Torsten Duwe 55964e
-#define ADF_VF2PF_IN_USE_BY_VF			0x00006AC2
Torsten Duwe 55964e
-#define ADF_VF2PF_IN_USE_BY_VF_MASK		0x0000FFFE
Torsten Duwe 55964e
-#define ADF_VF2PF_INT				BIT(16)
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGORIGIN_SYSTEM		BIT(17)
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_MASK			0x003C0000
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_SHIFT			18
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_INIT			0x3
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_SHUTDOWN		0x4
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_VERSION_REQ		0x5
Torsten Duwe 55964e
-#define ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ	0x6
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/* VF->PF Compatible Version Request */
Torsten Duwe 55964e
-#define ADF_VF2PF_COMPAT_VER_REQ_SHIFT		22
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-#endif /* ADF_IOV_MSG_H */
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
Torsten Duwe 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..0520466563fd6
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
Torsten Duwe 55964e
@@ -0,0 +1,94 @@
Torsten Duwe 55964e
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
+#ifndef ADF_PFVF_MSG_H
Torsten Duwe 55964e
+#define ADF_PFVF_MSG_H
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/*
Torsten Duwe 55964e
+ * PF<->VF Messaging
Torsten Duwe 55964e
+ * The PF has an array of 32-bit PF2VF registers, one for each VF.  The
Torsten Duwe 55964e
+ * PF can access all these registers; each VF can access only the one
Torsten Duwe 55964e
+ * register associated with that particular VF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * The register functionally is split into two parts:
Torsten Duwe 55964e
+ * The bottom half is for PF->VF messages. In particular when the first
Torsten Duwe 55964e
+ * bit of this register (bit 0) gets set an interrupt will be triggered
Torsten Duwe 55964e
+ * in the respective VF.
Torsten Duwe 55964e
+ * The top half is for VF->PF messages. In particular when the first bit
Torsten Duwe 55964e
+ * of this half of register (bit 16) gets set an interrupt will be triggered
Torsten Duwe 55964e
+ * in the PF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * The remaining bits within this register are available to encode messages.
Torsten Duwe 55964e
+ * and implement a collision control mechanism to prevent concurrent use of
Torsten Duwe 55964e
+ * the PF2VF register by both the PF and VF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ *  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Torsten Duwe 55964e
+ *  _______________________________________________
Torsten Duwe 55964e
+ * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
Torsten Duwe 55964e
+ * +-----------------------------------------------+
Torsten Duwe 55964e
+ *  \___________________________/ \_________/ ^   ^
Torsten Duwe 55964e
+ *                ^                    ^      |   |
Torsten Duwe 55964e
+ *                |                    |      |   VF2PF Int
Torsten Duwe 55964e
+ *                |                    |      Message Origin
Torsten Duwe 55964e
+ *                |                    Message Type
Torsten Duwe 55964e
+ *                Message-specific Data/Reserved
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ *  15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Torsten Duwe 55964e
+ *  _______________________________________________
Torsten Duwe 55964e
+ * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
Torsten Duwe 55964e
+ * +-----------------------------------------------+
Torsten Duwe 55964e
+ *  \___________________________/ \_________/ ^   ^
Torsten Duwe 55964e
+ *                ^                    ^      |   |
Torsten Duwe 55964e
+ *                |                    |      |   PF2VF Int
Torsten Duwe 55964e
+ *                |                    |      Message Origin
Torsten Duwe 55964e
+ *                |                    Message Type
Torsten Duwe 55964e
+ *                Message-specific Data/Reserved
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Message Origin (Should always be 1)
Torsten Duwe 55964e
+ * A legacy out-of-tree QAT driver allowed for a set of messages not supported
Torsten Duwe 55964e
+ * by this driver; these had a Msg Origin of 0 and are ignored by this driver.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * When a PF or VF attempts to send a message in the lower or upper 16 bits,
Torsten Duwe 55964e
+ * respectively, the other 16 bits are written to first with a defined
Torsten Duwe 55964e
+ * IN_USE_BY pattern as part of a collision control scheme (see function
Torsten Duwe 55964e
+ * adf_gen2_pfvf_send() in adf_pf2vf_msg.c).
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#define ADF_PFVF_COMPAT_THIS_VERSION		0x1	/* PF<->VF compat */
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/* PF->VF messages */
Torsten Duwe 55964e
+#define ADF_PF2VF_INT				BIT(0)
Torsten Duwe 55964e
+#define ADF_PF2VF_MSGORIGIN_SYSTEM		BIT(1)
Torsten Duwe 55964e
+#define ADF_PF2VF_MSGTYPE_MASK			0x0000003C
Torsten Duwe 55964e
+#define ADF_PF2VF_MSGTYPE_SHIFT			2
Torsten Duwe 55964e
+#define ADF_PF2VF_MSGTYPE_RESTARTING		0x01
Torsten Duwe 55964e
+#define ADF_PF2VF_MSGTYPE_VERSION_RESP		0x02
Torsten Duwe 55964e
+#define ADF_PF2VF_IN_USE_BY_PF			0x6AC20000
Torsten Duwe 55964e
+#define ADF_PF2VF_IN_USE_BY_PF_MASK		0xFFFE0000
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/* PF->VF Version Response */
Torsten Duwe 55964e
+#define ADF_PF2VF_VERSION_RESP_VERS_MASK	0x00003FC0
Torsten Duwe 55964e
+#define ADF_PF2VF_VERSION_RESP_VERS_SHIFT	6
Torsten Duwe 55964e
+#define ADF_PF2VF_VERSION_RESP_RESULT_MASK	0x0000C000
Torsten Duwe 55964e
+#define ADF_PF2VF_VERSION_RESP_RESULT_SHIFT	14
Torsten Duwe 55964e
+#define ADF_PF2VF_MINORVERSION_SHIFT		6
Torsten Duwe 55964e
+#define ADF_PF2VF_MAJORVERSION_SHIFT		10
Torsten Duwe 55964e
+#define ADF_PF2VF_VF_COMPATIBLE			1
Torsten Duwe 55964e
+#define ADF_PF2VF_VF_INCOMPATIBLE		2
Torsten Duwe 55964e
+#define ADF_PF2VF_VF_COMPAT_UNKNOWN		3
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/* VF->PF messages */
Torsten Duwe 55964e
+#define ADF_VF2PF_IN_USE_BY_VF			0x00006AC2
Torsten Duwe 55964e
+#define ADF_VF2PF_IN_USE_BY_VF_MASK		0x0000FFFE
Torsten Duwe 55964e
+#define ADF_VF2PF_INT				BIT(16)
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGORIGIN_SYSTEM		BIT(17)
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_MASK			0x003C0000
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_SHIFT			18
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_INIT			0x3
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_SHUTDOWN		0x4
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_VERSION_REQ		0x5
Torsten Duwe 55964e
+#define ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ	0x6
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/* VF->PF Compatible Version Request */
Torsten Duwe 55964e
+#define ADF_VF2PF_COMPAT_VER_REQ_SHIFT		22
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#endif /* ADF_PFVF_MSG_H */
Torsten Duwe 55964e
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 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..647b82e6c4baf
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.c
Torsten Duwe 55964e
@@ -0,0 +1,21 @@
Torsten Duwe 55964e
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
+#include <linux/pci.h>
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+#include "adf_pfvf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_pf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_pf_proto.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	struct adf_accel_vf_info *vf;
Torsten Duwe 55964e
+	u32 msg = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
+		(ADF_PF2VF_MSGTYPE_RESTARTING << ADF_PF2VF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
+	int i, num_vfs = pci_num_vf(accel_to_pci_dev(accel_dev));
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	for (i = 0, vf = accel_dev->pf.vf_info; i < num_vfs; i++, vf++) {
Torsten Duwe 55964e
+		if (vf->init && adf_send_pf2vf_msg(accel_dev, i, msg))
Torsten Duwe 55964e
+			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+				"Failed to send restarting msg to VF%d\n", i);
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.h
Torsten Duwe 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..187807b1ff880
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_msg.h
Torsten Duwe 55964e
@@ -0,0 +1,10 @@
Torsten Duwe 55964e
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
+/* Copyright(c) 2021 Intel Corporation */
Torsten Duwe 55964e
+#ifndef ADF_PFVF_PF_MSG_H
Torsten Duwe 55964e
+#define ADF_PFVF_PF_MSG_H
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#endif /* ADF_PFVF_PF_MSG_H */
Torsten Duwe 55964e
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 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..ac6a54cf17f6d
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
Torsten Duwe 55964e
@@ -0,0 +1,158 @@
Torsten Duwe 55964e
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
+#include <linux/spinlock.h>
Torsten Duwe 55964e
+#include <linux/types.h>
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+#include "adf_common_drv.h"
Torsten Duwe 55964e
+#include "adf_pfvf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_pf_proto.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_send_pf2vf_msg() - send PF to VF message
Torsten Duwe 55964e
+ * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
+ * @vf_nr:	VF number to which the message will be sent
Torsten Duwe 55964e
+ * @msg:	Message to send
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function allows the PF to send a message to a specific VF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_send_pf2vf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr, u32 msg)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	return GET_PFVF_OPS(accel_dev)->send_msg(accel_dev, msg, vf_nr);
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_recv_vf2pf_msg() - receive a VF to PF message
Torsten Duwe 55964e
+ * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
+ * @vf_nr:	Number of the VF from where the message will be received
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function allows the PF to receive a message from a specific VF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: a valid message on success, zero otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+static u32 adf_recv_vf2pf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	return GET_PFVF_OPS(accel_dev)->recv_msg(accel_dev, vf_nr);
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
Torsten Duwe 55964e
+				u32 msg, u32 *response)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	struct adf_accel_vf_info *vf_info = &accel_dev->pf.vf_info[vf_nr];
Torsten Duwe 55964e
+	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe 55964e
+	u32 resp = 0;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	switch ((msg & ADF_VF2PF_MSGTYPE_MASK) >> ADF_VF2PF_MSGTYPE_SHIFT) {
Torsten Duwe 55964e
+	case ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ:
Torsten Duwe 55964e
+		{
Torsten Duwe 55964e
+		u8 vf_compat_ver = msg >> ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+		resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
+			 (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
Torsten Duwe 55964e
+			  ADF_PF2VF_MSGTYPE_SHIFT) |
Torsten Duwe 55964e
+			 (ADF_PFVF_COMPAT_THIS_VERSION <<
Torsten Duwe 55964e
+			  ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Compatibility Version Request from VF%d vers=%u\n",
Torsten Duwe 55964e
+			vf_nr + 1, vf_compat_ver);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+		if (vf_compat_ver < hw_data->min_iov_compat_ver) {
Torsten Duwe 55964e
+			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+				"VF (vers %d) incompatible with PF (vers %d)\n",
Torsten Duwe 55964e
+				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
+			resp |= ADF_PF2VF_VF_INCOMPATIBLE <<
Torsten Duwe 55964e
+				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
+		} else if (vf_compat_ver > ADF_PFVF_COMPAT_THIS_VERSION) {
Torsten Duwe 55964e
+			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+				"VF (vers %d) compat with PF (vers %d) unkn.\n",
Torsten Duwe 55964e
+				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
+			resp |= ADF_PF2VF_VF_COMPAT_UNKNOWN <<
Torsten Duwe 55964e
+				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
+		} else {
Torsten Duwe 55964e
+			dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+				"VF (vers %d) compatible with PF (vers %d)\n",
Torsten Duwe 55964e
+				vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
+			resp |= ADF_PF2VF_VF_COMPATIBLE <<
Torsten Duwe 55964e
+				ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
+		}
Torsten Duwe 55964e
+		}
Torsten Duwe 55964e
+		break;
Torsten Duwe 55964e
+	case ADF_VF2PF_MSGTYPE_VERSION_REQ:
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Legacy VersionRequest received from VF%d 0x%x\n",
Torsten Duwe 55964e
+			vf_nr + 1, msg);
Torsten Duwe 55964e
+		resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
+			 (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
Torsten Duwe 55964e
+			  ADF_PF2VF_MSGTYPE_SHIFT) |
Torsten Duwe 55964e
+			 (ADF_PFVF_COMPAT_THIS_VERSION <<
Torsten Duwe 55964e
+			  ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
Torsten Duwe 55964e
+		resp |= ADF_PF2VF_VF_COMPATIBLE <<
Torsten Duwe 55964e
+			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
+		/* Set legacy major and minor version num */
Torsten Duwe 55964e
+		resp |= 1 << ADF_PF2VF_MAJORVERSION_SHIFT |
Torsten Duwe 55964e
+			1 << ADF_PF2VF_MINORVERSION_SHIFT;
Torsten Duwe 55964e
+		break;
Torsten Duwe 55964e
+	case ADF_VF2PF_MSGTYPE_INIT:
Torsten Duwe 55964e
+		{
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Init message received from VF%d 0x%x\n",
Torsten Duwe 55964e
+			vf_nr + 1, msg);
Torsten Duwe 55964e
+		vf_info->init = true;
Torsten Duwe 55964e
+		}
Torsten Duwe 55964e
+		break;
Torsten Duwe 55964e
+	case ADF_VF2PF_MSGTYPE_SHUTDOWN:
Torsten Duwe 55964e
+		{
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Shutdown message received from VF%d 0x%x\n",
Torsten Duwe 55964e
+			vf_nr + 1, msg);
Torsten Duwe 55964e
+		vf_info->init = false;
Torsten Duwe 55964e
+		}
Torsten Duwe 55964e
+		break;
Torsten Duwe 55964e
+	default:
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev), "Unknown message from VF%d (0x%x)\n",
Torsten Duwe 55964e
+			vf_nr + 1, msg);
Torsten Duwe 55964e
+		return -ENOMSG;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	*response = resp;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return 0;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+bool adf_recv_and_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	u32 resp = 0;
Torsten Duwe 55964e
+	u32 msg;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	msg = adf_recv_vf2pf_msg(accel_dev, vf_nr);
Torsten Duwe 55964e
+	if (!msg)
Torsten Duwe 55964e
+		return true;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	if (adf_handle_vf2pf_msg(accel_dev, vf_nr, msg, &resp))
Torsten Duwe 55964e
+		return false;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	if (resp && adf_send_pf2vf_msg(accel_dev, vf_nr, resp))
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return true;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_enable_pf2vf_comms() - Function enables communication from pf to vf
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * @accel_dev: Pointer to acceleration device virtual function.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function carries out the necessary steps to setup and start the PFVF
Torsten Duwe 55964e
+ * communication channel, if any.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	spin_lock_init(&accel_dev->pf.vf2pf_ints_lock);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return 0;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+EXPORT_SYMBOL_GPL(adf_enable_pf2vf_comms);
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.h b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.h
Torsten Duwe 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..63245407bfb6f
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.h
Torsten Duwe 55964e
@@ -0,0 +1,13 @@
Torsten Duwe 55964e
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
+/* Copyright(c) 2021 Intel Corporation */
Torsten Duwe 55964e
+#ifndef ADF_PFVF_PF_PROTO_H
Torsten Duwe 55964e
+#define ADF_PFVF_PF_PROTO_H
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#include <linux/types.h>
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+int adf_send_pf2vf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr, u32 msg);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+int adf_enable_pf2vf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#endif /* ADF_PFVF_PF_PROTO_H */
Torsten Duwe 55964e
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 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..7969a644e24b7
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.c
Torsten Duwe 55964e
@@ -0,0 +1,93 @@
Torsten Duwe 55964e
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+#include "adf_common_drv.h"
Torsten Duwe 55964e
+#include "adf_pfvf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_vf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_vf_proto.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_vf2pf_notify_init() - send init msg to PF
Torsten Duwe 55964e
+ * @accel_dev:  Pointer to acceleration VF device.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Function sends an init message from the VF to a PF
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
+		(ADF_VF2PF_MSGTYPE_INIT << ADF_VF2PF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	if (adf_send_vf2pf_msg(accel_dev, msg)) {
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Failed to send Init event to PF\n");
Torsten Duwe 55964e
+		return -EFAULT;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+	set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
Torsten Duwe 55964e
+	return 0;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+EXPORT_SYMBOL_GPL(adf_vf2pf_notify_init);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_vf2pf_notify_shutdown() - send shutdown msg to PF
Torsten Duwe 55964e
+ * @accel_dev:  Pointer to acceleration VF device.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Function sends a shutdown message from the VF to a PF
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: void
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
+	    (ADF_VF2PF_MSGTYPE_SHUTDOWN << ADF_VF2PF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	if (test_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status))
Torsten Duwe 55964e
+		if (adf_send_vf2pf_msg(accel_dev, msg))
Torsten Duwe 55964e
+			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+				"Failed to send Shutdown event to PF\n");
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+EXPORT_SYMBOL_GPL(adf_vf2pf_notify_shutdown);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Torsten Duwe 55964e
+	u32 msg = 0;
Torsten Duwe 55964e
+	int ret;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	msg = ADF_VF2PF_MSGORIGIN_SYSTEM;
Torsten Duwe 55964e
+	msg |= ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ << ADF_VF2PF_MSGTYPE_SHIFT;
Torsten Duwe 55964e
+	msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
Torsten Duwe 55964e
+	BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	ret = adf_send_vf2pf_req(accel_dev, msg);
Torsten Duwe 55964e
+	if (ret) {
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Failed to send Compatibility Version Request.\n");
Torsten Duwe 55964e
+		return ret;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	/* Response from PF received, check compatibility */
Torsten Duwe 55964e
+	switch (accel_dev->vf.compatible) {
Torsten Duwe 55964e
+	case ADF_PF2VF_VF_COMPATIBLE:
Torsten Duwe 55964e
+		break;
Torsten Duwe 55964e
+	case ADF_PF2VF_VF_COMPAT_UNKNOWN:
Torsten Duwe 55964e
+		/* VF is newer than PF and decides whether it is compatible */
Torsten Duwe 55964e
+		if (accel_dev->vf.pf_version >= hw_data->min_iov_compat_ver) {
Torsten Duwe 55964e
+			accel_dev->vf.compatible = ADF_PF2VF_VF_COMPATIBLE;
Torsten Duwe 55964e
+			break;
Torsten Duwe 55964e
+		}
Torsten Duwe 55964e
+		fallthrough;
Torsten Duwe 55964e
+	case ADF_PF2VF_VF_INCOMPATIBLE:
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"PF (vers %d) and VF (vers %d) are not compatible\n",
Torsten Duwe 55964e
+			accel_dev->vf.pf_version,
Torsten Duwe 55964e
+			ADF_PFVF_COMPAT_THIS_VERSION);
Torsten Duwe 55964e
+		return -EINVAL;
Torsten Duwe 55964e
+	default:
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Invalid response from PF; assume not compatible\n");
Torsten Duwe 55964e
+		return -EINVAL;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+	return ret;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.h
Torsten Duwe 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..5091b5b2fd8f3
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_msg.h
Torsten Duwe 55964e
@@ -0,0 +1,21 @@
Torsten Duwe 55964e
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
+/* Copyright(c) 2021 Intel Corporation */
Torsten Duwe 55964e
+#ifndef ADF_PFVF_VF_MSG_H
Torsten Duwe 55964e
+#define ADF_PFVF_VF_MSG_H
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#if defined(CONFIG_PCI_IOV)
Torsten Duwe 55964e
+int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+#else
Torsten Duwe 55964e
+static inline int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	return 0;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+static inline void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+#endif
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#endif /* ADF_PFVF_VF_MSG_H */
Torsten Duwe 55964e
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 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..62817bcec121e
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
Torsten Duwe 55964e
@@ -0,0 +1,133 @@
Torsten Duwe 55964e
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
+#include <linux/completion.h>
Torsten Duwe 55964e
+#include <linux/types.h>
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+#include "adf_common_drv.h"
Torsten Duwe 55964e
+#include "adf_pfvf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_vf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_vf_proto.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#define ADF_PFVF_MSG_COLLISION_DETECT_DELAY	10
Torsten Duwe 55964e
+#define ADF_PFVF_MSG_ACK_DELAY			2
Torsten Duwe 55964e
+#define ADF_PFVF_MSG_ACK_MAX_RETRY		100
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#define ADF_PFVF_MSG_RESP_TIMEOUT	(ADF_PFVF_MSG_ACK_DELAY * \
Torsten Duwe 55964e
+					 ADF_PFVF_MSG_ACK_MAX_RETRY + \
Torsten Duwe 55964e
+					 ADF_PFVF_MSG_COLLISION_DETECT_DELAY)
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_send_vf2pf_msg() - send VF to PF message
Torsten Duwe 55964e
+ * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
+ * @msg:	Message to send
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function allows the VF to send a message to the PF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	return GET_PFVF_OPS(accel_dev)->send_msg(accel_dev, msg, 0);
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_recv_pf2vf_msg() - receive a PF to VF message
Torsten Duwe 55964e
+ * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function allows the VF to receive a message from the PF.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: a valid message on success, zero otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+static u32 adf_recv_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	return GET_PFVF_OPS(accel_dev)->recv_msg(accel_dev, 0);
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_send_vf2pf_req() - send VF2PF request message
Torsten Duwe 55964e
+ * @accel_dev:	Pointer to acceleration device.
Torsten Duwe 55964e
+ * @msg:	Request message to send
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * This function sends a message that requires a response from the VF to the PF
Torsten Duwe 55964e
+ * and waits for a reply.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
Torsten Duwe 55964e
+	int ret;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	reinit_completion(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	/* Send request from VF to PF */
Torsten Duwe 55964e
+	ret = adf_send_vf2pf_msg(accel_dev, msg);
Torsten Duwe 55964e
+	if (ret) {
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Failed to send request msg to PF\n");
Torsten Duwe 55964e
+		return ret;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	/* Wait for response */
Torsten Duwe 55964e
+	if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
Torsten Duwe 55964e
+					 timeout)) {
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"PFVF request/response message timeout expired\n");
Torsten Duwe 55964e
+		return -EIO;
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return 0;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+static bool adf_handle_pf2vf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	switch ((msg & ADF_PF2VF_MSGTYPE_MASK) >> ADF_PF2VF_MSGTYPE_SHIFT) {
Torsten Duwe 55964e
+	case ADF_PF2VF_MSGTYPE_RESTARTING:
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Restarting msg received from PF 0x%x\n", msg);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+		adf_pf2vf_handle_pf_restarting(accel_dev);
Torsten Duwe 55964e
+		return false;
Torsten Duwe 55964e
+	case ADF_PF2VF_MSGTYPE_VERSION_RESP:
Torsten Duwe 55964e
+		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Version resp received from PF 0x%x\n", msg);
Torsten Duwe 55964e
+		accel_dev->vf.pf_version =
Torsten Duwe 55964e
+			(msg & ADF_PF2VF_VERSION_RESP_VERS_MASK) >>
Torsten Duwe 55964e
+			ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
Torsten Duwe 55964e
+		accel_dev->vf.compatible =
Torsten Duwe 55964e
+			(msg & ADF_PF2VF_VERSION_RESP_RESULT_MASK) >>
Torsten Duwe 55964e
+			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
+		complete(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 55964e
+		return true;
Torsten Duwe 55964e
+	default:
Torsten Duwe 55964e
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
+			"Unknown PF2VF message(0x%x)\n", msg);
Torsten Duwe 55964e
+	}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return false;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	u32 msg;
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	msg = adf_recv_pf2vf_msg(accel_dev);
Torsten Duwe 55964e
+	if (msg)
Torsten Duwe 55964e
+		return adf_handle_pf2vf_msg(accel_dev, msg);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+	return true;
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+/**
Torsten Duwe 55964e
+ * adf_enable_vf2pf_comms() - Function enables communication from vf to pf
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * @accel_dev: Pointer to acceleration device virtual function.
Torsten Duwe 55964e
+ *
Torsten Duwe 55964e
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
+ */
Torsten Duwe 55964e
+int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
+{
Torsten Duwe 55964e
+	adf_enable_pf2vf_interrupts(accel_dev);
Torsten Duwe 55964e
+	return adf_vf2pf_request_version(accel_dev);
Torsten Duwe 55964e
+}
Torsten Duwe 55964e
+EXPORT_SYMBOL_GPL(adf_enable_vf2pf_comms);
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.h b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.h
Torsten Duwe 55964e
new file mode 100644
Torsten Duwe 55964e
index 0000000000000..a3ab24c7d18bd
Torsten Duwe 55964e
--- /dev/null
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.h
Torsten Duwe 55964e
@@ -0,0 +1,14 @@
Torsten Duwe 55964e
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
Torsten Duwe 55964e
+/* Copyright(c) 2021 Intel Corporation */
Torsten Duwe 55964e
+#ifndef ADF_PFVF_VF_PROTO_H
Torsten Duwe 55964e
+#define ADF_PFVF_VF_PROTO_H
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#include <linux/types.h>
Torsten Duwe 55964e
+#include "adf_accel_devices.h"
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg);
Torsten Duwe 55964e
+int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+int adf_enable_vf2pf_comms(struct adf_accel_dev *accel_dev);
Torsten Duwe 55964e
+
Torsten Duwe 55964e
+#endif /* ADF_PFVF_VF_PROTO_H */
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe 55964e
index 342063406c196..429990c5e0f34 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_sriov.c
Torsten Duwe 55964e
@@ -1,12 +1,12 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <linux/workqueue.h>
Torsten Duwe 55964e
 #include <linux/pci.h>
Torsten Duwe 55964e
 #include <linux/device.h>
Torsten Duwe 55964e
 #include <linux/iommu.h>
Torsten Duwe 55964e
 #include "adf_common_drv.h"
Torsten Duwe 55964e
 #include "adf_cfg.h"
Torsten Duwe 55964e
-#include "adf_pf2vf_msg.h"
Torsten Duwe 55964e
+#include "adf_pfvf_pf_msg.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 static struct workqueue_struct *pf2vf_resp_wq;
Torsten Duwe 55964e
 
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c b/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe 55964e
deleted file mode 100644
Torsten Duwe 55964e
index f3660981ad6aa..0000000000000
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_vf2pf_msg.c
Torsten Duwe 55964e
+++ /dev/null
Torsten Duwe 55964e
@@ -1,100 +0,0 @@
Torsten Duwe 55964e
-// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
-#include "adf_accel_devices.h"
Torsten Duwe 55964e
-#include "adf_common_drv.h"
Torsten Duwe 55964e
-#include "adf_pf2vf_msg.h"
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_vf2pf_notify_init() - send init msg to PF
Torsten Duwe 55964e
- * @accel_dev:  Pointer to acceleration VF device.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Function sends an init message from the VF to a PF
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: 0 on success, error code otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-int adf_vf2pf_notify_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
-		(ADF_VF2PF_MSGTYPE_INIT << ADF_VF2PF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	if (adf_send_vf2pf_msg(accel_dev, msg)) {
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Failed to send Init event to PF\n");
Torsten Duwe 55964e
-		return -EFAULT;
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-	set_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status);
Torsten Duwe 55964e
-	return 0;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-EXPORT_SYMBOL_GPL(adf_vf2pf_notify_init);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_vf2pf_notify_shutdown() - send shutdown msg to PF
Torsten Duwe 55964e
- * @accel_dev:  Pointer to acceleration VF device.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Function sends a shutdown message from the VF to a PF
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: void
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-void adf_vf2pf_notify_shutdown(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM |
Torsten Duwe 55964e
-	    (ADF_VF2PF_MSGTYPE_SHUTDOWN << ADF_VF2PF_MSGTYPE_SHIFT));
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	if (test_bit(ADF_STATUS_PF_RUNNING, &accel_dev->status))
Torsten Duwe 55964e
-		if (adf_send_vf2pf_msg(accel_dev, msg))
Torsten Duwe 55964e
-			dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-				"Failed to send Shutdown event to PF\n");
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-EXPORT_SYMBOL_GPL(adf_vf2pf_notify_shutdown);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-/**
Torsten Duwe 55964e
- * adf_recv_pf2vf_msg() - receive a PF to VF message
Torsten Duwe 55964e
- * @accel_dev:	Pointer to acceleration device
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * This function allows the VF to receive a message from the PF.
Torsten Duwe 55964e
- *
Torsten Duwe 55964e
- * Return: a valid message on success, zero otherwise.
Torsten Duwe 55964e
- */
Torsten Duwe 55964e
-static u32 adf_recv_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	return GET_PFVF_OPS(accel_dev)->recv_msg(accel_dev, 0);
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-static bool adf_handle_pf2vf_msg(struct adf_accel_dev *accel_dev, u32 msg)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	switch ((msg & ADF_PF2VF_MSGTYPE_MASK) >> ADF_PF2VF_MSGTYPE_SHIFT) {
Torsten Duwe 55964e
-	case ADF_PF2VF_MSGTYPE_RESTARTING:
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Restarting msg received from PF 0x%x\n", msg);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-		adf_pf2vf_handle_pf_restarting(accel_dev);
Torsten Duwe 55964e
-		return false;
Torsten Duwe 55964e
-	case ADF_PF2VF_MSGTYPE_VERSION_RESP:
Torsten Duwe 55964e
-		dev_dbg(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Version resp received from PF 0x%x\n", msg);
Torsten Duwe 55964e
-		accel_dev->vf.pf_version =
Torsten Duwe 55964e
-			(msg & ADF_PF2VF_VERSION_RESP_VERS_MASK) >>
Torsten Duwe 55964e
-			ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
Torsten Duwe 55964e
-		accel_dev->vf.compatible =
Torsten Duwe 55964e
-			(msg & ADF_PF2VF_VERSION_RESP_RESULT_MASK) >>
Torsten Duwe 55964e
-			ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
Torsten Duwe 55964e
-		complete(&accel_dev->vf.iov_msg_completion);
Torsten Duwe 55964e
-		return true;
Torsten Duwe 55964e
-	default:
Torsten Duwe 55964e
-		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 55964e
-			"Unknown PF2VF message(0x%x)\n", msg);
Torsten Duwe 55964e
-	}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return false;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-bool adf_recv_and_handle_pf2vf_msg(struct adf_accel_dev *accel_dev)
Torsten Duwe 55964e
-{
Torsten Duwe 55964e
-	u32 msg;
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	msg = adf_recv_pf2vf_msg(accel_dev);
Torsten Duwe 55964e
-	if (msg)
Torsten Duwe 55964e
-		return adf_handle_pf2vf_msg(accel_dev, msg);
Torsten Duwe 55964e
-
Torsten Duwe 55964e
-	return true;
Torsten Duwe 55964e
-}
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_common/adf_vf_isr.c b/drivers/crypto/qat/qat_common/adf_vf_isr.c
Torsten Duwe 55964e
index b17040b8a4b9f..fe094178f065e 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_common/adf_vf_isr.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_common/adf_vf_isr.c
Torsten Duwe 55964e
@@ -15,7 +15,6 @@
Torsten Duwe 55964e
 #include "adf_cfg_common.h"
Torsten Duwe 55964e
 #include "adf_transport_access_macros.h"
Torsten Duwe 55964e
 #include "adf_transport_internal.h"
Torsten Duwe 55964e
-#include "adf_pf2vf_msg.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 #define ADF_VINTSOU_OFFSET	0x204
Torsten Duwe 55964e
 #define ADF_VINTMSK_OFFSET	0x208
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c b/drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
Torsten Duwe 55964e
index aa42373a7118d..37f43b8c29eb7 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,10 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2014 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2014 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
 #include "adf_dh895xcc_hw_data.h"
Torsten Duwe 55964e
 #include "icp_qat_hw.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
diff --git a/drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c b/drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c
Torsten Duwe 55964e
index 2e2ef6b5bd2a2..d3795bab37255 100644
Torsten Duwe 55964e
--- a/drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c
Torsten Duwe 55964e
+++ b/drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c
Torsten Duwe 55964e
@@ -1,10 +1,11 @@
Torsten Duwe 55964e
 // SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
Torsten Duwe 55964e
-/* Copyright(c) 2015 - 2020 Intel Corporation */
Torsten Duwe 55964e
+/* Copyright(c) 2015 - 2021 Intel Corporation */
Torsten Duwe 55964e
 #include <adf_accel_devices.h>
Torsten Duwe 55964e
-#include <adf_pf2vf_msg.h>
Torsten Duwe 55964e
 #include <adf_common_drv.h>
Torsten Duwe 55964e
 #include <adf_gen2_hw_data.h>
Torsten Duwe 55964e
 #include <adf_gen2_pfvf.h>
Torsten Duwe 55964e
+#include <adf_pfvf_msg.h>
Torsten Duwe 55964e
+#include <adf_pfvf_vf_msg.h>
Torsten Duwe 55964e
 #include "adf_dh895xccvf_hw_data.h"
Torsten Duwe 55964e
 
Torsten Duwe 55964e
 static struct adf_hw_device_class dh895xcciov_class = {
Torsten Duwe 55964e
-- 
Torsten Duwe 55964e
2.35.3
Torsten Duwe 55964e