Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: qat - relocate portions of qat_4xxx code

Move logic that is common between QAT GEN4 accelerators to the
qat_common folder. This includes addresses of CSRs, setters and
configuration logic.
When moved, functions and defines have been renamed from 4XXX to GEN4.

Code specific to the device is moved to the file adf_gen4_hw_data.c.
Code related to configuration is moved to the newly created
adf_gen4_config.c.

This does not introduce any functional change.

Signed-off-by: Jie Wang <jie.wang@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Jie Wang and committed by
Herbert Xu
de51d223 b34bd0fd

+552 -484
+28 -160
drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c
··· 7 7 #include <adf_cfg_services.h> 8 8 #include <adf_clock.h> 9 9 #include <adf_common_drv.h> 10 + #include <adf_gen4_config.h> 10 11 #include <adf_gen4_dc.h> 11 12 #include <adf_gen4_hw_data.h> 12 13 #include <adf_gen4_pfvf.h> ··· 121 120 .instances = 0, 122 121 }; 123 122 124 - static u32 get_accel_mask(struct adf_hw_device_data *self) 125 - { 126 - return ADF_4XXX_ACCELERATORS_MASK; 127 - } 128 - 129 123 static u32 get_ae_mask(struct adf_hw_device_data *self) 130 124 { 131 125 u32 me_disable = self->fuses; 132 126 133 127 return ~me_disable & ADF_4XXX_ACCELENGINES_MASK; 134 - } 135 - 136 - static u32 get_num_accels(struct adf_hw_device_data *self) 137 - { 138 - return ADF_4XXX_MAX_ACCELERATORS; 139 - } 140 - 141 - static u32 get_num_aes(struct adf_hw_device_data *self) 142 - { 143 - if (!self || !self->ae_mask) 144 - return 0; 145 - 146 - return hweight32(self->ae_mask); 147 - } 148 - 149 - static u32 get_misc_bar_id(struct adf_hw_device_data *self) 150 - { 151 - return ADF_4XXX_PMISC_BAR; 152 - } 153 - 154 - static u32 get_etr_bar_id(struct adf_hw_device_data *self) 155 - { 156 - return ADF_4XXX_ETR_BAR; 157 - } 158 - 159 - static u32 get_sram_bar_id(struct adf_hw_device_data *self) 160 - { 161 - return ADF_4XXX_SRAM_BAR; 162 - } 163 - 164 - /* 165 - * The vector routing table is used to select the MSI-X entry to use for each 166 - * interrupt source. 167 - * The first ADF_4XXX_ETR_MAX_BANKS entries correspond to ring interrupts. 168 - * The final entry corresponds to VF2PF or error interrupts. 169 - * This vector table could be used to configure one MSI-X entry to be shared 170 - * between multiple interrupt sources. 171 - * 172 - * The default routing is set to have a one to one correspondence between the 173 - * interrupt source and the MSI-X entry used. 174 - */ 175 - static void set_msix_default_rttable(struct adf_accel_dev *accel_dev) 176 - { 177 - void __iomem *csr; 178 - int i; 179 - 180 - csr = (&GET_BARS(accel_dev)[ADF_4XXX_PMISC_BAR])->virt_addr; 181 - for (i = 0; i <= ADF_4XXX_ETR_MAX_BANKS; i++) 182 - ADF_CSR_WR(csr, ADF_4XXX_MSIX_RTTABLE_OFFSET(i), i); 183 128 } 184 129 185 130 static u32 get_accel_cap(struct adf_accel_dev *accel_dev) ··· 136 189 u32 fusectl1; 137 190 138 191 /* Read accelerator capabilities mask */ 139 - pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1); 192 + pci_read_config_dword(pdev, ADF_GEN4_FUSECTL1_OFFSET, &fusectl1); 140 193 141 194 capabilities_sym = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC | 142 195 ICP_ACCEL_CAPABILITIES_CIPHER | ··· 151 204 ICP_ACCEL_CAPABILITIES_AES_V2; 152 205 153 206 /* A set bit in fusectl1 means the feature is OFF in this SKU */ 154 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE) { 207 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_CIPHER_SLICE) { 155 208 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC; 156 209 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_HKDF; 157 210 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 158 211 } 159 212 160 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE) { 213 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_UCS_SLICE) { 161 214 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY; 162 215 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC; 163 216 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AES_V2; 164 217 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 165 218 } 166 219 167 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE) { 220 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_AUTH_SLICE) { 168 221 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION; 169 222 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3; 170 223 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT; 171 224 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 172 225 } 173 226 174 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_SMX_SLICE) { 227 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_SMX_SLICE) { 175 228 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SM3; 176 229 capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SM4; 177 230 } ··· 181 234 ICP_ACCEL_CAPABILITIES_SM2 | 182 235 ICP_ACCEL_CAPABILITIES_ECEDMONT; 183 236 184 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE) { 237 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_PKE_SLICE) { 185 238 capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC; 186 239 capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_SM2; 187 240 capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT; ··· 192 245 ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION | 193 246 ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64; 194 247 195 - if (fusectl1 & ICP_ACCEL_4XXX_MASK_COMPRESS_SLICE) { 248 + if (fusectl1 & ICP_ACCEL_GEN4_MASK_COMPRESS_SLICE) { 196 249 capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_COMPRESSION; 197 250 capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION; 198 251 capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION; ··· 228 281 } 229 282 } 230 283 231 - static enum dev_sku_info get_sku(struct adf_hw_device_data *self) 232 - { 233 - return DEV_SKU_1; 234 - } 235 - 236 284 static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev) 237 285 { 238 286 switch (adf_get_service_enabled(accel_dev)) { ··· 238 296 default: 239 297 return default_thrd_to_arb_map; 240 298 } 241 - } 242 - 243 - static void get_arb_info(struct arb_info *arb_info) 244 - { 245 - arb_info->arb_cfg = ADF_4XXX_ARB_CONFIG; 246 - arb_info->arb_offset = ADF_4XXX_ARB_OFFSET; 247 - arb_info->wt2sam_offset = ADF_4XXX_ARB_WRK_2_SER_MAP_OFFSET; 248 - } 249 - 250 - static void get_admin_info(struct admin_info *admin_csrs_info) 251 - { 252 - admin_csrs_info->mailbox_offset = ADF_4XXX_MAILBOX_BASE_OFFSET; 253 - admin_csrs_info->admin_msg_ur = ADF_4XXX_ADMINMSGUR_OFFSET; 254 - admin_csrs_info->admin_msg_lr = ADF_4XXX_ADMINMSGLR_OFFSET; 255 - } 256 - 257 - static u32 get_heartbeat_clock(struct adf_hw_device_data *self) 258 - { 259 - /* 260 - * 4XXX uses KPT counter for HB 261 - */ 262 - return ADF_4XXX_KPT_COUNTER_FREQ; 263 299 } 264 300 265 301 static void adf_init_rl_data(struct adf_rl_hw_data *rl_data) ··· 256 336 rl_data->max_tp[ADF_SVC_DC] = ADF_4XXX_RL_MAX_TP_DC; 257 337 rl_data->scan_interval = ADF_4XXX_RL_SCANS_PER_SEC; 258 338 rl_data->scale_ref = ADF_4XXX_RL_SLICE_REF; 259 - } 260 - 261 - static void adf_enable_error_correction(struct adf_accel_dev *accel_dev) 262 - { 263 - struct adf_bar *misc_bar = &GET_BARS(accel_dev)[ADF_4XXX_PMISC_BAR]; 264 - void __iomem *csr = misc_bar->virt_addr; 265 - 266 - /* Enable all in errsou3 except VFLR notification on host */ 267 - ADF_CSR_WR(csr, ADF_GEN4_ERRMSK3, ADF_GEN4_VFLNOTIFY); 268 - } 269 - 270 - static void adf_enable_ints(struct adf_accel_dev *accel_dev) 271 - { 272 - void __iomem *addr; 273 - 274 - addr = (&GET_BARS(accel_dev)[ADF_4XXX_PMISC_BAR])->virt_addr; 275 - 276 - /* Enable bundle interrupts */ 277 - ADF_CSR_WR(addr, ADF_4XXX_SMIAPF_RP_X0_MASK_OFFSET, 0); 278 - ADF_CSR_WR(addr, ADF_4XXX_SMIAPF_RP_X1_MASK_OFFSET, 0); 279 - 280 - /* Enable misc interrupts */ 281 - ADF_CSR_WR(addr, ADF_4XXX_SMIAPF_MASK_OFFSET, 0); 282 - } 283 - 284 - static int adf_init_device(struct adf_accel_dev *accel_dev) 285 - { 286 - void __iomem *addr; 287 - u32 status; 288 - u32 csr; 289 - int ret; 290 - 291 - addr = (&GET_BARS(accel_dev)[ADF_4XXX_PMISC_BAR])->virt_addr; 292 - 293 - /* Temporarily mask PM interrupt */ 294 - csr = ADF_CSR_RD(addr, ADF_GEN4_ERRMSK2); 295 - csr |= ADF_GEN4_PM_SOU; 296 - ADF_CSR_WR(addr, ADF_GEN4_ERRMSK2, csr); 297 - 298 - /* Set DRV_ACTIVE bit to power up the device */ 299 - ADF_CSR_WR(addr, ADF_GEN4_PM_INTERRUPT, ADF_GEN4_PM_DRV_ACTIVE); 300 - 301 - /* Poll status register to make sure the device is powered up */ 302 - ret = read_poll_timeout(ADF_CSR_RD, status, 303 - status & ADF_GEN4_PM_INIT_STATE, 304 - ADF_GEN4_PM_POLL_DELAY_US, 305 - ADF_GEN4_PM_POLL_TIMEOUT_US, true, addr, 306 - ADF_GEN4_PM_STATUS); 307 - if (ret) 308 - dev_err(&GET_DEV(accel_dev), "Failed to power up the device\n"); 309 - 310 - return ret; 311 339 } 312 340 313 341 static u32 uof_get_num_objs(struct adf_accel_dev *accel_dev) ··· 398 530 { 399 531 hw_data->dev_class = &adf_4xxx_class; 400 532 hw_data->instance_id = adf_4xxx_class.instances++; 401 - hw_data->num_banks = ADF_4XXX_ETR_MAX_BANKS; 402 - hw_data->num_banks_per_vf = ADF_4XXX_NUM_BANKS_PER_VF; 403 - hw_data->num_rings_per_bank = ADF_4XXX_NUM_RINGS_PER_BANK; 404 - hw_data->num_accel = ADF_4XXX_MAX_ACCELERATORS; 533 + hw_data->num_banks = ADF_GEN4_ETR_MAX_BANKS; 534 + hw_data->num_banks_per_vf = ADF_GEN4_NUM_BANKS_PER_VF; 535 + hw_data->num_rings_per_bank = ADF_GEN4_NUM_RINGS_PER_BANK; 536 + hw_data->num_accel = ADF_GEN4_MAX_ACCELERATORS; 405 537 hw_data->num_engines = ADF_4XXX_MAX_ACCELENGINES; 406 538 hw_data->num_logical_accel = 1; 407 - hw_data->tx_rx_gap = ADF_4XXX_RX_RINGS_OFFSET; 408 - hw_data->tx_rings_mask = ADF_4XXX_TX_RINGS_MASK; 539 + hw_data->tx_rx_gap = ADF_GEN4_RX_RINGS_OFFSET; 540 + hw_data->tx_rings_mask = ADF_GEN4_TX_RINGS_MASK; 409 541 hw_data->ring_to_svc_map = ADF_GEN4_DEFAULT_RING_TO_SRV_MAP; 410 542 hw_data->alloc_irq = adf_isr_resource_alloc; 411 543 hw_data->free_irq = adf_isr_resource_free; 412 - hw_data->enable_error_correction = adf_enable_error_correction; 413 - hw_data->get_accel_mask = get_accel_mask; 544 + hw_data->enable_error_correction = adf_gen4_enable_error_correction; 545 + hw_data->get_accel_mask = adf_gen4_get_accel_mask; 414 546 hw_data->get_ae_mask = get_ae_mask; 415 - hw_data->get_num_accels = get_num_accels; 416 - hw_data->get_num_aes = get_num_aes; 417 - hw_data->get_sram_bar_id = get_sram_bar_id; 418 - hw_data->get_etr_bar_id = get_etr_bar_id; 419 - hw_data->get_misc_bar_id = get_misc_bar_id; 420 - hw_data->get_arb_info = get_arb_info; 421 - hw_data->get_admin_info = get_admin_info; 547 + hw_data->get_num_accels = adf_gen4_get_num_accels; 548 + hw_data->get_num_aes = adf_gen4_get_num_aes; 549 + hw_data->get_sram_bar_id = adf_gen4_get_sram_bar_id; 550 + hw_data->get_etr_bar_id = adf_gen4_get_etr_bar_id; 551 + hw_data->get_misc_bar_id = adf_gen4_get_misc_bar_id; 552 + hw_data->get_arb_info = adf_gen4_get_arb_info; 553 + hw_data->get_admin_info = adf_gen4_get_admin_info; 422 554 hw_data->get_accel_cap = get_accel_cap; 423 - hw_data->get_sku = get_sku; 555 + hw_data->get_sku = adf_gen4_get_sku; 424 556 hw_data->init_admin_comms = adf_init_admin_comms; 425 557 hw_data->exit_admin_comms = adf_exit_admin_comms; 426 558 hw_data->send_admin_init = adf_send_admin_init; 427 559 hw_data->init_arb = adf_init_arb; 428 560 hw_data->exit_arb = adf_exit_arb; 429 561 hw_data->get_arb_mapping = adf_get_arbiter_mapping; 430 - hw_data->enable_ints = adf_enable_ints; 431 - hw_data->init_device = adf_init_device; 562 + hw_data->enable_ints = adf_gen4_enable_ints; 563 + hw_data->init_device = adf_gen4_init_device; 432 564 hw_data->reset_device = adf_reset_flr; 433 565 hw_data->admin_ae_mask = ADF_4XXX_ADMIN_AE_MASK; 434 566 switch (dev_id) { ··· 445 577 } 446 578 hw_data->uof_get_num_objs = uof_get_num_objs; 447 579 hw_data->uof_get_ae_mask = uof_get_ae_mask; 448 - hw_data->set_msix_rttable = set_msix_default_rttable; 580 + hw_data->set_msix_rttable = adf_gen4_set_msix_default_rttable; 449 581 hw_data->set_ssm_wdtimer = adf_gen4_set_ssm_wdtimer; 450 582 hw_data->get_ring_to_svc_map = get_ring_to_svc_map; 451 583 hw_data->disable_iov = adf_disable_sriov; ··· 455 587 hw_data->dev_config = adf_gen4_dev_config; 456 588 hw_data->start_timer = adf_gen4_timer_start; 457 589 hw_data->stop_timer = adf_gen4_timer_stop; 458 - hw_data->get_hb_clock = get_heartbeat_clock; 590 + hw_data->get_hb_clock = adf_gen4_get_heartbeat_clock; 459 591 hw_data->num_hb_ctrs = ADF_NUM_HB_CNT_PER_AE; 460 592 hw_data->clock_frequency = ADF_4XXX_AE_FREQ; 461 593
-52
drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.h
··· 6 6 #include <linux/units.h> 7 7 #include <adf_accel_devices.h> 8 8 9 - /* PCIe configuration space */ 10 - #define ADF_4XXX_SRAM_BAR 0 11 - #define ADF_4XXX_PMISC_BAR 1 12 - #define ADF_4XXX_ETR_BAR 2 13 - #define ADF_4XXX_RX_RINGS_OFFSET 1 14 - #define ADF_4XXX_TX_RINGS_MASK 0x1 15 - #define ADF_4XXX_MAX_ACCELERATORS 1 16 9 #define ADF_4XXX_MAX_ACCELENGINES 9 17 - #define ADF_4XXX_BAR_MASK (BIT(0) | BIT(2) | BIT(4)) 18 10 19 - /* Physical function fuses */ 20 - #define ADF_4XXX_FUSECTL0_OFFSET (0x2C8) 21 - #define ADF_4XXX_FUSECTL1_OFFSET (0x2CC) 22 - #define ADF_4XXX_FUSECTL2_OFFSET (0x2D0) 23 - #define ADF_4XXX_FUSECTL3_OFFSET (0x2D4) 24 - #define ADF_4XXX_FUSECTL4_OFFSET (0x2D8) 25 - #define ADF_4XXX_FUSECTL5_OFFSET (0x2DC) 26 - 27 - #define ADF_4XXX_ACCELERATORS_MASK (0x1) 28 11 #define ADF_4XXX_ACCELENGINES_MASK (0x1FF) 29 12 #define ADF_4XXX_ADMIN_AE_MASK (0x100) 30 13 ··· 27 44 #define ADF_4XXX_SSMFEATREN_MASK \ 28 45 (BIT(4) | BIT(12) | BIT(16) | BIT(17) | BIT(18) | \ 29 46 BIT(19) | BIT(20) | BIT(21) | BIT(22) | BIT(23)) 30 - 31 - #define ADF_4XXX_ETR_MAX_BANKS 64 32 - 33 - /* MSIX interrupt */ 34 - #define ADF_4XXX_SMIAPF_RP_X0_MASK_OFFSET (0x41A040) 35 - #define ADF_4XXX_SMIAPF_RP_X1_MASK_OFFSET (0x41A044) 36 - #define ADF_4XXX_SMIAPF_MASK_OFFSET (0x41A084) 37 - #define ADF_4XXX_MSIX_RTTABLE_OFFSET(i) (0x409000 + ((i) * 0x04)) 38 - 39 - /* Bank and ring configuration */ 40 - #define ADF_4XXX_NUM_RINGS_PER_BANK 2 41 - #define ADF_4XXX_NUM_BANKS_PER_VF 4 42 - 43 - /* Arbiter configuration */ 44 - #define ADF_4XXX_ARB_CONFIG (BIT(31) | BIT(6) | BIT(0)) 45 - #define ADF_4XXX_ARB_OFFSET (0x0) 46 - #define ADF_4XXX_ARB_WRK_2_SER_MAP_OFFSET (0x400) 47 - 48 - /* Admin Interface Reg Offset */ 49 - #define ADF_4XXX_ADMINMSGUR_OFFSET (0x500574) 50 - #define ADF_4XXX_ADMINMSGLR_OFFSET (0x500578) 51 - #define ADF_4XXX_MAILBOX_BASE_OFFSET (0x600970) 52 47 53 48 /* Firmware Binaries */ 54 49 #define ADF_4XXX_FW "qat_4xxx.bin" ··· 54 93 #define ADF_4XXX_RL_SLICE_REF 1000UL 55 94 56 95 /* Clocks frequency */ 57 - #define ADF_4XXX_KPT_COUNTER_FREQ (100 * HZ_PER_MHZ) 58 96 #define ADF_4XXX_AE_FREQ (1000 * HZ_PER_MHZ) 59 - 60 - /* qat_4xxx fuse bits are different from old GENs, redefine them */ 61 - enum icp_qat_4xxx_slice_mask { 62 - ICP_ACCEL_4XXX_MASK_CIPHER_SLICE = BIT(0), 63 - ICP_ACCEL_4XXX_MASK_AUTH_SLICE = BIT(1), 64 - ICP_ACCEL_4XXX_MASK_PKE_SLICE = BIT(2), 65 - ICP_ACCEL_4XXX_MASK_COMPRESS_SLICE = BIT(3), 66 - ICP_ACCEL_4XXX_MASK_UCS_SLICE = BIT(4), 67 - ICP_ACCEL_4XXX_MASK_EIA3_SLICE = BIT(5), 68 - ICP_ACCEL_4XXX_MASK_SMX_SLICE = BIT(7), 69 - }; 70 97 71 98 void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data, u32 dev_id); 72 99 void adf_clean_hw_data_4xxx(struct adf_hw_device_data *hw_data); 73 - int adf_gen4_dev_config(struct adf_accel_dev *accel_dev); 74 100 75 101 #endif
+5 -272
drivers/crypto/intel/qat/qat_4xxx/adf_drv.c
··· 8 8 #include <adf_cfg.h> 9 9 #include <adf_common_drv.h> 10 10 #include <adf_dbgfs.h> 11 - #include <adf_heartbeat.h> 11 + #include <adf_gen4_config.h> 12 + #include <adf_gen4_hw_data.h> 12 13 13 14 #include "adf_4xxx_hw_data.h" 14 - #include "adf_cfg_services.h" 15 - #include "qat_compression.h" 16 - #include "qat_crypto.h" 17 - #include "adf_transport_access_macros.h" 18 15 19 16 static const struct pci_device_id adf_pci_tbl[] = { 20 17 { PCI_VDEVICE(INTEL, ADF_4XXX_PCI_DEVICE_ID), }, ··· 30 33 adf_dbgfs_exit(accel_dev); 31 34 adf_cfg_dev_remove(accel_dev); 32 35 adf_devmgr_rm_dev(accel_dev, NULL); 33 - } 34 - 35 - static int adf_cfg_dev_init(struct adf_accel_dev *accel_dev) 36 - { 37 - const char *config; 38 - int ret; 39 - 40 - config = accel_dev->accel_id % 2 ? ADF_CFG_DC : ADF_CFG_CY; 41 - 42 - ret = adf_cfg_section_add(accel_dev, ADF_GENERAL_SEC); 43 - if (ret) 44 - return ret; 45 - 46 - /* Default configuration is crypto only for even devices 47 - * and compression for odd devices 48 - */ 49 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_GENERAL_SEC, 50 - ADF_SERVICES_ENABLED, config, 51 - ADF_STR); 52 - if (ret) 53 - return ret; 54 - 55 - adf_heartbeat_save_cfg_param(accel_dev, ADF_CFG_HB_TIMER_MIN_MS); 56 - 57 - return 0; 58 - } 59 - 60 - static int adf_crypto_dev_config(struct adf_accel_dev *accel_dev) 61 - { 62 - char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; 63 - int banks = GET_MAX_BANKS(accel_dev); 64 - int cpus = num_online_cpus(); 65 - unsigned long bank, val; 66 - int instances; 67 - int ret; 68 - int i; 69 - 70 - if (adf_hw_dev_has_crypto(accel_dev)) 71 - instances = min(cpus, banks / 2); 72 - else 73 - instances = 0; 74 - 75 - for (i = 0; i < instances; i++) { 76 - val = i; 77 - bank = i * 2; 78 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_BANK_NUM, i); 79 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 80 - key, &bank, ADF_DEC); 81 - if (ret) 82 - goto err; 83 - 84 - bank += 1; 85 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_BANK_NUM, i); 86 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 87 - key, &bank, ADF_DEC); 88 - if (ret) 89 - goto err; 90 - 91 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_ETRMGR_CORE_AFFINITY, 92 - i); 93 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 94 - key, &val, ADF_DEC); 95 - if (ret) 96 - goto err; 97 - 98 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_SIZE, i); 99 - val = 128; 100 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 101 - key, &val, ADF_DEC); 102 - if (ret) 103 - goto err; 104 - 105 - val = 512; 106 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_SIZE, i); 107 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 108 - key, &val, ADF_DEC); 109 - if (ret) 110 - goto err; 111 - 112 - val = 0; 113 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_TX, i); 114 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 115 - key, &val, ADF_DEC); 116 - if (ret) 117 - goto err; 118 - 119 - val = 0; 120 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_TX, i); 121 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 122 - key, &val, ADF_DEC); 123 - if (ret) 124 - goto err; 125 - 126 - val = 1; 127 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_RX, i); 128 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 129 - key, &val, ADF_DEC); 130 - if (ret) 131 - goto err; 132 - 133 - val = 1; 134 - snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_RX, i); 135 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 136 - key, &val, ADF_DEC); 137 - if (ret) 138 - goto err; 139 - 140 - val = ADF_COALESCING_DEF_TIME; 141 - snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i); 142 - ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0", 143 - key, &val, ADF_DEC); 144 - if (ret) 145 - goto err; 146 - } 147 - 148 - val = i; 149 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 150 - &val, ADF_DEC); 151 - if (ret) 152 - goto err; 153 - 154 - val = 0; 155 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 156 - &val, ADF_DEC); 157 - if (ret) 158 - goto err; 159 - 160 - return 0; 161 - err: 162 - dev_err(&GET_DEV(accel_dev), "Failed to add configuration for crypto\n"); 163 - return ret; 164 - } 165 - 166 - static int adf_comp_dev_config(struct adf_accel_dev *accel_dev) 167 - { 168 - char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; 169 - int banks = GET_MAX_BANKS(accel_dev); 170 - int cpus = num_online_cpus(); 171 - unsigned long val; 172 - int instances; 173 - int ret; 174 - int i; 175 - 176 - if (adf_hw_dev_has_compression(accel_dev)) 177 - instances = min(cpus, banks); 178 - else 179 - instances = 0; 180 - 181 - for (i = 0; i < instances; i++) { 182 - val = i; 183 - snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_BANK_NUM, i); 184 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 185 - key, &val, ADF_DEC); 186 - if (ret) 187 - goto err; 188 - 189 - val = 512; 190 - snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_SIZE, i); 191 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 192 - key, &val, ADF_DEC); 193 - if (ret) 194 - goto err; 195 - 196 - val = 0; 197 - snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_TX, i); 198 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 199 - key, &val, ADF_DEC); 200 - if (ret) 201 - goto err; 202 - 203 - val = 1; 204 - snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_RX, i); 205 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 206 - key, &val, ADF_DEC); 207 - if (ret) 208 - goto err; 209 - 210 - val = ADF_COALESCING_DEF_TIME; 211 - snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i); 212 - ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0", 213 - key, &val, ADF_DEC); 214 - if (ret) 215 - goto err; 216 - } 217 - 218 - val = i; 219 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 220 - &val, ADF_DEC); 221 - if (ret) 222 - goto err; 223 - 224 - val = 0; 225 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 226 - &val, ADF_DEC); 227 - if (ret) 228 - goto err; 229 - 230 - return 0; 231 - err: 232 - dev_err(&GET_DEV(accel_dev), "Failed to add configuration for compression\n"); 233 - return ret; 234 - } 235 - 236 - static int adf_no_dev_config(struct adf_accel_dev *accel_dev) 237 - { 238 - unsigned long val; 239 - int ret; 240 - 241 - val = 0; 242 - ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 243 - &val, ADF_DEC); 244 - if (ret) 245 - return ret; 246 - 247 - return adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 248 - &val, ADF_DEC); 249 - } 250 - 251 - int adf_gen4_dev_config(struct adf_accel_dev *accel_dev) 252 - { 253 - char services[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = {0}; 254 - int ret; 255 - 256 - ret = adf_cfg_section_add(accel_dev, ADF_KERNEL_SEC); 257 - if (ret) 258 - goto err; 259 - 260 - ret = adf_cfg_section_add(accel_dev, "Accelerator0"); 261 - if (ret) 262 - goto err; 263 - 264 - ret = adf_cfg_get_param_value(accel_dev, ADF_GENERAL_SEC, 265 - ADF_SERVICES_ENABLED, services); 266 - if (ret) 267 - goto err; 268 - 269 - ret = sysfs_match_string(adf_cfg_services, services); 270 - if (ret < 0) 271 - goto err; 272 - 273 - switch (ret) { 274 - case SVC_CY: 275 - case SVC_CY2: 276 - ret = adf_crypto_dev_config(accel_dev); 277 - break; 278 - case SVC_DC: 279 - case SVC_DCC: 280 - ret = adf_comp_dev_config(accel_dev); 281 - break; 282 - default: 283 - ret = adf_no_dev_config(accel_dev); 284 - break; 285 - } 286 - 287 - if (ret) 288 - goto err; 289 - 290 - set_bit(ADF_STATUS_CONFIGURED, &accel_dev->status); 291 - 292 - return ret; 293 - 294 - err: 295 - dev_err(&GET_DEV(accel_dev), "Failed to configure QAT driver\n"); 296 - return ret; 297 36 } 298 37 299 38 static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ··· 81 348 adf_init_hw_data_4xxx(accel_dev->hw_device, ent->device); 82 349 83 350 pci_read_config_byte(pdev, PCI_REVISION_ID, &accel_pci_dev->revid); 84 - pci_read_config_dword(pdev, ADF_4XXX_FUSECTL4_OFFSET, &hw_data->fuses); 351 + pci_read_config_dword(pdev, ADF_GEN4_FUSECTL4_OFFSET, &hw_data->fuses); 85 352 86 353 /* Get Accelerators and Accelerators Engines masks */ 87 354 hw_data->accel_mask = hw_data->get_accel_mask(hw_data); ··· 114 381 goto out_err; 115 382 } 116 383 117 - ret = adf_cfg_dev_init(accel_dev); 384 + ret = adf_gen4_cfg_dev_init(accel_dev); 118 385 if (ret) { 119 386 dev_err(&pdev->dev, "Failed to initialize configuration.\n"); 120 387 goto out_err; ··· 129 396 } 130 397 131 398 /* Find and map all the device's BARS */ 132 - bar_mask = pci_select_bars(pdev, IORESOURCE_MEM) & ADF_4XXX_BAR_MASK; 399 + bar_mask = pci_select_bars(pdev, IORESOURCE_MEM) & ADF_GEN4_BAR_MASK; 133 400 134 401 ret = pcim_iomap_regions_request_all(pdev, bar_mask, pci_name(pdev)); 135 402 if (ret) {
+1
drivers/crypto/intel/qat/qat_common/Makefile
··· 16 16 adf_sysfs_ras_counters.o \ 17 17 adf_gen2_hw_data.o \ 18 18 adf_gen2_config.o \ 19 + adf_gen4_config.o \ 19 20 adf_gen4_hw_data.o \ 20 21 adf_gen4_pm.o \ 21 22 adf_gen2_dc.o \
+287
drivers/crypto/intel/qat/qat_common/adf_gen4_config.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* Copyright(c) 2023 Intel Corporation */ 3 + #include "adf_accel_devices.h" 4 + #include "adf_cfg.h" 5 + #include "adf_cfg_services.h" 6 + #include "adf_cfg_strings.h" 7 + #include "adf_common_drv.h" 8 + #include "adf_gen4_config.h" 9 + #include "adf_heartbeat.h" 10 + #include "adf_transport_access_macros.h" 11 + #include "qat_compression.h" 12 + #include "qat_crypto.h" 13 + 14 + static int adf_crypto_dev_config(struct adf_accel_dev *accel_dev) 15 + { 16 + char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; 17 + int banks = GET_MAX_BANKS(accel_dev); 18 + int cpus = num_online_cpus(); 19 + unsigned long bank, val; 20 + int instances; 21 + int ret; 22 + int i; 23 + 24 + if (adf_hw_dev_has_crypto(accel_dev)) 25 + instances = min(cpus, banks / 2); 26 + else 27 + instances = 0; 28 + 29 + for (i = 0; i < instances; i++) { 30 + val = i; 31 + bank = i * 2; 32 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_BANK_NUM, i); 33 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 34 + key, &bank, ADF_DEC); 35 + if (ret) 36 + goto err; 37 + 38 + bank += 1; 39 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_BANK_NUM, i); 40 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 41 + key, &bank, ADF_DEC); 42 + if (ret) 43 + goto err; 44 + 45 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_ETRMGR_CORE_AFFINITY, 46 + i); 47 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 48 + key, &val, ADF_DEC); 49 + if (ret) 50 + goto err; 51 + 52 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_SIZE, i); 53 + val = 128; 54 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 55 + key, &val, ADF_DEC); 56 + if (ret) 57 + goto err; 58 + 59 + val = 512; 60 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_SIZE, i); 61 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 62 + key, &val, ADF_DEC); 63 + if (ret) 64 + goto err; 65 + 66 + val = 0; 67 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_TX, i); 68 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 69 + key, &val, ADF_DEC); 70 + if (ret) 71 + goto err; 72 + 73 + val = 0; 74 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_TX, i); 75 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 76 + key, &val, ADF_DEC); 77 + if (ret) 78 + goto err; 79 + 80 + val = 1; 81 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_ASYM_RX, i); 82 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 83 + key, &val, ADF_DEC); 84 + if (ret) 85 + goto err; 86 + 87 + val = 1; 88 + snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_SYM_RX, i); 89 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 90 + key, &val, ADF_DEC); 91 + if (ret) 92 + goto err; 93 + 94 + val = ADF_COALESCING_DEF_TIME; 95 + snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i); 96 + ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0", 97 + key, &val, ADF_DEC); 98 + if (ret) 99 + goto err; 100 + } 101 + 102 + val = i; 103 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 104 + &val, ADF_DEC); 105 + if (ret) 106 + goto err; 107 + 108 + val = 0; 109 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 110 + &val, ADF_DEC); 111 + if (ret) 112 + goto err; 113 + 114 + return 0; 115 + err: 116 + dev_err(&GET_DEV(accel_dev), "Failed to add configuration for crypto\n"); 117 + return ret; 118 + } 119 + 120 + static int adf_comp_dev_config(struct adf_accel_dev *accel_dev) 121 + { 122 + char key[ADF_CFG_MAX_KEY_LEN_IN_BYTES]; 123 + int banks = GET_MAX_BANKS(accel_dev); 124 + int cpus = num_online_cpus(); 125 + unsigned long val; 126 + int instances; 127 + int ret; 128 + int i; 129 + 130 + if (adf_hw_dev_has_compression(accel_dev)) 131 + instances = min(cpus, banks); 132 + else 133 + instances = 0; 134 + 135 + for (i = 0; i < instances; i++) { 136 + val = i; 137 + snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_BANK_NUM, i); 138 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 139 + key, &val, ADF_DEC); 140 + if (ret) 141 + goto err; 142 + 143 + val = 512; 144 + snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_SIZE, i); 145 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 146 + key, &val, ADF_DEC); 147 + if (ret) 148 + goto err; 149 + 150 + val = 0; 151 + snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_TX, i); 152 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 153 + key, &val, ADF_DEC); 154 + if (ret) 155 + goto err; 156 + 157 + val = 1; 158 + snprintf(key, sizeof(key), ADF_DC "%d" ADF_RING_DC_RX, i); 159 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, 160 + key, &val, ADF_DEC); 161 + if (ret) 162 + goto err; 163 + 164 + val = ADF_COALESCING_DEF_TIME; 165 + snprintf(key, sizeof(key), ADF_ETRMGR_COALESCE_TIMER_FORMAT, i); 166 + ret = adf_cfg_add_key_value_param(accel_dev, "Accelerator0", 167 + key, &val, ADF_DEC); 168 + if (ret) 169 + goto err; 170 + } 171 + 172 + val = i; 173 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 174 + &val, ADF_DEC); 175 + if (ret) 176 + goto err; 177 + 178 + val = 0; 179 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 180 + &val, ADF_DEC); 181 + if (ret) 182 + goto err; 183 + 184 + return 0; 185 + err: 186 + dev_err(&GET_DEV(accel_dev), "Failed to add configuration for compression\n"); 187 + return ret; 188 + } 189 + 190 + static int adf_no_dev_config(struct adf_accel_dev *accel_dev) 191 + { 192 + unsigned long val; 193 + int ret; 194 + 195 + val = 0; 196 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_DC, 197 + &val, ADF_DEC); 198 + if (ret) 199 + return ret; 200 + 201 + return adf_cfg_add_key_value_param(accel_dev, ADF_KERNEL_SEC, ADF_NUM_CY, 202 + &val, ADF_DEC); 203 + } 204 + 205 + /** 206 + * adf_gen4_dev_config() - create dev config required to create instances 207 + * 208 + * @accel_dev: Pointer to acceleration device. 209 + * 210 + * Function creates device configuration required to create instances 211 + * 212 + * Return: 0 on success, error code otherwise. 213 + */ 214 + int adf_gen4_dev_config(struct adf_accel_dev *accel_dev) 215 + { 216 + char services[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = {0}; 217 + int ret; 218 + 219 + ret = adf_cfg_section_add(accel_dev, ADF_KERNEL_SEC); 220 + if (ret) 221 + goto err; 222 + 223 + ret = adf_cfg_section_add(accel_dev, "Accelerator0"); 224 + if (ret) 225 + goto err; 226 + 227 + ret = adf_cfg_get_param_value(accel_dev, ADF_GENERAL_SEC, 228 + ADF_SERVICES_ENABLED, services); 229 + if (ret) 230 + goto err; 231 + 232 + ret = sysfs_match_string(adf_cfg_services, services); 233 + if (ret < 0) 234 + goto err; 235 + 236 + switch (ret) { 237 + case SVC_CY: 238 + case SVC_CY2: 239 + ret = adf_crypto_dev_config(accel_dev); 240 + break; 241 + case SVC_DC: 242 + case SVC_DCC: 243 + ret = adf_comp_dev_config(accel_dev); 244 + break; 245 + default: 246 + ret = adf_no_dev_config(accel_dev); 247 + break; 248 + } 249 + 250 + if (ret) 251 + goto err; 252 + 253 + set_bit(ADF_STATUS_CONFIGURED, &accel_dev->status); 254 + 255 + return ret; 256 + 257 + err: 258 + dev_err(&GET_DEV(accel_dev), "Failed to configure QAT driver\n"); 259 + return ret; 260 + } 261 + EXPORT_SYMBOL_GPL(adf_gen4_dev_config); 262 + 263 + int adf_gen4_cfg_dev_init(struct adf_accel_dev *accel_dev) 264 + { 265 + const char *config; 266 + int ret; 267 + 268 + config = accel_dev->accel_id % 2 ? ADF_CFG_DC : ADF_CFG_CY; 269 + 270 + ret = adf_cfg_section_add(accel_dev, ADF_GENERAL_SEC); 271 + if (ret) 272 + return ret; 273 + 274 + /* Default configuration is crypto only for even devices 275 + * and compression for odd devices 276 + */ 277 + ret = adf_cfg_add_key_value_param(accel_dev, ADF_GENERAL_SEC, 278 + ADF_SERVICES_ENABLED, config, 279 + ADF_STR); 280 + if (ret) 281 + return ret; 282 + 283 + adf_heartbeat_save_cfg_param(accel_dev, ADF_CFG_HB_TIMER_MIN_MS); 284 + 285 + return 0; 286 + } 287 + EXPORT_SYMBOL_GPL(adf_gen4_cfg_dev_init);
+11
drivers/crypto/intel/qat/qat_common/adf_gen4_config.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* Copyright(c) 2023 Intel Corporation */ 3 + #ifndef ADF_GEN4_CONFIG_H_ 4 + #define ADF_GEN4_CONFIG_H_ 5 + 6 + #include "adf_accel_devices.h" 7 + 8 + int adf_gen4_dev_config(struct adf_accel_dev *accel_dev); 9 + int adf_gen4_cfg_dev_init(struct adf_accel_dev *accel_dev); 10 + 11 + #endif
+148
drivers/crypto/intel/qat/qat_common/adf_gen4_hw_data.c
··· 4 4 #include "adf_accel_devices.h" 5 5 #include "adf_common_drv.h" 6 6 #include "adf_gen4_hw_data.h" 7 + #include "adf_gen4_pm.h" 7 8 8 9 static u64 build_csr_ring_base_addr(dma_addr_t addr, u32 size) 9 10 { ··· 103 102 } 104 103 EXPORT_SYMBOL_GPL(adf_gen4_init_hw_csr_ops); 105 104 105 + u32 adf_gen4_get_accel_mask(struct adf_hw_device_data *self) 106 + { 107 + return ADF_GEN4_ACCELERATORS_MASK; 108 + } 109 + EXPORT_SYMBOL_GPL(adf_gen4_get_accel_mask); 110 + 111 + u32 adf_gen4_get_num_accels(struct adf_hw_device_data *self) 112 + { 113 + return ADF_GEN4_MAX_ACCELERATORS; 114 + } 115 + EXPORT_SYMBOL_GPL(adf_gen4_get_num_accels); 116 + 117 + u32 adf_gen4_get_num_aes(struct adf_hw_device_data *self) 118 + { 119 + if (!self || !self->ae_mask) 120 + return 0; 121 + 122 + return hweight32(self->ae_mask); 123 + } 124 + EXPORT_SYMBOL_GPL(adf_gen4_get_num_aes); 125 + 126 + u32 adf_gen4_get_misc_bar_id(struct adf_hw_device_data *self) 127 + { 128 + return ADF_GEN4_PMISC_BAR; 129 + } 130 + EXPORT_SYMBOL_GPL(adf_gen4_get_misc_bar_id); 131 + 132 + u32 adf_gen4_get_etr_bar_id(struct adf_hw_device_data *self) 133 + { 134 + return ADF_GEN4_ETR_BAR; 135 + } 136 + EXPORT_SYMBOL_GPL(adf_gen4_get_etr_bar_id); 137 + 138 + u32 adf_gen4_get_sram_bar_id(struct adf_hw_device_data *self) 139 + { 140 + return ADF_GEN4_SRAM_BAR; 141 + } 142 + EXPORT_SYMBOL_GPL(adf_gen4_get_sram_bar_id); 143 + 144 + enum dev_sku_info adf_gen4_get_sku(struct adf_hw_device_data *self) 145 + { 146 + return DEV_SKU_1; 147 + } 148 + EXPORT_SYMBOL_GPL(adf_gen4_get_sku); 149 + 150 + void adf_gen4_get_arb_info(struct arb_info *arb_info) 151 + { 152 + arb_info->arb_cfg = ADF_GEN4_ARB_CONFIG; 153 + arb_info->arb_offset = ADF_GEN4_ARB_OFFSET; 154 + arb_info->wt2sam_offset = ADF_GEN4_ARB_WRK_2_SER_MAP_OFFSET; 155 + } 156 + EXPORT_SYMBOL_GPL(adf_gen4_get_arb_info); 157 + 158 + void adf_gen4_get_admin_info(struct admin_info *admin_csrs_info) 159 + { 160 + admin_csrs_info->mailbox_offset = ADF_GEN4_MAILBOX_BASE_OFFSET; 161 + admin_csrs_info->admin_msg_ur = ADF_GEN4_ADMINMSGUR_OFFSET; 162 + admin_csrs_info->admin_msg_lr = ADF_GEN4_ADMINMSGLR_OFFSET; 163 + } 164 + EXPORT_SYMBOL_GPL(adf_gen4_get_admin_info); 165 + 166 + u32 adf_gen4_get_heartbeat_clock(struct adf_hw_device_data *self) 167 + { 168 + /* 169 + * GEN4 uses KPT counter for HB 170 + */ 171 + return ADF_GEN4_KPT_COUNTER_FREQ; 172 + } 173 + EXPORT_SYMBOL_GPL(adf_gen4_get_heartbeat_clock); 174 + 175 + void adf_gen4_enable_error_correction(struct adf_accel_dev *accel_dev) 176 + { 177 + struct adf_bar *misc_bar = &GET_BARS(accel_dev)[ADF_GEN4_PMISC_BAR]; 178 + void __iomem *csr = misc_bar->virt_addr; 179 + 180 + /* Enable all in errsou3 except VFLR notification on host */ 181 + ADF_CSR_WR(csr, ADF_GEN4_ERRMSK3, ADF_GEN4_VFLNOTIFY); 182 + } 183 + EXPORT_SYMBOL_GPL(adf_gen4_enable_error_correction); 184 + 185 + void adf_gen4_enable_ints(struct adf_accel_dev *accel_dev) 186 + { 187 + void __iomem *addr; 188 + 189 + addr = (&GET_BARS(accel_dev)[ADF_GEN4_PMISC_BAR])->virt_addr; 190 + 191 + /* Enable bundle interrupts */ 192 + ADF_CSR_WR(addr, ADF_GEN4_SMIAPF_RP_X0_MASK_OFFSET, 0); 193 + ADF_CSR_WR(addr, ADF_GEN4_SMIAPF_RP_X1_MASK_OFFSET, 0); 194 + 195 + /* Enable misc interrupts */ 196 + ADF_CSR_WR(addr, ADF_GEN4_SMIAPF_MASK_OFFSET, 0); 197 + } 198 + EXPORT_SYMBOL_GPL(adf_gen4_enable_ints); 199 + 200 + int adf_gen4_init_device(struct adf_accel_dev *accel_dev) 201 + { 202 + void __iomem *addr; 203 + u32 status; 204 + u32 csr; 205 + int ret; 206 + 207 + addr = (&GET_BARS(accel_dev)[ADF_GEN4_PMISC_BAR])->virt_addr; 208 + 209 + /* Temporarily mask PM interrupt */ 210 + csr = ADF_CSR_RD(addr, ADF_GEN4_ERRMSK2); 211 + csr |= ADF_GEN4_PM_SOU; 212 + ADF_CSR_WR(addr, ADF_GEN4_ERRMSK2, csr); 213 + 214 + /* Set DRV_ACTIVE bit to power up the device */ 215 + ADF_CSR_WR(addr, ADF_GEN4_PM_INTERRUPT, ADF_GEN4_PM_DRV_ACTIVE); 216 + 217 + /* Poll status register to make sure the device is powered up */ 218 + ret = read_poll_timeout(ADF_CSR_RD, status, 219 + status & ADF_GEN4_PM_INIT_STATE, 220 + ADF_GEN4_PM_POLL_DELAY_US, 221 + ADF_GEN4_PM_POLL_TIMEOUT_US, true, addr, 222 + ADF_GEN4_PM_STATUS); 223 + if (ret) 224 + dev_err(&GET_DEV(accel_dev), "Failed to power up the device\n"); 225 + 226 + return ret; 227 + } 228 + EXPORT_SYMBOL_GPL(adf_gen4_init_device); 229 + 106 230 static inline void adf_gen4_unpack_ssm_wdtimer(u64 value, u32 *upper, 107 231 u32 *lower) 108 232 { ··· 260 134 ADF_CSR_WR(pmisc_addr, ADF_SSMWDTPKEH_OFFSET, ssm_wdt_pke_high); 261 135 } 262 136 EXPORT_SYMBOL_GPL(adf_gen4_set_ssm_wdtimer); 137 + 138 + /* 139 + * The vector routing table is used to select the MSI-X entry to use for each 140 + * interrupt source. 141 + * The first ADF_GEN4_ETR_MAX_BANKS entries correspond to ring interrupts. 142 + * The final entry corresponds to VF2PF or error interrupts. 143 + * This vector table could be used to configure one MSI-X entry to be shared 144 + * between multiple interrupt sources. 145 + * 146 + * The default routing is set to have a one to one correspondence between the 147 + * interrupt source and the MSI-X entry used. 148 + */ 149 + void adf_gen4_set_msix_default_rttable(struct adf_accel_dev *accel_dev) 150 + { 151 + void __iomem *csr; 152 + int i; 153 + 154 + csr = (&GET_BARS(accel_dev)[ADF_GEN4_PMISC_BAR])->virt_addr; 155 + for (i = 0; i <= ADF_GEN4_ETR_MAX_BANKS; i++) 156 + ADF_CSR_WR(csr, ADF_GEN4_MSIX_RTTABLE_OFFSET(i), i); 157 + } 158 + EXPORT_SYMBOL_GPL(adf_gen4_set_msix_default_rttable); 263 159 264 160 int adf_pfvf_comms_disabled(struct adf_accel_dev *accel_dev) 265 161 {
+72
drivers/crypto/intel/qat/qat_common/adf_gen4_hw_data.h
··· 3 3 #ifndef ADF_GEN4_HW_CSR_DATA_H_ 4 4 #define ADF_GEN4_HW_CSR_DATA_H_ 5 5 6 + #include <linux/units.h> 7 + 6 8 #include "adf_accel_devices.h" 7 9 #include "adf_cfg_common.h" 10 + 11 + /* PCIe configuration space */ 12 + #define ADF_GEN4_BAR_MASK (BIT(0) | BIT(2) | BIT(4)) 13 + #define ADF_GEN4_SRAM_BAR 0 14 + #define ADF_GEN4_PMISC_BAR 1 15 + #define ADF_GEN4_ETR_BAR 2 16 + 17 + /* Clocks frequency */ 18 + #define ADF_GEN4_KPT_COUNTER_FREQ (100 * HZ_PER_MHZ) 19 + 20 + /* Physical function fuses */ 21 + #define ADF_GEN4_FUSECTL0_OFFSET 0x2C8 22 + #define ADF_GEN4_FUSECTL1_OFFSET 0x2CC 23 + #define ADF_GEN4_FUSECTL2_OFFSET 0x2D0 24 + #define ADF_GEN4_FUSECTL3_OFFSET 0x2D4 25 + #define ADF_GEN4_FUSECTL4_OFFSET 0x2D8 26 + #define ADF_GEN4_FUSECTL5_OFFSET 0x2DC 27 + 28 + /* Accelerators */ 29 + #define ADF_GEN4_ACCELERATORS_MASK 0x1 30 + #define ADF_GEN4_MAX_ACCELERATORS 1 31 + 32 + /* MSIX interrupt */ 33 + #define ADF_GEN4_SMIAPF_RP_X0_MASK_OFFSET 0x41A040 34 + #define ADF_GEN4_SMIAPF_RP_X1_MASK_OFFSET 0x41A044 35 + #define ADF_GEN4_SMIAPF_MASK_OFFSET 0x41A084 36 + #define ADF_GEN4_MSIX_RTTABLE_OFFSET(i) (0x409000 + ((i) * 0x04)) 37 + 38 + /* Bank and ring configuration */ 39 + #define ADF_GEN4_NUM_RINGS_PER_BANK 2 40 + #define ADF_GEN4_NUM_BANKS_PER_VF 4 41 + #define ADF_GEN4_ETR_MAX_BANKS 64 42 + #define ADF_GEN4_RX_RINGS_OFFSET 1 43 + #define ADF_GEN4_TX_RINGS_MASK 0x1 44 + 45 + /* Arbiter configuration */ 46 + #define ADF_GEN4_ARB_CONFIG (BIT(31) | BIT(6) | BIT(0)) 47 + #define ADF_GEN4_ARB_OFFSET 0x0 48 + #define ADF_GEN4_ARB_WRK_2_SER_MAP_OFFSET 0x400 49 + 50 + /* Admin Interface Reg Offset */ 51 + #define ADF_GEN4_ADMINMSGUR_OFFSET 0x500574 52 + #define ADF_GEN4_ADMINMSGLR_OFFSET 0x500578 53 + #define ADF_GEN4_MAILBOX_BASE_OFFSET 0x600970 8 54 9 55 /* Transport access */ 10 56 #define ADF_BANK_INT_SRC_SEL_MASK 0x44UL ··· 193 147 #define ADF_GEN4_RL_TOKEN_PCIEOUT_BUCKET_OFFSET 0x508804 194 148 195 149 void adf_gen4_set_ssm_wdtimer(struct adf_accel_dev *accel_dev); 150 + 151 + enum icp_qat_gen4_slice_mask { 152 + ICP_ACCEL_GEN4_MASK_CIPHER_SLICE = BIT(0), 153 + ICP_ACCEL_GEN4_MASK_AUTH_SLICE = BIT(1), 154 + ICP_ACCEL_GEN4_MASK_PKE_SLICE = BIT(2), 155 + ICP_ACCEL_GEN4_MASK_COMPRESS_SLICE = BIT(3), 156 + ICP_ACCEL_GEN4_MASK_UCS_SLICE = BIT(4), 157 + ICP_ACCEL_GEN4_MASK_EIA3_SLICE = BIT(5), 158 + ICP_ACCEL_GEN4_MASK_SMX_SLICE = BIT(7), 159 + }; 160 + 161 + void adf_gen4_enable_error_correction(struct adf_accel_dev *accel_dev); 162 + void adf_gen4_enable_ints(struct adf_accel_dev *accel_dev); 163 + u32 adf_gen4_get_accel_mask(struct adf_hw_device_data *self); 164 + void adf_gen4_get_admin_info(struct admin_info *admin_csrs_info); 165 + void adf_gen4_get_arb_info(struct arb_info *arb_info); 166 + u32 adf_gen4_get_etr_bar_id(struct adf_hw_device_data *self); 167 + u32 adf_gen4_get_heartbeat_clock(struct adf_hw_device_data *self); 168 + u32 adf_gen4_get_misc_bar_id(struct adf_hw_device_data *self); 169 + u32 adf_gen4_get_num_accels(struct adf_hw_device_data *self); 170 + u32 adf_gen4_get_num_aes(struct adf_hw_device_data *self); 171 + enum dev_sku_info adf_gen4_get_sku(struct adf_hw_device_data *self); 172 + u32 adf_gen4_get_sram_bar_id(struct adf_hw_device_data *self); 173 + int adf_gen4_init_device(struct adf_accel_dev *accel_dev); 196 174 void adf_gen4_init_hw_csr_ops(struct adf_hw_csr_ops *csr_ops); 197 175 int adf_gen4_ring_pair_reset(struct adf_accel_dev *accel_dev, u32 bank_number); 176 + void adf_gen4_set_msix_default_rttable(struct adf_accel_dev *accel_dev); 177 + void adf_gen4_set_ssm_wdtimer(struct adf_accel_dev *accel_dev); 198 178 #endif