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 13 static 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 107 err: 108 dev_err(&GET_DEV(accel_dev), "Failed to add configuration for crypto\n"); 109 return ret; 110 } 111 112 static 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 165 err: 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 */ 179 int 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 209 err: 210 dev_err(&GET_DEV(accel_dev), "Failed to configure QAT driver\n"); 211 return ret; 212 } 213 EXPORT_SYMBOL_GPL(adf_gen2_dev_config); 214