crypto: qat - config VFs based on ring-to-svc mapping
authorMarco Chiappero <marco.chiappero@intel.com>
Thu, 16 Dec 2021 09:13:30 +0000 (09:13 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 24 Dec 2021 03:18:27 +0000 (14:18 +1100)
Change the configuration logic for the VF driver to leverage the
ring-to-service mappings now received via PFVF.

While the driver config logic is not yet capable of supporting
configurations other than the default mapping, make sure that both VF
and PF share the same default configuration in order to work properly.

Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/qat/qat_c3xxxvf/adf_drv.c
drivers/crypto/qat/qat_c62xvf/adf_drv.c
drivers/crypto/qat/qat_common/adf_common_drv.h
drivers/crypto/qat/qat_common/adf_init.c
drivers/crypto/qat/qat_common/qat_crypto.c
drivers/crypto/qat/qat_dh895xccvf/adf_drv.c

index 0ba1d293bb819652430fdce67ecf299b9f1a065c..fa18d8009f533e3bd561baee7c60bc65490a4dbc 100644 (file)
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* Completion for VF2PF request/response message exchange */
        init_completion(&accel_dev->vf.msg_received);
 
-       ret = qat_crypto_dev_config(accel_dev);
-       if (ret)
-               goto out_err_free_reg;
-
        ret = adf_dev_init(accel_dev);
        if (ret)
                goto out_err_dev_shutdown;
index 176d8e2786f477828cb43cc90be8f09e8a206936..686ec752d0e9e8c316904837ff4c265668065f2b 100644 (file)
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* Completion for VF2PF request/response message exchange */
        init_completion(&accel_dev->vf.msg_received);
 
-       ret = qat_crypto_dev_config(accel_dev);
-       if (ret)
-               goto out_err_free_reg;
-
        ret = adf_dev_init(accel_dev);
        if (ret)
                goto out_err_dev_shutdown;
index 5212891344a9071de47b6fb2b25358c8666a45d8..76f4f96ec5eb00c4412c032f6c1b4cc3cb636436 100644 (file)
@@ -114,6 +114,7 @@ void adf_cleanup_etr_data(struct adf_accel_dev *accel_dev);
 int qat_crypto_register(void);
 int qat_crypto_unregister(void);
 int qat_crypto_dev_config(struct adf_accel_dev *accel_dev);
+int qat_crypto_vf_dev_config(struct adf_accel_dev *accel_dev);
 struct qat_crypto_instance *qat_crypto_get_instance_node(int node);
 void qat_crypto_put_instance(struct qat_crypto_instance *inst);
 void qat_alg_callback(void *resp);
index 391d82a64a936dbb54a6dda7fcc8c3ceec1789d7..2edc63c6b6caa31c612ecb76c34bf9791108e8aa 100644 (file)
@@ -69,7 +69,8 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)
                return -EFAULT;
        }
 
-       if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status)) {
+       if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status) &&
+           !accel_dev->is_vf) {
                dev_err(&GET_DEV(accel_dev), "Device not configured\n");
                return -EFAULT;
        }
@@ -121,6 +122,12 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)
        if (ret)
                return ret;
 
+       if (!test_bit(ADF_STATUS_CONFIGURED, &accel_dev->status) &&
+           accel_dev->is_vf) {
+               if (qat_crypto_vf_dev_config(accel_dev))
+                       return -EFAULT;
+       }
+
        /*
         * Subservice initialisation is divided into two stages: init and start.
         * This is to facilitate any ordering dependencies between services
index ece6776fbd53da1a62490f5bafd1161c9428d5d1..7234c4940fae402f28b13bd59c21c5cfc6c2d953 100644 (file)
@@ -8,6 +8,7 @@
 #include "adf_transport_access_macros.h"
 #include "adf_cfg.h"
 #include "adf_cfg_strings.h"
+#include "adf_gen2_hw_data.h"
 #include "qat_crypto.h"
 #include "icp_qat_fw.h"
 
@@ -104,6 +105,30 @@ struct qat_crypto_instance *qat_crypto_get_instance_node(int node)
        return inst;
 }
 
+/**
+ * qat_crypto_vf_dev_config()
+ *     create dev config required to create crypto inst.
+ *
+ * @accel_dev: Pointer to acceleration device.
+ *
+ * Function creates device configuration required to create
+ * asym, sym or, crypto instances
+ *
+ * Return: 0 on success, error code otherwise.
+ */
+int qat_crypto_vf_dev_config(struct adf_accel_dev *accel_dev)
+{
+       u16 ring_to_svc_map = GET_HW_DATA(accel_dev)->ring_to_svc_map;
+
+       if (ring_to_svc_map != ADF_GEN2_DEFAULT_RING_TO_SRV_MAP) {
+               dev_err(&GET_DEV(accel_dev),
+                       "Unsupported ring/service mapping present on PF");
+               return -EFAULT;
+       }
+
+       return qat_crypto_dev_config(accel_dev);
+}
+
 /**
  * qat_crypto_dev_config() - create dev config required to create crypto inst.
  *
index ee45d688b5d73e5f0aba63b9cb9292f84ff18e76..18756b2e1c91276a18147f3dd320e47f86f48636 100644 (file)
@@ -173,10 +173,6 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* Completion for VF2PF request/response message exchange */
        init_completion(&accel_dev->vf.msg_received);
 
-       ret = qat_crypto_dev_config(accel_dev);
-       if (ret)
-               goto out_err_free_reg;
-
        ret = adf_dev_init(accel_dev);
        if (ret)
                goto out_err_dev_shutdown;