mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
crypto: qat - add support for zstd
Add support for the ZSTD algorithm for QAT GEN4, GEN5 and GEN6 via the acomp API. For GEN4 and GEN5, compression is performed in hardware using LZ4s, a QAT-specific variant of LZ4. The compressed output is post-processed to generate ZSTD sequences, and the ZSTD library is then used to produce the final ZSTD stream via zstd_compress_sequences_and_literals(). Only inputs between 8 KB and 512 KB are offloaded to the device. The minimum size restriction will be relaxed once polling support is added. The maximum size is limited by the use of pre-allocated per-CPU scratch buffers. On these generations, only compression is offloaded to hardware; decompression always falls back to software. For GEN6, both compression and decompression are offloaded to the accelerator, which natively supports the ZSTD algorithm. There is no limit on the input buffer size supported. However, since GEN6 is limited to a history size of 64 KB, decompression of frames compressed with a larger history falls back to software. Since GEN2 devices do not support ZSTD or LZ4s, add a mechanism that prevents selecting GEN2 compression instances for ZSTD or LZ4s when a GEN2 plug-in card is present on a system with an embedded GEN4, GEN5 or GEN6 device. In addition, modify the algorithm registration logic to allow registering the correct implementation, i.e. LZ4s based for GEN4 and GEN5 or native ZSTD for GEN6. Co-developed-by: Suman Kumar Chakraborty <suman.kumar.chakraborty@intel.com> Signed-off-by: Suman Kumar Chakraborty <suman.kumar.chakraborty@intel.com> Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Laurent M Coquerel <laurent.m.coquerel@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
committed by
Herbert Xu
parent
35ecb77ae0
commit
879a4f78ea
@@ -59,6 +59,11 @@ enum adf_accel_capabilities {
|
||||
ADF_ACCEL_CAPABILITIES_RANDOM_NUMBER = 128
|
||||
};
|
||||
|
||||
enum adf_accel_capabilities_ext {
|
||||
ADF_ACCEL_CAPABILITIES_EXT_ZSTD_LZ4S = BIT(0),
|
||||
ADF_ACCEL_CAPABILITIES_EXT_ZSTD = BIT(1),
|
||||
};
|
||||
|
||||
enum adf_fuses {
|
||||
ADF_FUSECTL0,
|
||||
ADF_FUSECTL1,
|
||||
@@ -336,6 +341,7 @@ struct adf_hw_device_data {
|
||||
u32 fuses[ADF_MAX_FUSES];
|
||||
u32 straps;
|
||||
u32 accel_capabilities_mask;
|
||||
u32 accel_capabilities_ext_mask;
|
||||
u32 extended_dc_capabilities;
|
||||
u16 fw_capabilities;
|
||||
u32 clock_frequency;
|
||||
|
||||
Reference in New Issue
Block a user