Skip to content

Commit 93cebeb

Browse files
intmcherbertx
authored andcommitted
crypto: qat - add capability detection logic in qat_4xxx
Add logic to detect device capabilities in qat_4xxx driver. Read fuses and build the device capabilities mask. This will enable services and handling specific to QAT 4xxx devices. Co-developed-by: Tomaszx Kowalik <[email protected]> Signed-off-by: Tomaszx Kowalik <[email protected]> Signed-off-by: Marco Chiappero <[email protected]> Reviewed-by: Giovanni Cabiddu <[email protected]> Signed-off-by: Giovanni Cabiddu <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 5106dfe commit 93cebeb

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <adf_pf2vf_msg.h>
66
#include <adf_gen4_hw_data.h>
77
#include "adf_4xxx_hw_data.h"
8+
#include "icp_qat_hw.h"
89

910
struct adf_fw_config {
1011
u32 ae_mask;
@@ -91,6 +92,28 @@ static void set_msix_default_rttable(struct adf_accel_dev *accel_dev)
9192
ADF_CSR_WR(csr, ADF_4XXX_MSIX_RTTABLE_OFFSET(i), i);
9293
}
9394

95+
static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
96+
{
97+
struct pci_dev *pdev = accel_dev->accel_pci_dev.pci_dev;
98+
u32 fusectl1;
99+
u32 capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
100+
ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
101+
ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
102+
ICP_ACCEL_CAPABILITIES_AES_V2;
103+
104+
/* Read accelerator capabilities mask */
105+
pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1);
106+
107+
if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE)
108+
capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
109+
if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE)
110+
capabilities &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
111+
if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE)
112+
capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
113+
114+
return capabilities;
115+
}
116+
94117
static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
95118
{
96119
return DEV_SKU_1;
@@ -189,6 +212,7 @@ void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data)
189212
hw_data->get_misc_bar_id = get_misc_bar_id;
190213
hw_data->get_arb_info = get_arb_info;
191214
hw_data->get_admin_info = get_admin_info;
215+
hw_data->get_accel_cap = get_accel_cap;
192216
hw_data->get_sku = get_sku;
193217
hw_data->fw_name = ADF_4XXX_FW;
194218
hw_data->fw_mmp_name = ADF_4XXX_MMP;

drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,17 @@
6969
#define ADF_4XXX_ASYM_OBJ "qat_4xxx_asym.bin"
7070
#define ADF_4XXX_ADMIN_OBJ "qat_4xxx_admin.bin"
7171

72+
/* qat_4xxx fuse bits are different from old GENs, redefine them */
73+
enum icp_qat_4xxx_slice_mask {
74+
ICP_ACCEL_4XXX_MASK_CIPHER_SLICE = BIT(0),
75+
ICP_ACCEL_4XXX_MASK_AUTH_SLICE = BIT(1),
76+
ICP_ACCEL_4XXX_MASK_PKE_SLICE = BIT(2),
77+
ICP_ACCEL_4XXX_MASK_COMPRESS_SLICE = BIT(3),
78+
ICP_ACCEL_4XXX_MASK_UCS_SLICE = BIT(4),
79+
ICP_ACCEL_4XXX_MASK_EIA3_SLICE = BIT(5),
80+
ICP_ACCEL_4XXX_MASK_SMX_SLICE = BIT(6),
81+
};
82+
7283
void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data);
7384
void adf_clean_hw_data_4xxx(struct adf_hw_device_data *hw_data);
7485

drivers/crypto/qat/qat_4xxx/adf_drv.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ static int adf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
233233
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
234234
}
235235

236+
/* Get accelerator capabilities mask */
237+
hw_data->accel_capabilities_mask = hw_data->get_accel_cap(accel_dev);
238+
236239
/* Find and map all the device's BARS */
237240
bar_mask = pci_select_bars(pdev, IORESOURCE_MEM) & ADF_4XXX_BAR_MASK;
238241

0 commit comments

Comments
 (0)