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

crypto: qat - allow detection of dc capabilities for 4xxx

Add logic to allow the detection of data compression capabilities for
4xxx devices.
The capability detection logic has been refactored to separate the
crypto capabilities from the compression ones.

This patch is not updating the returned capability mask as, up to now,
4xxx devices are configured only to handle crypto operations.

Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Giovanni Cabiddu and committed by
Herbert Xu
beb1e6d7 0bba03ce

+44 -26
+39 -25
drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
··· 96 96 static u32 get_accel_cap(struct adf_accel_dev *accel_dev) 97 97 { 98 98 struct pci_dev *pdev = accel_dev->accel_pci_dev.pci_dev; 99 + u32 capabilities_cy, capabilities_dc; 99 100 u32 fusectl1; 100 - u32 capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC | 101 - ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC | 102 - ICP_ACCEL_CAPABILITIES_CIPHER | 103 - ICP_ACCEL_CAPABILITIES_AUTHENTICATION | 104 - ICP_ACCEL_CAPABILITIES_SHA3 | 105 - ICP_ACCEL_CAPABILITIES_SHA3_EXT | 106 - ICP_ACCEL_CAPABILITIES_HKDF | 107 - ICP_ACCEL_CAPABILITIES_ECEDMONT | 108 - ICP_ACCEL_CAPABILITIES_CHACHA_POLY | 109 - ICP_ACCEL_CAPABILITIES_AESGCM_SPC | 110 - ICP_ACCEL_CAPABILITIES_AES_V2; 111 101 112 102 /* Read accelerator capabilities mask */ 113 103 pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1); 114 104 105 + capabilities_cy = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC | 106 + ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC | 107 + ICP_ACCEL_CAPABILITIES_CIPHER | 108 + ICP_ACCEL_CAPABILITIES_AUTHENTICATION | 109 + ICP_ACCEL_CAPABILITIES_SHA3 | 110 + ICP_ACCEL_CAPABILITIES_SHA3_EXT | 111 + ICP_ACCEL_CAPABILITIES_HKDF | 112 + ICP_ACCEL_CAPABILITIES_ECEDMONT | 113 + ICP_ACCEL_CAPABILITIES_CHACHA_POLY | 114 + ICP_ACCEL_CAPABILITIES_AESGCM_SPC | 115 + ICP_ACCEL_CAPABILITIES_AES_V2; 116 + 115 117 /* A set bit in fusectl1 means the feature is OFF in this SKU */ 116 118 if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE) { 117 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC; 118 - capabilities &= ~ICP_ACCEL_CAPABILITIES_HKDF; 119 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 119 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC; 120 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_HKDF; 121 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 120 122 } 121 123 if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE) { 122 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY; 123 - capabilities &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC; 124 - capabilities &= ~ICP_ACCEL_CAPABILITIES_AES_V2; 125 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 124 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY; 125 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC; 126 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AES_V2; 127 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 126 128 } 127 129 if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE) { 128 - capabilities &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION; 129 - capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3; 130 - capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT; 131 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 130 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION; 131 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3; 132 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT; 133 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER; 132 134 } 133 135 if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE) { 134 - capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC; 135 - capabilities &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT; 136 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC; 137 + capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT; 136 138 } 137 139 138 - return capabilities; 140 + capabilities_dc = ICP_ACCEL_CAPABILITIES_COMPRESSION | 141 + ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION | 142 + ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION | 143 + ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64; 144 + 145 + if (fusectl1 & ICP_ACCEL_4XXX_MASK_COMPRESS_SLICE) { 146 + capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_COMPRESSION; 147 + capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION; 148 + capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION; 149 + capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64; 150 + } 151 + 152 + return capabilities_cy; 139 153 } 140 154 141 155 static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
+5 -1
drivers/crypto/qat/qat_common/icp_qat_hw.h
··· 98 98 ICP_ACCEL_CAPABILITIES_SHA3_EXT = BIT(15), 99 99 ICP_ACCEL_CAPABILITIES_AESGCM_SPC = BIT(16), 100 100 ICP_ACCEL_CAPABILITIES_CHACHA_POLY = BIT(17), 101 - /* Bits 18-25 are currently reserved */ 101 + /* Bits 18-21 are currently reserved */ 102 + ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY = BIT(22), 103 + ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64 = BIT(23), 104 + ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION = BIT(24), 105 + ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION = BIT(25), 102 106 ICP_ACCEL_CAPABILITIES_AES_V2 = BIT(26) 103 107 }; 104 108