Torsten Duwe 536fc2
From 925b3069cf6e37a86fc752a35578ec875772bc7c Mon Sep 17 00:00:00 2001
Torsten Duwe 536fc2
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 536fc2
Date: Thu, 16 Dec 2021 09:13:30 +0000
Torsten Duwe 536fc2
Subject: [PATCH] crypto: qat - config VFs based on ring-to-svc mapping
Torsten Duwe 536fc2
Git-commit: 925b3069cf6e37a86fc752a35578ec875772bc7c
Torsten Duwe 536fc2
Patch-mainline: v5.17-rc1
Torsten Duwe 536fc2
References: jsc#PED-1073
Torsten Duwe 536fc2
Torsten Duwe 536fc2
Change the configuration logic for the VF driver to leverage the
Torsten Duwe 536fc2
ring-to-service mappings now received via PFVF.
Torsten Duwe 536fc2
Torsten Duwe 536fc2
While the driver config logic is not yet capable of supporting
Torsten Duwe 536fc2
configurations other than the default mapping, make sure that both VF
Torsten Duwe 536fc2
and PF share the same default configuration in order to work properly.
Torsten Duwe 536fc2
Torsten Duwe 536fc2
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 536fc2
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 536fc2
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Torsten Duwe 536fc2
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe 536fc2
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe 536fc2
Torsten Duwe 536fc2
---
Torsten Duwe 536fc2
 drivers/crypto/qat/qat_c3xxxvf/adf_drv.c      |  4 ---
Torsten Duwe 536fc2
 drivers/crypto/qat/qat_c62xvf/adf_drv.c       |  4 ---
Torsten Duwe 536fc2
 .../crypto/qat/qat_common/adf_common_drv.h    |  1 +
Torsten Duwe 536fc2
 drivers/crypto/qat/qat_common/adf_init.c      |  9 ++++++-
Torsten Duwe 536fc2
 drivers/crypto/qat/qat_common/qat_crypto.c    | 25 +++++++++++++++++++
Torsten Duwe 536fc2
 drivers/crypto/qat/qat_dh895xccvf/adf_drv.c   |  4 ---
Torsten Duwe 536fc2
 6 files changed, 34 insertions(+), 13 deletions(-)
Torsten Duwe 536fc2
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_c3xxxvf/adf_drv.c b/drivers/crypto/qat/qat_c3xxxvf/adf_drv.c
Torsten Duwe 536fc2
index 0ba1d293bb819..fa18d8009f533 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_c3xxxvf/adf_drv.c
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_c3xxxvf/adf_drv.c
Torsten Duwe 536fc2
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
Torsten Duwe 536fc2
 	/* Completion for VF2PF request/response message exchange */
Torsten Duwe 536fc2
 	init_completion(&accel_dev->vf.msg_received);
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
-	ret = qat_crypto_dev_config(accel_dev);
Torsten Duwe 536fc2
-	if (ret)
Torsten Duwe 536fc2
-		goto out_err_free_reg;
Torsten Duwe 536fc2
-
Torsten Duwe 536fc2
 	ret = adf_dev_init(accel_dev);
Torsten Duwe 536fc2
 	if (ret)
Torsten Duwe 536fc2
 		goto out_err_dev_shutdown;
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_c62xvf/adf_drv.c b/drivers/crypto/qat/qat_c62xvf/adf_drv.c
Torsten Duwe 536fc2
index 176d8e2786f47..686ec752d0e9e 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_c62xvf/adf_drv.c
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_c62xvf/adf_drv.c
Torsten Duwe 536fc2
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
Torsten Duwe 536fc2
 	/* Completion for VF2PF request/response message exchange */
Torsten Duwe 536fc2
 	init_completion(&accel_dev->vf.msg_received);
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
-	ret = qat_crypto_dev_config(accel_dev);
Torsten Duwe 536fc2
-	if (ret)
Torsten Duwe 536fc2
-		goto out_err_free_reg;
Torsten Duwe 536fc2
-
Torsten Duwe 536fc2
 	ret = adf_dev_init(accel_dev);
Torsten Duwe 536fc2
 	if (ret)
Torsten Duwe 536fc2
 		goto out_err_dev_shutdown;
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 536fc2
index 5212891344a90..76f4f96ec5eb0 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
Torsten Duwe 536fc2
@@ -114,6 +114,7 @@ void adf_cleanup_etr_data(struct adf_accel_dev *accel_dev);
Torsten Duwe 536fc2
 int qat_crypto_register(void);
Torsten Duwe 536fc2
 int qat_crypto_unregister(void);
Torsten Duwe 536fc2
 int qat_crypto_dev_config(struct adf_accel_dev *accel_dev);
Torsten Duwe 536fc2
+int qat_crypto_vf_dev_config(struct adf_accel_dev *accel_dev);
Torsten Duwe 536fc2
 struct qat_crypto_instance *qat_crypto_get_instance_node(int node);
Torsten Duwe 536fc2
 void qat_crypto_put_instance(struct qat_crypto_instance *inst);
Torsten Duwe 536fc2
 void qat_alg_callback(void *resp);
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_common/adf_init.c b/drivers/crypto/qat/qat_common/adf_init.c
Torsten Duwe 536fc2
index 391d82a64a936..2edc63c6b6caa 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_common/adf_init.c
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_common/adf_init.c
Torsten Duwe 536fc2
@@ -69,7 +69,8 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 536fc2
 		return -EFAULT;
