Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1// SPDX-License-Identifier: GPL-2.0-only
  2/* Copyright(c) 2022 Intel Corporation */
  3#include "adf_accel_devices.h"
  4#include "adf_cfg.h"
  5#include "adf_cfg_strings.h"
  6#include "adf_gen2_config.h"
  7#include "adf_common_drv.h"
  8#include "qat_crypto.h"
  9#include "qat_compression.h"
 10#include "adf_heartbeat.h"
 11#include "adf_transport_access_macros.h"
 12
 13static int adf_gen2_crypto_dev_config(struct adf_accel_dev *accel_dev)
 14{
 15	char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES];
 16	int banks = GET_MAX_BANKS(accel_dev);
 17	int cpus = num_online_cpus();
 18	unsigned long val;
 19	int instances;
 20	int ret;
 21	int i;
 22
 23	if (adf_hw_dev_has_crypto(accel_dev))
 24		instances = min(cpus, banks);
 25	else
 26		instances = 0;
 27
 28	for (i = 0; i < instances; i++) {
 29		val = i;
 30		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_BANK_NUM, i);
 31		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 32						  key, &val, ADF_DEC);
 33		if (ret)
 34			goto err;
 35
 36		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_BANK_NUM, i);
 37		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 38						  key, &val, ADF_DEC);
 39		if (ret)
 40			goto err;
 41
 42		snprintf(key, sizeof(key), ADF_CY "%d" ADF_ETRMGR_CORE_AFFINITY,
 43			 i);
 44		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 45						  key, &val, ADF_DEC);
 46		if (ret)
 47			goto err;
 48
 49		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_SIZE, i);
 50		val = 128;
 51		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 52						  key, &val, ADF_DEC);
 53		if (ret)
 54			goto err;
 55
 56		val = 512;
 57		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_SIZE, i);
 58		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 59						  key, &val, ADF_DEC);
 60		if (ret)
 61			goto err;
 62
 63		val = 0;
 64		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_TX, i);
 65		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 66						  key, &val, ADF_DEC);
 67		if (ret)
 68			goto err;
 69
 70		val = 2;
 71		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_TX, i);
 72		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 73						  key, &val, ADF_DEC);
 74		if (ret)
 75			goto err;
 76
 77		val = 8;
 78		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_RX, i);
 79		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 80						  key, &val, ADF_DEC);
 81		if (ret)
 82			goto err;
 83
 84		val = 10;
 85		snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_RX, i);
 86		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
 87						  key, &val, ADF_DEC);
 88		if (ret)
 89			goto err;
 90
 91		val = ADF_COALESCING_DEF_TIME;
 92		snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i);
 93		ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0",
 94						  key, &val, ADF_DEC);
 95		if (ret)
 96			goto err;
 97	}
 98
 99	val = i;
100	ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY,
101					  &val, ADF_DEC);
102	if (ret)
103		goto err;
104
105	return ret;
106
107err:
108	dev_err(&GET_DEV(accel_dev), "Failed to add configuration for crypto\n");
109	return ret;
110}
111
112static int adf_gen2_comp_dev_config(struct adf_accel_dev *accel_dev)
113{
114	char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES];
115	int banks = GET_MAX_BANKS(accel_dev);
116	int cpus = num_online_cpus();
117	unsigned long val;
118	int instances;
119	int ret;
120	int i;
121
122	if (adf_hw_dev_has_compression(accel_dev))
123		instances = min(cpus, banks);
124	else
125		instances = 0;
126
127	for (i = 0; i < instances; i++) {
128		val = i;
129		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_BANK_NUM, i);
130		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
131						  key, &val, ADF_DEC);
132		if (ret)
133			goto err;
134
135		val = 512;
136		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_SIZE, i);
137		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
138						  key, &val, ADF_DEC);
139		if (ret)
140			goto err;
141
142		val = 6;
143		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_TX, i);
144		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
145						  key, &val, ADF_DEC);
146		if (ret)
147			goto err;
148
149		val = 14;
150		snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_RX, i);
151		ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC,
152						  key, &val, ADF_DEC);
153		if (ret)
154			goto err;
155	}
156
157	val = i;
158	ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC,
159					  &val, ADF_DEC);
160	if (ret)
161		return ret;
162
163	return ret;
164
165err:
166	dev_err(&GET_DEV(accel_dev), "Failed to add configuration for compression\n");
167	return ret;
168}
169
170/**
171 * adf_gen2_dev_config() - create dev config required to create instances
172 *
173 * @accel_dev: Pointer to acceleration device.
174 *
175 * Function creates device configuration required to create instances
176 *
177 * Return: 0 on success, error code otherwise.
178 */
179int adf_gen2_dev_config(struct adf_accel_dev *accel_dev)
180{
181	int ret;
182
183	ret = adf_cfg_section_add(accel_dev, ADF_KERNEL_SEC);
184	if (ret)
185		goto err;
186
187	ret = adf_cfg_section_add(accel_dev, "Accelerator0");
188	if (ret)
189		goto err;
190
191	ret = adf_gen2_crypto_dev_config(accel_dev);
192	if (ret)
193		goto err;
194
195	ret = adf_gen2_comp_dev_config(accel_dev);
196	if (ret)
197		goto err;
198
199	ret = adf_cfg_section_add(accel_dev, ADF_GENERAL_SEC);
200	if (ret)
201		goto err;
202
203	adf_heartbeat_save_cfg_param(accel_dev, ADF_CFG_HB_TIMER_DEFAULT_MS);
204
205	set_bit(ADF_STATUS_CONFIGURED, &accel_dev->status);
206
207	return ret;
208
209err:
210	dev_err(&GET_DEV(accel_dev), "Failed to configure QAT driver\n");
211	return ret;
212}
213EXPORT_SYMBOL_GPL(adf_gen2_dev_config);