|
Torsten Duwe |
84ac7d |
From 0cec19c761e5cc8d6fa43df622791e941b7a8033 Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
84ac7d |
From: Tomasz Kowalik <tomaszx.kowalik@intel.com>
|
|
Torsten Duwe |
84ac7d |
Date: Thu, 16 Dec 2021 09:13:34 +0000
|
|
Torsten Duwe |
84ac7d |
Subject: [PATCH] crypto: qat - add support for compression for 4xxx
|
|
Torsten Duwe |
84ac7d |
Git-commit: 0cec19c761e5cc8d6fa43df622791e941b7a8033
|
|
Torsten Duwe |
84ac7d |
Patch-mainline: v5.17-rc1
|
|
Torsten Duwe |
84ac7d |
References: jsc#PED-1073
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
Add the logic required to enable the compression service for 4xxx devices.
|
|
Torsten Duwe |
84ac7d |
This allows to load the compression firmware image and report
|
|
Torsten Duwe |
84ac7d |
the appropriate compression capabilities.
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
The firmware image selection for a given device is based on the
|
|
Torsten Duwe |
84ac7d |
'ServicesEnabled' key stored in the internal configuration, which is
|
|
Torsten Duwe |
84ac7d |
added statically at the probe of the device according to the following
|
|
Torsten Duwe |
84ac7d |
rule, by default:
|
|
Torsten Duwe |
84ac7d |
- odd numbered devices assigned to compression services
|
|
Torsten Duwe |
84ac7d |
- even numbered devices assigned to crypto services
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
In addition, restore the 'ServicesEnabled' key, if present, when SRIOV
|
|
Torsten Duwe |
84ac7d |
is enabled on the device.
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Tomasz Kowalik <tomaszx.kowalik@intel.com>
|
|
Torsten Duwe |
84ac7d |
Co-developed-by: Mateuszx Potrola <mateuszx.potrola@intel.com>
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Mateuszx Potrola <mateuszx.potrola@intel.com>
|
|
Torsten Duwe |
84ac7d |
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
84ac7d |
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
|
|
Torsten Duwe |
84ac7d |
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
84ac7d |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
---
|
|
Torsten Duwe |
84ac7d |
.../crypto/qat/qat_4xxx/adf_4xxx_hw_data.c | 79 +++++++++++++++++--
|
|
Torsten Duwe |
84ac7d |
.../crypto/qat/qat_4xxx/adf_4xxx_hw_data.h | 1 +
|
|
Torsten Duwe |
84ac7d |
drivers/crypto/qat/qat_4xxx/adf_drv.c | 33 ++++++++
|
|
Torsten Duwe |
84ac7d |
.../crypto/qat/qat_common/adf_accel_devices.h | 4 +-
|
|
Torsten Duwe |
84ac7d |
.../crypto/qat/qat_common/adf_accel_engine.c | 8 +-
|
|
Torsten Duwe |
84ac7d |
drivers/crypto/qat/qat_common/adf_cfg.c | 1 +
|
|
Torsten Duwe |
84ac7d |
.../crypto/qat/qat_common/adf_cfg_strings.h | 3 +
|
|
Torsten Duwe |
84ac7d |
drivers/crypto/qat/qat_common/adf_sriov.c | 31 +++++++-
|
|
Torsten Duwe |
84ac7d |
8 files changed, 147 insertions(+), 13 deletions(-)
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
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 |
84ac7d |
index 40f684103b293..6d10edc40aca0 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
|
|
Torsten Duwe |
84ac7d |
@@ -2,6 +2,7 @@
|
|
Torsten Duwe |
84ac7d |
/* Copyright(c) 2020 - 2021 Intel Corporation */
|
|
Torsten Duwe |
84ac7d |
#include <linux/iopoll.h>
|
|
Torsten Duwe |
84ac7d |
#include <adf_accel_devices.h>
|
|
Torsten Duwe |
84ac7d |
+#include <adf_cfg.h>
|
|
Torsten Duwe |
84ac7d |
#include <adf_common_drv.h>
|
|
Torsten Duwe |
84ac7d |
#include <adf_gen4_hw_data.h>
|
|
Torsten Duwe |
84ac7d |
#include <adf_gen4_pfvf.h>
|
|
Torsten Duwe |
84ac7d |
@@ -13,12 +14,18 @@ struct adf_fw_config {
|
|
Torsten Duwe |
84ac7d |
char *obj_name;
|
|
Torsten Duwe |
84ac7d |
};
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
-static struct adf_fw_config adf_4xxx_fw_config[] = {
|
|
Torsten Duwe |
84ac7d |
+static struct adf_fw_config adf_4xxx_fw_cy_config[] = {
|
|
Torsten Duwe |
84ac7d |
{0xF0, ADF_4XXX_SYM_OBJ},
|
|
Torsten Duwe |
84ac7d |
{0xF, ADF_4XXX_ASYM_OBJ},
|
|
Torsten Duwe |
84ac7d |
{0x100, ADF_4XXX_ADMIN_OBJ},
|
|
Torsten Duwe |
84ac7d |
};
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
+static struct adf_fw_config adf_4xxx_fw_dc_config[] = {
|
|
Torsten Duwe |
84ac7d |
+ {0xF0, ADF_4XXX_DC_OBJ},
|
|
Torsten Duwe |
84ac7d |
+ {0xF, ADF_4XXX_DC_OBJ},
|
|
Torsten Duwe |
84ac7d |
+ {0x100, ADF_4XXX_ADMIN_OBJ},
|
|
Torsten Duwe |
84ac7d |
+};
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
/* Worker thread to service arbiter mappings */
|
|
Torsten Duwe |
84ac7d |
static const u32 thrd_to_arb_map[ADF_4XXX_MAX_ACCELENGINES] = {
|
|
Torsten Duwe |
84ac7d |
0x5555555, 0x5555555, 0x5555555, 0x5555555,
|
|
Torsten Duwe |
84ac7d |
@@ -32,6 +39,39 @@ static struct adf_hw_device_class adf_4xxx_class = {
|
|
Torsten Duwe |
84ac7d |
.instances = 0,
|
|
Torsten Duwe |
84ac7d |
};
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
+enum dev_services {
|
|
Torsten Duwe |
84ac7d |
+ SVC_CY = 0,
|
|
Torsten Duwe |
84ac7d |
+ SVC_DC,
|
|
Torsten Duwe |
84ac7d |
+};
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+static const char *const dev_cfg_services[] = {
|
|
Torsten Duwe |
84ac7d |
+ [SVC_CY] = ADF_CFG_CY,
|
|
Torsten Duwe |
84ac7d |
+ [SVC_DC] = ADF_CFG_DC,
|
|
Torsten Duwe |
84ac7d |
+};
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+static int get_service_enabled(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
+{
|
|
Torsten Duwe |
84ac7d |
+ char services[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = {0};
|
|
Torsten Duwe |
84ac7d |
+ u32 ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_get_param_value(accel_dev, ADF_GENERAL_SEC,
|
|
Torsten Duwe |
84ac7d |
+ ADF_SERVICES_ENABLED, services);
|
|
Torsten Duwe |
84ac7d |
+ if (ret) {
|
|
Torsten Duwe |
84ac7d |
+ dev_err(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
84ac7d |
+ ADF_SERVICES_ENABLED " param not found\n");
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ ret = match_string(dev_cfg_services, ARRAY_SIZE(dev_cfg_services),
|
|
Torsten Duwe |
84ac7d |
+ services);
|
|
Torsten Duwe |
84ac7d |
+ if (ret < 0)
|
|
Torsten Duwe |
84ac7d |
+ dev_err(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
84ac7d |
+ "Invalid value of " ADF_SERVICES_ENABLED " param: %s\n",
|
|
Torsten Duwe |
84ac7d |
+ services);
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+}
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
static u32 get_accel_mask(struct adf_hw_device_data *self)
|
|
Torsten Duwe |
84ac7d |
{
|
|
Torsten Duwe |
84ac7d |
return ADF_4XXX_ACCELERATORS_MASK;
|
|
Torsten Duwe |
84ac7d |
@@ -149,7 +189,14 @@ static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
- return capabilities_cy;
|
|
Torsten Duwe |
84ac7d |
+ switch (get_service_enabled(accel_dev)) {
|
|
Torsten Duwe |
84ac7d |
+ case SVC_CY:
|
|
Torsten Duwe |
84ac7d |
+ return capabilities_cy;
|
|
Torsten Duwe |
84ac7d |
+ case SVC_DC:
|
|
Torsten Duwe |
84ac7d |
+ return capabilities_dc;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return 0;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
|
|
Torsten Duwe |
84ac7d |
@@ -230,17 +277,35 @@ static int adf_init_device(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
static u32 uof_get_num_objs(void)
|
|
Torsten Duwe |
84ac7d |
{
|
|
Torsten Duwe |
84ac7d |
- return ARRAY_SIZE(adf_4xxx_fw_config);
|
|
Torsten Duwe |
84ac7d |
+ BUILD_BUG_ON_MSG(ARRAY_SIZE(adf_4xxx_fw_cy_config) !=
|
|
Torsten Duwe |
84ac7d |
+ ARRAY_SIZE(adf_4xxx_fw_dc_config),
|
|
Torsten Duwe |
84ac7d |
+ "Size mismatch between adf_4xxx_fw_*_config arrays");
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return ARRAY_SIZE(adf_4xxx_fw_cy_config);
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
-static char *uof_get_name(u32 obj_num)
|
|
Torsten Duwe |
84ac7d |
+static char *uof_get_name(struct adf_accel_dev *accel_dev, u32 obj_num)
|
|
Torsten Duwe |
84ac7d |
{
|
|
Torsten Duwe |
84ac7d |
- return adf_4xxx_fw_config[obj_num].obj_name;
|
|
Torsten Duwe |
84ac7d |
+ switch (get_service_enabled(accel_dev)) {
|
|
Torsten Duwe |
84ac7d |
+ case SVC_CY:
|
|
Torsten Duwe |
84ac7d |
+ return adf_4xxx_fw_cy_config[obj_num].obj_name;
|
|
Torsten Duwe |
84ac7d |
+ case SVC_DC:
|
|
Torsten Duwe |
84ac7d |
+ return adf_4xxx_fw_dc_config[obj_num].obj_name;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return NULL;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
-static u32 uof_get_ae_mask(u32 obj_num)
|
|
Torsten Duwe |
84ac7d |
+static u32 uof_get_ae_mask(struct adf_accel_dev *accel_dev, u32 obj_num)
|
|
Torsten Duwe |
84ac7d |
{
|
|
Torsten Duwe |
84ac7d |
- return adf_4xxx_fw_config[obj_num].ae_mask;
|
|
Torsten Duwe |
84ac7d |
+ switch (get_service_enabled(accel_dev)) {
|
|
Torsten Duwe |
84ac7d |
+ case SVC_CY:
|
|
Torsten Duwe |
84ac7d |
+ return adf_4xxx_fw_cy_config[obj_num].ae_mask;
|
|
Torsten Duwe |
84ac7d |
+ case SVC_DC:
|
|
Torsten Duwe |
84ac7d |
+ return adf_4xxx_fw_dc_config[obj_num].ae_mask;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return 0;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data)
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.h b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.h
|
|
Torsten Duwe |
84ac7d |
index a0c67752317f1..12e4fb9b40cef 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.h
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.h
|
|
Torsten Duwe |
84ac7d |
@@ -77,6 +77,7 @@
|
|
Torsten Duwe |
84ac7d |
#define ADF_4XXX_FW "qat_4xxx.bin"
|
|
Torsten Duwe |
84ac7d |
#define ADF_4XXX_MMP "qat_4xxx_mmp.bin"
|
|
Torsten Duwe |
84ac7d |
#define ADF_4XXX_SYM_OBJ "qat_4xxx_sym.bin"
|
|
Torsten Duwe |
84ac7d |
+#define ADF_4XXX_DC_OBJ "qat_4xxx_dc.bin"
|
|
Torsten Duwe |
84ac7d |
#define ADF_4XXX_ASYM_OBJ "qat_4xxx_asym.bin"
|
|
Torsten Duwe |
84ac7d |
#define ADF_4XXX_ADMIN_OBJ "qat_4xxx_admin.bin"
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_4xxx/adf_drv.c b/drivers/crypto/qat/qat_4xxx/adf_drv.c
|
|
Torsten Duwe |
84ac7d |
index 71ef065914b22..a6c78b9c730bc 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_4xxx/adf_drv.c
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_4xxx/adf_drv.c
|
|
Torsten Duwe |
84ac7d |
@@ -29,6 +29,29 @@ static void adf_cleanup_accel(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
adf_devmgr_rm_dev(accel_dev, NULL);
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
+static int adf_cfg_dev_init(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
+{
|
|
Torsten Duwe |
84ac7d |
+ const char *config;
|
|
Torsten Duwe |
84ac7d |
+ int ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ config = accel_dev->accel_id % 2 ? ADF_CFG_DC : ADF_CFG_CY;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_section_add(accel_dev, ADF_GENERAL_SEC);
|
|
Torsten Duwe |
84ac7d |
+ if (ret)
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ /* Default configuration is crypto only for even devices
|
|
Torsten Duwe |
84ac7d |
+ * and compression for odd devices
|
|
Torsten Duwe |
84ac7d |
+ */
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_add_key_value_param(accel_dev, ADF_GENERAL_SEC,
|
|
Torsten Duwe |
84ac7d |
+ ADF_SERVICES_ENABLED, config,
|
|
Torsten Duwe |
84ac7d |
+ ADF_STR);
|
|
Torsten Duwe |
84ac7d |
+ if (ret)
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return 0;
|
|
Torsten Duwe |
84ac7d |
+}
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
static int adf_crypto_dev_config(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
{
|
|
Torsten Duwe |
84ac7d |
char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES];
|
|
Torsten Duwe |
84ac7d |
@@ -227,8 +250,18 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
Torsten Duwe |
84ac7d |
goto out_err;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_dev_init(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+ if (ret) {
|
|
Torsten Duwe |
84ac7d |
+ dev_err(&pdev->dev, "Failed to initialize configuration.\n");
|
|
Torsten Duwe |
84ac7d |
+ goto out_err;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
/* Get accelerator capabilities mask */
|
|
Torsten Duwe |
84ac7d |
hw_data->accel_capabilities_mask = hw_data->get_accel_cap(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+ if (!hw_data->accel_capabilities_mask) {
|
|
Torsten Duwe |
84ac7d |
+ dev_err(&pdev->dev, "Failed to get capabilities mask.\n");
|
|
Torsten Duwe |
84ac7d |
+ goto out_err;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
/* Find and map all the device's BARS */
|
|
Torsten Duwe |
84ac7d |
bar_mask = pci_select_bars(pdev, IORESOURCE_MEM) & ADF_4XXX_BAR_MASK;
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_common/adf_accel_devices.h b/drivers/crypto/qat/qat_common/adf_accel_devices.h
|
|
Torsten Duwe |
84ac7d |
index 1b9d4ed03dd07..2d4cd7c7cf33b 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_common/adf_accel_devices.h
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_common/adf_accel_devices.h
|
|
Torsten Duwe |
84ac7d |
@@ -192,9 +192,9 @@ struct adf_hw_device_data {
|
|
Torsten Duwe |
84ac7d |
int (*ring_pair_reset)(struct adf_accel_dev *accel_dev, u32 bank_nr);
|
|
Torsten Duwe |
84ac7d |
void (*reset_device)(struct adf_accel_dev *accel_dev);
|
|
Torsten Duwe |
84ac7d |
void (*set_msix_rttable)(struct adf_accel_dev *accel_dev);
|
|
Torsten Duwe |
84ac7d |
- char *(*uof_get_name)(u32 obj_num);
|
|
Torsten Duwe |
84ac7d |
+ char *(*uof_get_name)(struct adf_accel_dev *accel_dev, u32 obj_num);
|
|
Torsten Duwe |
84ac7d |
u32 (*uof_get_num_objs)(void);
|
|
Torsten Duwe |
84ac7d |
- u32 (*uof_get_ae_mask)(u32 obj_num);
|
|
Torsten Duwe |
84ac7d |
+ u32 (*uof_get_ae_mask)(struct adf_accel_dev *accel_dev, u32 obj_num);
|
|
Torsten Duwe |
84ac7d |
struct adf_pfvf_ops pfvf_ops;
|
|
Torsten Duwe |
84ac7d |
struct adf_hw_csr_ops csr_ops;
|
|
Torsten Duwe |
84ac7d |
const char *fw_name;
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_common/adf_accel_engine.c b/drivers/crypto/qat/qat_common/adf_accel_engine.c
|
|
Torsten Duwe |
84ac7d |
index ca4eae8cdd0b3..4ce2b666929e6 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_common/adf_accel_engine.c
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_common/adf_accel_engine.c
|
|
Torsten Duwe |
84ac7d |
@@ -22,8 +22,12 @@ static int adf_ae_fw_load_images(struct adf_accel_dev *accel_dev, void *fw_addr,
|
|
Torsten Duwe |
84ac7d |
num_objs = hw_device->uof_get_num_objs();
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
for (i = 0; i < num_objs; i++) {
|
|
Torsten Duwe |
84ac7d |
- obj_name = hw_device->uof_get_name(i);
|
|
Torsten Duwe |
84ac7d |
- ae_mask = hw_device->uof_get_ae_mask(i);
|
|
Torsten Duwe |
84ac7d |
+ obj_name = hw_device->uof_get_name(accel_dev, i);
|
|
Torsten Duwe |
84ac7d |
+ ae_mask = hw_device->uof_get_ae_mask(accel_dev, i);
|
|
Torsten Duwe |
84ac7d |
+ if (!obj_name || !ae_mask) {
|
|
Torsten Duwe |
84ac7d |
+ dev_err(&GET_DEV(accel_dev), "Invalid UOF image\n");
|
|
Torsten Duwe |
84ac7d |
+ goto out_err;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
if (qat_uclo_set_cfg_ae_mask(loader, ae_mask)) {
|
|
Torsten Duwe |
84ac7d |
dev_err(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_common/adf_cfg.c b/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
84ac7d |
index 575b6f002303a..b5b208cbe5a12 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_common/adf_cfg.c
|
|
Torsten Duwe |
84ac7d |
@@ -297,3 +297,4 @@ int adf_cfg_get_param_value(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
84ac7d |
up_read(&cfg->lock);
|
|
Torsten Duwe |
84ac7d |
return ret;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
+EXPORT_SYMBOL_GPL(adf_cfg_get_param_value);
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_common/adf_cfg_strings.h b/drivers/crypto/qat/qat_common/adf_cfg_strings.h
|
|
Torsten Duwe |
84ac7d |
index 09651e1f937a7..655248dbf962d 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_common/adf_cfg_strings.h
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_common/adf_cfg_strings.h
|
|
Torsten Duwe |
84ac7d |
@@ -22,6 +22,9 @@
|
|
Torsten Duwe |
84ac7d |
#define ADF_RING_ASYM_BANK_NUM "BankAsymNumber"
|
|
Torsten Duwe |
84ac7d |
#define ADF_CY "Cy"
|
|
Torsten Duwe |
84ac7d |
#define ADF_DC "Dc"
|
|
Torsten Duwe |
84ac7d |
+#define ADF_CFG_DC "dc"
|
|
Torsten Duwe |
84ac7d |
+#define ADF_CFG_CY "sym;asym"
|
|
Torsten Duwe |
84ac7d |
+#define ADF_SERVICES_ENABLED "ServicesEnabled"
|
|
Torsten Duwe |
84ac7d |
#define ADF_ETRMGR_COALESCING_ENABLED "InterruptCoalescingEnabled"
|
|
Torsten Duwe |
84ac7d |
#define ADF_ETRMGR_COALESCING_ENABLED_FORMAT \
|
|
Torsten Duwe |
84ac7d |
ADF_ETRMGR_BANK "%d" ADF_ETRMGR_COALESCING_ENABLED
|
|
Torsten Duwe |
84ac7d |
diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
|
|
Torsten Duwe |
84ac7d |
index 971a05d624181..b960bca1f9d2f 100644
|
|
Torsten Duwe |
84ac7d |
--- a/drivers/crypto/qat/qat_common/adf_sriov.c
|
|
Torsten Duwe |
84ac7d |
+++ b/drivers/crypto/qat/qat_common/adf_sriov.c
|
|
Torsten Duwe |
84ac7d |
@@ -126,6 +126,32 @@ void adf_disable_sriov(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
EXPORT_SYMBOL_GPL(adf_disable_sriov);
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
+static int adf_sriov_prepare_restart(struct adf_accel_dev *accel_dev)
|
|
Torsten Duwe |
84ac7d |
+{
|
|
Torsten Duwe |
84ac7d |
+ char services[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = {0};
|
|
Torsten Duwe |
84ac7d |
+ int ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_get_param_value(accel_dev, ADF_GENERAL_SEC,
|
|
Torsten Duwe |
84ac7d |
+ ADF_SERVICES_ENABLED, services);
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ adf_dev_stop(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+ adf_dev_shutdown(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ if (!ret) {
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_section_add(accel_dev, ADF_GENERAL_SEC);
|
|
Torsten Duwe |
84ac7d |
+ if (ret)
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_cfg_add_key_value_param(accel_dev, ADF_GENERAL_SEC,
|
|
Torsten Duwe |
84ac7d |
+ ADF_SERVICES_ENABLED,
|
|
Torsten Duwe |
84ac7d |
+ services, ADF_STR);
|
|
Torsten Duwe |
84ac7d |
+ if (ret)
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
+ }
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
+ return 0;
|
|
Torsten Duwe |
84ac7d |
+}
|
|
Torsten Duwe |
84ac7d |
+
|
|
Torsten Duwe |
84ac7d |
/**
|
|
Torsten Duwe |
84ac7d |
* adf_sriov_configure() - Enable SRIOV for the device
|
|
Torsten Duwe |
84ac7d |
* @pdev: Pointer to PCI device.
|
|
Torsten Duwe |
84ac7d |
@@ -165,8 +191,9 @@ int adf_sriov_configure(struct pci_dev *pdev, int numvfs)
|
|
Torsten Duwe |
84ac7d |
return -EBUSY;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
- adf_dev_stop(accel_dev);
|
|
Torsten Duwe |
84ac7d |
- adf_dev_shutdown(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+ ret = adf_sriov_prepare_restart(accel_dev);
|
|
Torsten Duwe |
84ac7d |
+ if (ret)
|
|
Torsten Duwe |
84ac7d |
+ return ret;
|
|
Torsten Duwe |
84ac7d |
}
|
|
Torsten Duwe |
84ac7d |
|
|
Torsten Duwe |
84ac7d |
if (adf_cfg_section_add(accel_dev, ADF_KERNEL_SEC))
|
|
Torsten Duwe |
84ac7d |
--
|
|
Torsten Duwe |
84ac7d |
2.35.3
|
|
Torsten Duwe |
84ac7d |
|