Torsten Duwe 536fc2
 	}
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
-	if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status)) {
Torsten Duwe 536fc2
+	if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status) &&
Torsten Duwe 536fc2
+	    !accel_dev->is_vf) {
Torsten Duwe 536fc2
 		dev_err(&GET_DEV(accel_dev), "Device not configured\n");
Torsten Duwe 536fc2
 		return -EFAULT;
Torsten Duwe 536fc2
 	}
Torsten Duwe 536fc2
@@ -121,6 +122,12 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)
Torsten Duwe 536fc2
 	if (ret)
Torsten Duwe 536fc2
 		return ret;
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
+	if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status) &&
Torsten Duwe 536fc2
+	    accel_dev->is_vf) {
Torsten Duwe 536fc2
+		if (qat_crypto_vf_dev_config(accel_dev))
Torsten Duwe 536fc2
+			return -EFAULT;
Torsten Duwe 536fc2
+	}
Torsten Duwe 536fc2
+
Torsten Duwe 536fc2
 	/*
Torsten Duwe 536fc2
 	 * Subservice initialisation is divided into two stages: init and start.
Torsten Duwe 536fc2
 	 * This is to facilitate any ordering dependencies between services
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c
Torsten Duwe 536fc2
index ece6776fbd53d..7234c4940fae4 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_common/qat_crypto.c
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_common/qat_crypto.c
Torsten Duwe 536fc2
@@ -8,6 +8,7 @@
Torsten Duwe 536fc2
 #include "adf_transport_access_macros.h"
Torsten Duwe 536fc2
 #include "adf_cfg.h"
Torsten Duwe 536fc2
 #include "adf_cfg_strings.h"
Torsten Duwe 536fc2
+#include "adf_gen2_hw_data.h"
Torsten Duwe 536fc2
 #include "qat_crypto.h"
Torsten Duwe 536fc2
 #include "icp_qat_fw.h"
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
@@ -104,6 +105,30 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node)
Torsten Duwe 536fc2
 	return inst;
Torsten Duwe 536fc2
 }
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
+/**
Torsten Duwe 536fc2
+ * qat_crypto_vf_dev_config()
Torsten Duwe 536fc2
+ *     create dev config required to create crypto inst.
Torsten Duwe 536fc2
+ *
Torsten Duwe 536fc2
+ * @accel_dev: Pointer to acceleration device.
Torsten Duwe 536fc2
+ *
Torsten Duwe 536fc2
+ * Function creates device configuration required to create
Torsten Duwe 536fc2
+ * asym, sym or, crypto instances
Torsten Duwe 536fc2
+ *
Torsten Duwe 536fc2
+ * Return: 0 on success, error code otherwise.
Torsten Duwe 536fc2
+ */
Torsten Duwe 536fc2
+int qat_crypto_vf_dev_config(struct adf_accel_dev *accel_dev)
Torsten Duwe 536fc2
+{
Torsten Duwe 536fc2
+	u16 ring_to_svc_map = GET_HW_DATA(accel_dev)->ring_to_svc_map;
Torsten Duwe 536fc2
+
Torsten Duwe 536fc2
+	if (ring_to_svc_map != ADF_GEN2_DEFAULT_RING_TO_SRV_MAP) {
Torsten Duwe 536fc2
+		dev_err(&GET_DEV(accel_dev),
Torsten Duwe 536fc2
+			"Unsupported ring/service mapping present on PF");
Torsten Duwe 536fc2
+		return -EFAULT;
Torsten Duwe 536fc2
+	}
Torsten Duwe 536fc2
+
Torsten Duwe 536fc2
+	return qat_crypto_dev_config(accel_dev);
Torsten Duwe 536fc2
+}
Torsten Duwe 536fc2
+
Torsten Duwe 536fc2
 /**
Torsten Duwe 536fc2
  * qat_crypto_dev_config() - create dev config required to create crypto inst.
Torsten Duwe 536fc2
  *
Torsten Duwe 536fc2
diff --git a/drivers/crypto/qat/qat_dh895xccvf/adf_drv.c b/drivers/crypto/qat/qat_dh895xccvf/adf_drv.c
Torsten Duwe 536fc2
index ee45d688b5d73..18756b2e1c912 100644
Torsten Duwe 536fc2
--- a/drivers/crypto/qat/qat_dh895xccvf/adf_drv.c
Torsten Duwe 536fc2
+++ b/drivers/crypto/qat/qat_dh895xccvf/adf_drv.c
Torsten Duwe 536fc2
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
Torsten Duwe 536fc2
 	/* Completion for VF2PF request/response message exchange */
Torsten Duwe 536fc2
 	init_completion(&accel_dev->vf.msg_received);
Torsten Duwe 536fc2
 
Torsten Duwe 536fc2
-	ret = qat_crypto_dev_config(accel_dev);
Torsten Duwe 536fc2
-	if (ret)
Torsten Duwe 536fc2
-		goto out_err_free_reg;
Torsten Duwe 536fc2
-
Torsten Duwe 536fc2
 	ret = adf_dev_init(accel_dev);
Torsten Duwe 536fc2
 	if (ret)
Torsten Duwe 536fc2
 		goto out_err_dev_shutdown;
Torsten Duwe 536fc2
-- 
Torsten Duwe 536fc2
2.35.3
Torsten Duwe 536fc2