diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/crypto/intel/qat/qat_common/adf_gen2_config.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/crypto/intel/qat/qat_common/adf_gen2_config.c')
| -rw-r--r-- | drivers/crypto/intel/qat/qat_common/adf_gen2_config.c | 206 | 
1 files changed, 206 insertions, 0 deletions
diff --git a/drivers/crypto/intel/qat/qat_common/adf_gen2_config.c b/drivers/crypto/intel/qat/qat_common/adf_gen2_config.c new file mode 100644 index 000000000000..eeb30da7587a --- /dev/null +++ b/drivers/crypto/intel/qat/qat_common/adf_gen2_config.c @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Copyright(c) 2022 Intel Corporation */ +#include "adf_accel_devices.h" +#include "adf_cfg.h" +#include "adf_cfg_strings.h" +#include "adf_gen2_config.h" +#include "adf_common_drv.h" +#include "qat_crypto.h" +#include "qat_compression.h" +#include "adf_transport_access_macros.h" + +static int adf_gen2_crypto_dev_config(struct adf_accel_dev *accel_dev) +{ +	char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; +	int banks = GET_MAX_BANKS(accel_dev); +	int cpus = num_online_cpus(); +	unsigned long val; +	int instances; +	int ret; +	int i; + +	if (adf_hw_dev_has_crypto(accel_dev)) +		instances = min(cpus, banks); +	else +		instances = 0; + +	for (i = 0; i < instances; i++) { +		val = i; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_BANK_NUM, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_BANK_NUM, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_ETRMGR_CORE_AFFINITY, +			 i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_SIZE, i); +		val = 128; +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 512; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_SIZE, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 0; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_TX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 2; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_TX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 8; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_RX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 10; +		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_RX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = ADF_COALESCING_DEF_TIME; +		snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i); +		ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0", +						  key, &val, ADF_DEC); +		if (ret) +			goto err; +	} + +	val = i; +	ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, +					  &val, ADF_DEC); +	if (ret) +		goto err; + +	return ret; + +err: +	dev_err(&GET_DEV(accel_dev), "Failed to add configuration for crypto\n"); +	return ret; +} + +static int adf_gen2_comp_dev_config(struct adf_accel_dev *accel_dev) +{ +	char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; +	int banks = GET_MAX_BANKS(accel_dev); +	int cpus = num_online_cpus(); +	unsigned long val; +	int instances; +	int ret; +	int i; + +	if (adf_hw_dev_has_compression(accel_dev)) +		instances = min(cpus, banks); +	else +		instances = 0; + +	for (i = 0; i < instances; i++) { +		val = i; +		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_BANK_NUM, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 512; +		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_SIZE, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 6; +		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_TX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; + +		val = 14; +		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_RX, i); +		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, +						  key, &val, ADF_DEC); +		if (ret) +			goto err; +	} + +	val = i; +	ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, +					  &val, ADF_DEC); +	if (ret) +		return ret; + +	return ret; + +err: +	dev_err(&GET_DEV(accel_dev), "Failed to add configuration for compression\n"); +	return ret; +} + +/** + * adf_gen2_dev_config() - create dev config required to create instances + * + * @accel_dev: Pointer to acceleration device. + * + * Function creates device configuration required to create instances + * + * Return: 0 on success, error code otherwise. + */ +int adf_gen2_dev_config(struct adf_accel_dev *accel_dev) +{ +	int ret; + +	ret = adf_cfg_section_add(accel_dev, ADF_KERNEL_SEC); +	if (ret) +		goto err; + +	ret = adf_cfg_section_add(accel_dev, "Accelerator0"); +	if (ret) +		goto err; + +	ret = adf_gen2_crypto_dev_config(accel_dev); +	if (ret) +		goto err; + +	ret = adf_gen2_comp_dev_config(accel_dev); +	if (ret) +		goto err; + +	set_bit(ADF_STATUS_CONFIGURED, &accel_dev->status); + +	return ret; + +err: +	dev_err(&GET_DEV(accel_dev), "Failed to configure QAT driver\n"); +	return ret; +} +EXPORT_SYMBOL_GPL(adf_gen2_dev_config);  |