Torsten Duwe c3023c
From 4b44d28c715d3db2c8de1e4ec9ccfdf230001007 Mon Sep 17 00:00:00 2001
Torsten Duwe c3023c
From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe c3023c
Date: Thu, 16 Dec 2021 09:13:14 +0000
Torsten Duwe c3023c
Subject: [PATCH] crypto: qat - extend crypto capability detection for 4xxx
Torsten Duwe c3023c
Git-commit: 4b44d28c715d3db2c8de1e4ec9ccfdf230001007
Torsten Duwe c3023c
Patch-mainline: v5.17-rc1
Torsten Duwe c3023c
References: jsc#PED-1073
Torsten Duwe c3023c
Torsten Duwe c3023c
Extended the capability detection logic for 4xxx devices.
Torsten Duwe c3023c
Mask out unsupported algorithms and services based on the value read in
Torsten Duwe c3023c
the fuse register.
Torsten Duwe c3023c
Torsten Duwe c3023c
This includes only capabilities for the crypto service.
Torsten Duwe c3023c
Torsten Duwe c3023c
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe c3023c
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe c3023c
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
Torsten Duwe c3023c
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe c3023c
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe c3023c
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe c3023c
Torsten Duwe c3023c
---
Torsten Duwe c3023c
 .../crypto/qat/qat_4xxx/adf_4xxx_hw_data.c    | 29 +++++++++++++++++--
Torsten Duwe c3023c
 drivers/crypto/qat/qat_common/icp_qat_hw.h    |  9 +++++-
Torsten Duwe c3023c
 2 files changed, 34 insertions(+), 4 deletions(-)
Torsten Duwe c3023c
Torsten Duwe c3023c
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 c3023c
index 4658b7bf76da1..d320c50c4561c 100644
Torsten Duwe c3023c
--- a/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe c3023c
+++ b/drivers/crypto/qat/qat_4xxx/adf_4xxx_hw_data.c
Torsten Duwe c3023c
@@ -98,18 +98,41 @@ static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
Torsten Duwe c3023c
 	u32 fusectl1;
Torsten Duwe c3023c
 	u32 capabilities = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
Torsten Duwe c3023c
 			   ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_CIPHER |
Torsten Duwe c3023c
 			   ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_SHA3 |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_SHA3_EXT |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_HKDF |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_ECEDMONT |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_CHACHA_POLY |
Torsten Duwe c3023c
+			   ICP_ACCEL_CAPABILITIES_AESGCM_SPC |
Torsten Duwe c3023c
 			   ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c3023c
 
Torsten Duwe c3023c
 	/* Read accelerator capabilities mask */
Torsten Duwe c3023c
 	pci_read_config_dword(pdev, ADF_4XXX_FUSECTL1_OFFSET, &fusectl1);
Torsten Duwe c3023c
 
Torsten Duwe c3023c
-	if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE)
Torsten Duwe c3023c
+	/* A set bit in fusectl1 means the feature is OFF in this SKU */
Torsten Duwe c3023c
+	if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE) {
Torsten Duwe c3023c
 		capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
Torsten Duwe c3023c
-	if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE)
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_HKDF;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c3023c
+	}
Torsten Duwe c3023c
+	if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE) {
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_AES_V2;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c3023c
+	}
Torsten Duwe c3023c
+	if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE) {
Torsten Duwe c3023c
 		capabilities &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION;
Torsten Duwe c3023c
-	if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE)
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_CIPHER;
Torsten Duwe c3023c
+	}
Torsten Duwe c3023c
+	if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE) {
Torsten Duwe c3023c
 		capabilities &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
Torsten Duwe c3023c
+		capabilities &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT;
Torsten Duwe c3023c
+	}
Torsten Duwe c3023c
 
Torsten Duwe c3023c
 	return capabilities;
Torsten Duwe c3023c
 }
Torsten Duwe c3023c
diff --git a/drivers/crypto/qat/qat_common/icp_qat_hw.h b/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c3023c
index e39e8a2d51a73..5770b2b2c09e5 100644
Torsten Duwe c3023c
--- a/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c3023c
+++ b/drivers/crypto/qat/qat_common/icp_qat_hw.h
Torsten Duwe c3023c
@@ -91,7 +91,14 @@ enum icp_qat_capabilities_mask {
Torsten Duwe c3023c
 	ICP_ACCEL_CAPABILITIES_RAND = BIT(7),
Torsten Duwe c3023c
 	ICP_ACCEL_CAPABILITIES_ZUC = BIT(8),
Torsten Duwe c3023c
 	ICP_ACCEL_CAPABILITIES_SHA3 = BIT(9),
Torsten Duwe c3023c
-	/* Bits 10-25 are currently reserved */
Torsten Duwe c3023c
+	/* Bits 10-11 are currently reserved */
Torsten Duwe c3023c
+	ICP_ACCEL_CAPABILITIES_HKDF = BIT(12),
Torsten Duwe c3023c
+	ICP_ACCEL_CAPABILITIES_ECEDMONT = BIT(13),
Torsten Duwe c3023c
+	/* Bit 14 is currently reserved */
Torsten Duwe c3023c
+	ICP_ACCEL_CAPABILITIES_SHA3_EXT = BIT(15),
Torsten Duwe c3023c
+	ICP_ACCEL_CAPABILITIES_AESGCM_SPC = BIT(16),
Torsten Duwe c3023c
+	ICP_ACCEL_CAPABILITIES_CHACHA_POLY = BIT(17),
Torsten Duwe c3023c
+	/* Bits 18-25 are currently reserved */
Torsten Duwe c3023c
 	ICP_ACCEL_CAPABILITIES_AES_V2 = BIT(26)
Torsten Duwe c3023c
 };
Torsten Duwe c3023c
 
Torsten Duwe c3023c
-- 
Torsten Duwe c3023c
2.35.3
Torsten Duwe c3023c