Torsten Duwe c7713f
From beb1e6d71f0ef906ff986710fdd4ad4fc1542302 Mon Sep 17 00:00:00 2001
Torsten Duwe c7713f
From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe c7713f
Date: Thu, 16 Dec 2021 09:13:33 +0000
Torsten Duwe c7713f
Subject: [PATCH] crypto: qat - allow detection of dc capabilities for 4xxx
Torsten Duwe c7713f
Git-commit: beb1e6d71f0ef906ff986710fdd4ad4fc1542302
Torsten Duwe c7713f
Patch-mainline: v5.17-rc1
Torsten Duwe c7713f
References: jsc#PED-1073
Torsten Duwe c7713f
Torsten Duwe c7713f
Add logic to allow the detection of data compression capabilities for
Torsten Duwe c7713f
4xxx devices.
Torsten Duwe c7713f
The capability detection logic has been refactored to separate the
Torsten Duwe c7713f
crypto capabilities from the compression ones.
Torsten Duwe c7713f
Torsten Duwe c7713f
This patch is not updating the returned capability mask as, up to now,
Torsten Duwe c7713f
4xxx devices are configured only to handle crypto operations.
Torsten Duwe c7713f
Torsten Duwe c7713f
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe c7713f
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe c7713f
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Torsten Duwe c7713f
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe c7713f
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe c7713f
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe c7713f
Torsten Duwe c7713f
---
Torsten Duwe c7713f
 .../crypto/qat/qat_4xxx/adf_4xxx_hw_data.c    | 64 +++++++++++--------
Torsten Duwe c7713f
 drivers/crypto/qat/qat_common/icp_qat_hw.h    |  6 +-
Torsten Duwe c7713f
 2 files changed, 44 insertions(+), 26 deletions(-)
Torsten Duwe c7713f
Torsten Duwe c7713f
diff --git a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe c7713f
index ef71aa4efd646..40f684103b293 100644
Torsten Duwe c7713f
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe c7713f
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe c7713f
@@ -96,46 +96,60 @@ static void set_msix_default_rttable(struct adf_accel_dev *accel_dev)
Torsten Duwe c7713f
 static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
Torsten Duwe c7713f
 {
Torsten Duwe c7713f
 	struct pci_dev *pdev = accel_dev->accel_pci_dev.pci_dev;
Torsten Duwe c7713f
+	u32 capabilities_cy, capabilities_dc;
Torsten Duwe c7713f
 	u32 fusectl1;
Torsten Duwe c7713f
-	u32 capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_CIPHER |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_SHA3 |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_SHA3_EXT |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_HKDF |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_ECEDMONT |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_CHACHA_POLY |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_AESGCM_SPC |
Torsten Duwe c7713f
-			   ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c7713f
 
Torsten Duwe c7713f
 	/* Read accelerator capabilities mask */
Torsten Duwe c7713f
 	pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1);
Torsten Duwe c7713f
 
Torsten Duwe c7713f
+	capabilities_cy = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_CIPHER |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_SHA3 |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_SHA3_EXT |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_HKDF |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_ECEDMONT |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_CHACHA_POLY |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_AESGCM_SPC |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c7713f
+
Torsten Duwe c7713f
 	/* A set bit in fusectl1 means the feature is OFF in this SKU */
Torsten Duwe c7713f
 	if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE) {
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_HKDF;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_HKDF;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
 	}
Torsten Duwe c7713f
 	if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE) {
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
 	}
Torsten Duwe c7713f
 	if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE) {
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c7713f
 	}
Torsten Duwe c7713f
 	if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE) {
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
Torsten Duwe c7713f
-		capabilities &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
Torsten Duwe c7713f
+		capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT;
Torsten Duwe c7713f
+	}
Torsten Duwe c7713f
+
Torsten Duwe c7713f
+	capabilities_dc = ICP_ACCEL_CAPABILITIES_COMPRESSION |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION |
Torsten Duwe c7713f
+			  ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64;
Torsten Duwe c7713f
+
Torsten Duwe c7713f
+	if (fusectl1 & ICP_ACCEL_4XXX_MASK_COMPRESS_SLICE) {
Torsten Duwe c7713f
+		capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_COMPRESSION;
Torsten Duwe c7713f
+		capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION;
Torsten Duwe c7713f
+		capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION;
Torsten Duwe c7713f
+		capabilities_dc &= ~ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64;
Torsten Duwe c7713f
 	}
Torsten Duwe c7713f
 
Torsten Duwe c7713f
-	return capabilities;
Torsten Duwe c7713f
+	return capabilities_cy;
Torsten Duwe c7713f
 }
Torsten Duwe c7713f
 
Torsten Duwe c7713f
 static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
Torsten Duwe c7713f
diff --git a/drivers/crypto/qat/qat_common/icp_qat_hw.h b/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c7713f
index 5770b2b2c09e5..433304cad2edf 100644
Torsten Duwe c7713f
--- a/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c7713f
+++ b/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c7713f
@@ -98,7 +98,11 @@ enum icp_qat_capabilities_mask {
Torsten Duwe c7713f
 	ICP_ACCEL_CAPABILITIES_SHA3_EXT = BIT(15),
Torsten Duwe c7713f
 	ICP_ACCEL_CAPABILITIES_AESGCM_SPC = BIT(16),
Torsten Duwe c7713f
 	ICP_ACCEL_CAPABILITIES_CHACHA_POLY = BIT(17),
Torsten Duwe c7713f
-	/* Bits 18-25 are currently reserved */
Torsten Duwe c7713f
+	/* Bits 18-21 are currently reserved */
Torsten Duwe c7713f
+	ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY = BIT(22),
Torsten Duwe c7713f
+	ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64 = BIT(23),
Torsten Duwe c7713f
+	ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION = BIT(24),
Torsten Duwe c7713f
+	ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION = BIT(25),
Torsten Duwe c7713f
 	ICP_ACCEL_CAPABILITIES_AES_V2 = BIT(26)
Torsten Duwe c7713f
 };
Torsten Duwe c7713f
 
Torsten Duwe c7713f
-- 
Torsten Duwe c7713f
2.35.3
Torsten Duwe c7713f