aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/inside-secure
diff options
context:
space:
mode:
authorPascal van Leeuwen <pascalvanl@gmail.com>2019-08-30 03:40:54 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2019-09-05 00:37:01 -0400
commit062b64ca6db409fd6e102aed0fa59716b5cdfd78 (patch)
tree0de1abd004dae25cdab4444ca9557b0b392784f8 /drivers/crypto/inside-secure
parentc7da38a71cfbb5c0f20f84864a290b9450ad78e9 (diff)
crypto: inside-secure - Only enable algorithms advertised by the hardware
This patch probes the supported algorithms from the hardware and only registers the ones that the hardware actually supports. This is necessary because this is a generic driver supposed to run on a wide variety of engines, which may or may not implement certain algorithms. Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/inside-secure')
-rw-r--r--drivers/crypto/inside-secure/safexcel.c36
-rw-r--r--drivers/crypto/inside-secure/safexcel.h33
-rw-r--r--drivers/crypto/inside-secure/safexcel_cipher.c19
-rw-r--r--drivers/crypto/inside-secure/safexcel_hash.c12
4 files changed, 98 insertions, 2 deletions
diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
index 9941861ae1d8..25285d664581 100644
--- a/drivers/crypto/inside-secure/safexcel.c
+++ b/drivers/crypto/inside-secure/safexcel.c
@@ -284,7 +284,7 @@ retry_fw:
284 ipuesz = eip197_write_firmware(priv, fw[FW_IPUE]); 284 ipuesz = eip197_write_firmware(priv, fw[FW_IPUE]);
285 285
286 if (eip197_start_firmware(priv, ipuesz, ifppsz, minifw)) { 286 if (eip197_start_firmware(priv, ipuesz, ifppsz, minifw)) {
287 dev_dbg(priv->dev, "Firmware loaded successfully"); 287 dev_dbg(priv->dev, "Firmware loaded successfully\n");
288 return 0; 288 return 0;
289 } 289 }
290 290
@@ -1014,6 +1014,12 @@ static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv)
1014 for (i = 0; i < ARRAY_SIZE(safexcel_algs); i++) { 1014 for (i = 0; i < ARRAY_SIZE(safexcel_algs); i++) {
1015 safexcel_algs[i]->priv = priv; 1015 safexcel_algs[i]->priv = priv;
1016 1016
1017 /* Do we have all required base algorithms available? */
1018 if ((safexcel_algs[i]->algo_mask & priv->hwconfig.algo_flags) !=
1019 safexcel_algs[i]->algo_mask)
1020 /* No, so don't register this ciphersuite */
1021 continue;
1022
1017 if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_SKCIPHER) 1023 if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_SKCIPHER)
1018 ret = crypto_register_skcipher(&safexcel_algs[i]->alg.skcipher); 1024 ret = crypto_register_skcipher(&safexcel_algs[i]->alg.skcipher);
1019 else if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_AEAD) 1025 else if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_AEAD)
@@ -1029,6 +1035,12 @@ static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv)
1029 1035
1030fail: 1036fail:
1031 for (j = 0; j < i; j++) { 1037 for (j = 0; j < i; j++) {
1038 /* Do we have all required base algorithms available? */
1039 if ((safexcel_algs[j]->algo_mask & priv->hwconfig.algo_flags) !=
1040 safexcel_algs[j]->algo_mask)
1041 /* No, so don't unregister this ciphersuite */
1042 continue;
1043
1032 if (safexcel_algs[j]->type == SAFEXCEL_ALG_TYPE_SKCIPHER) 1044 if (safexcel_algs[j]->type == SAFEXCEL_ALG_TYPE_SKCIPHER)
1033 crypto_unregister_skcipher(&safexcel_algs[j]->alg.skcipher); 1045 crypto_unregister_skcipher(&safexcel_algs[j]->alg.skcipher);
1034 else if (safexcel_algs[j]->type == SAFEXCEL_ALG_TYPE_AEAD) 1046 else if (safexcel_algs[j]->type == SAFEXCEL_ALG_TYPE_AEAD)
@@ -1045,6 +1057,12 @@ static void safexcel_unregister_algorithms(struct safexcel_crypto_priv *priv)
1045 int i; 1057 int i;
1046 1058
1047 for (i = 0; i < ARRAY_SIZE(safexcel_algs); i++) { 1059 for (i = 0; i < ARRAY_SIZE(safexcel_algs); i++) {
1060 /* Do we have all required base algorithms available? */
1061 if ((safexcel_algs[i]->algo_mask & priv->hwconfig.algo_flags) !=
1062 safexcel_algs[i]->algo_mask)
1063 /* No, so don't unregister this ciphersuite */
1064 continue;
1065
1048 if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_SKCIPHER) 1066 if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_SKCIPHER)
1049 crypto_unregister_skcipher(&safexcel_algs[i]->alg.skcipher); 1067 crypto_unregister_skcipher(&safexcel_algs[i]->alg.skcipher);
1050 else if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_AEAD) 1068 else if (safexcel_algs[i]->type == SAFEXCEL_ALG_TYPE_AEAD)
@@ -1123,6 +1141,7 @@ static int safexcel_probe_generic(void *pdev,
1123 int is_pci_dev) 1141 int is_pci_dev)
1124{ 1142{
1125 struct device *dev = priv->dev; 1143 struct device *dev = priv->dev;
1144 u32 peid;
1126 int i, ret; 1145 int i, ret;
1127 1146
1128 priv->context_pool = dmam_pool_create("safexcel-context", dev, 1147 priv->context_pool = dmam_pool_create("safexcel-context", dev,
@@ -1133,8 +1152,21 @@ static int safexcel_probe_generic(void *pdev,
1133 1152
1134 safexcel_init_register_offsets(priv); 1153 safexcel_init_register_offsets(priv);
1135 1154
1136 if (priv->version != EIP97IES_MRVL) 1155 /* Get supported algorithms from EIP96 transform engine */
1156 priv->hwconfig.algo_flags = readl(EIP197_PE(priv) +
1157 EIP197_PE_EIP96_OPTIONS(0));
1158
1159 if (priv->version == EIP97IES_MRVL) {
1160 peid = 97;
1161 } else {
1137 priv->flags |= EIP197_TRC_CACHE; 1162 priv->flags |= EIP197_TRC_CACHE;
1163 peid = 197;
1164 }
1165
1166 /* Dump some debug information important during development */
1167 dev_dbg(priv->dev, "Inside Secure EIP%d packetengine\n", peid);
1168 dev_dbg(priv->dev, "Supported algorithms: %08x\n",
1169 priv->hwconfig.algo_flags);
1138 1170
1139 safexcel_configure(priv); 1171 safexcel_configure(priv);
1140 1172
diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h
index 0a30a7bf4fe0..b5ff62fa3044 100644
--- a/drivers/crypto/inside-secure/safexcel.h
+++ b/drivers/crypto/inside-secure/safexcel.h
@@ -145,6 +145,7 @@
145#define EIP197_PE_EIP96_FUNCTION_EN(n) (0x1004 + (0x2000 * (n))) 145#define EIP197_PE_EIP96_FUNCTION_EN(n) (0x1004 + (0x2000 * (n)))
146#define EIP197_PE_EIP96_CONTEXT_CTRL(n) (0x1008 + (0x2000 * (n))) 146#define EIP197_PE_EIP96_CONTEXT_CTRL(n) (0x1008 + (0x2000 * (n)))
147#define EIP197_PE_EIP96_CONTEXT_STAT(n) (0x100c + (0x2000 * (n))) 147#define EIP197_PE_EIP96_CONTEXT_STAT(n) (0x100c + (0x2000 * (n)))
148#define EIP197_PE_EIP96_OPTIONS(n) (0x13f8 + (0x2000 * (n)))
148#define EIP197_PE_OUT_DBUF_THRES(n) (0x1c00 + (0x2000 * (n))) 149#define EIP197_PE_OUT_DBUF_THRES(n) (0x1c00 + (0x2000 * (n)))
149#define EIP197_PE_OUT_TBUF_THRES(n) (0x1d00 + (0x2000 * (n))) 150#define EIP197_PE_OUT_TBUF_THRES(n) (0x1d00 + (0x2000 * (n)))
150#define EIP197_MST_CTRL 0xfff4 151#define EIP197_MST_CTRL 0xfff4
@@ -597,6 +598,32 @@ enum safexcel_eip_version {
597 EIP197_DEVBRD 598 EIP197_DEVBRD
598}; 599};
599 600
601/* EIP algorithm presence flags */
602enum safexcel_eip_algorithms {
603 SAFEXCEL_ALG_BC0 = BIT(5),
604 SAFEXCEL_ALG_SM4 = BIT(6),
605 SAFEXCEL_ALG_SM3 = BIT(7),
606 SAFEXCEL_ALG_CHACHA20 = BIT(8),
607 SAFEXCEL_ALG_POLY1305 = BIT(9),
608 SAFEXCEL_SEQMASK_256 = BIT(10),
609 SAFEXCEL_SEQMASK_384 = BIT(11),
610 SAFEXCEL_ALG_AES = BIT(12),
611 SAFEXCEL_ALG_AES_XFB = BIT(13),
612 SAFEXCEL_ALG_DES = BIT(15),
613 SAFEXCEL_ALG_DES_XFB = BIT(16),
614 SAFEXCEL_ALG_ARC4 = BIT(18),
615 SAFEXCEL_ALG_AES_XTS = BIT(20),
616 SAFEXCEL_ALG_WIRELESS = BIT(21),
617 SAFEXCEL_ALG_MD5 = BIT(22),
618 SAFEXCEL_ALG_SHA1 = BIT(23),
619 SAFEXCEL_ALG_SHA2_256 = BIT(25),
620 SAFEXCEL_ALG_SHA2_512 = BIT(26),
621 SAFEXCEL_ALG_XCBC_MAC = BIT(27),
622 SAFEXCEL_ALG_CBC_MAC_ALL = BIT(29),
623 SAFEXCEL_ALG_GHASH = BIT(30),
624 SAFEXCEL_ALG_SHA3 = BIT(31),
625};
626
600struct safexcel_register_offsets { 627struct safexcel_register_offsets {
601 u32 hia_aic; 628 u32 hia_aic;
602 u32 hia_aic_g; 629 u32 hia_aic_g;
@@ -614,6 +641,10 @@ enum safexcel_flags {
614 EIP197_TRC_CACHE = BIT(0), 641 EIP197_TRC_CACHE = BIT(0),
615}; 642};
616 643
644struct safexcel_hwconfig {
645 enum safexcel_eip_algorithms algo_flags;
646};
647
617struct safexcel_crypto_priv { 648struct safexcel_crypto_priv {
618 void __iomem *base; 649 void __iomem *base;
619 struct device *dev; 650 struct device *dev;
@@ -623,6 +654,7 @@ struct safexcel_crypto_priv {
623 654
624 enum safexcel_eip_version version; 655 enum safexcel_eip_version version;
625 struct safexcel_register_offsets offsets; 656 struct safexcel_register_offsets offsets;
657 struct safexcel_hwconfig hwconfig;
626 u32 flags; 658 u32 flags;
627 659
628 /* context DMA pool */ 660 /* context DMA pool */
@@ -667,6 +699,7 @@ struct safexcel_ahash_export_state {
667struct safexcel_alg_template { 699struct safexcel_alg_template {
668 struct safexcel_crypto_priv *priv; 700 struct safexcel_crypto_priv *priv;
669 enum safexcel_alg_type type; 701 enum safexcel_alg_type type;
702 enum safexcel_eip_algorithms algo_mask;
670 union { 703 union {
671 struct skcipher_alg skcipher; 704 struct skcipher_alg skcipher;
672 struct aead_alg aead; 705 struct aead_alg aead;
diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
index 05e34c62945c..e60e797b5719 100644
--- a/drivers/crypto/inside-secure/safexcel_cipher.c
+++ b/drivers/crypto/inside-secure/safexcel_cipher.c
@@ -1034,6 +1034,7 @@ static int safexcel_skcipher_aes_ecb_cra_init(struct crypto_tfm *tfm)
1034 1034
1035struct safexcel_alg_template safexcel_alg_ecb_aes = { 1035struct safexcel_alg_template safexcel_alg_ecb_aes = {
1036 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1036 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1037 .algo_mask = SAFEXCEL_ALG_AES,
1037 .alg.skcipher = { 1038 .alg.skcipher = {
1038 .setkey = safexcel_skcipher_aes_setkey, 1039 .setkey = safexcel_skcipher_aes_setkey,
1039 .encrypt = safexcel_encrypt, 1040 .encrypt = safexcel_encrypt,
@@ -1068,6 +1069,7 @@ static int safexcel_skcipher_aes_cbc_cra_init(struct crypto_tfm *tfm)
1068 1069
1069struct safexcel_alg_template safexcel_alg_cbc_aes = { 1070struct safexcel_alg_template safexcel_alg_cbc_aes = {
1070 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1071 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1072 .algo_mask = SAFEXCEL_ALG_AES,
1071 .alg.skcipher = { 1073 .alg.skcipher = {
1072 .setkey = safexcel_skcipher_aes_setkey, 1074 .setkey = safexcel_skcipher_aes_setkey,
1073 .encrypt = safexcel_encrypt, 1075 .encrypt = safexcel_encrypt,
@@ -1141,6 +1143,7 @@ static int safexcel_skcipher_aes_ctr_cra_init(struct crypto_tfm *tfm)
1141 1143
1142struct safexcel_alg_template safexcel_alg_ctr_aes = { 1144struct safexcel_alg_template safexcel_alg_ctr_aes = {
1143 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1145 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1146 .algo_mask = SAFEXCEL_ALG_AES,
1144 .alg.skcipher = { 1147 .alg.skcipher = {
1145 .setkey = safexcel_skcipher_aesctr_setkey, 1148 .setkey = safexcel_skcipher_aesctr_setkey,
1146 .encrypt = safexcel_encrypt, 1149 .encrypt = safexcel_encrypt,
@@ -1198,6 +1201,7 @@ static int safexcel_skcipher_des_cbc_cra_init(struct crypto_tfm *tfm)
1198 1201
1199struct safexcel_alg_template safexcel_alg_cbc_des = { 1202struct safexcel_alg_template safexcel_alg_cbc_des = {
1200 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1203 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1204 .algo_mask = SAFEXCEL_ALG_DES,
1201 .alg.skcipher = { 1205 .alg.skcipher = {
1202 .setkey = safexcel_des_setkey, 1206 .setkey = safexcel_des_setkey,
1203 .encrypt = safexcel_encrypt, 1207 .encrypt = safexcel_encrypt,
@@ -1233,6 +1237,7 @@ static int safexcel_skcipher_des_ecb_cra_init(struct crypto_tfm *tfm)
1233 1237
1234struct safexcel_alg_template safexcel_alg_ecb_des = { 1238struct safexcel_alg_template safexcel_alg_ecb_des = {
1235 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1239 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1240 .algo_mask = SAFEXCEL_ALG_DES,
1236 .alg.skcipher = { 1241 .alg.skcipher = {
1237 .setkey = safexcel_des_setkey, 1242 .setkey = safexcel_des_setkey,
1238 .encrypt = safexcel_encrypt, 1243 .encrypt = safexcel_encrypt,
@@ -1290,6 +1295,7 @@ static int safexcel_skcipher_des3_cbc_cra_init(struct crypto_tfm *tfm)
1290 1295
1291struct safexcel_alg_template safexcel_alg_cbc_des3_ede = { 1296struct safexcel_alg_template safexcel_alg_cbc_des3_ede = {
1292 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1297 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1298 .algo_mask = SAFEXCEL_ALG_DES,
1293 .alg.skcipher = { 1299 .alg.skcipher = {
1294 .setkey = safexcel_des3_ede_setkey, 1300 .setkey = safexcel_des3_ede_setkey,
1295 .encrypt = safexcel_encrypt, 1301 .encrypt = safexcel_encrypt,
@@ -1325,6 +1331,7 @@ static int safexcel_skcipher_des3_ecb_cra_init(struct crypto_tfm *tfm)
1325 1331
1326struct safexcel_alg_template safexcel_alg_ecb_des3_ede = { 1332struct safexcel_alg_template safexcel_alg_ecb_des3_ede = {
1327 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1333 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1334 .algo_mask = SAFEXCEL_ALG_DES,
1328 .alg.skcipher = { 1335 .alg.skcipher = {
1329 .setkey = safexcel_des3_ede_setkey, 1336 .setkey = safexcel_des3_ede_setkey,
1330 .encrypt = safexcel_encrypt, 1337 .encrypt = safexcel_encrypt,
@@ -1393,6 +1400,7 @@ static int safexcel_aead_sha1_cra_init(struct crypto_tfm *tfm)
1393 1400
1394struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_aes = { 1401struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_aes = {
1395 .type = SAFEXCEL_ALG_TYPE_AEAD, 1402 .type = SAFEXCEL_ALG_TYPE_AEAD,
1403 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA1,
1396 .alg.aead = { 1404 .alg.aead = {
1397 .setkey = safexcel_aead_setkey, 1405 .setkey = safexcel_aead_setkey,
1398 .encrypt = safexcel_aead_encrypt, 1406 .encrypt = safexcel_aead_encrypt,
@@ -1427,6 +1435,7 @@ static int safexcel_aead_sha256_cra_init(struct crypto_tfm *tfm)
1427 1435
1428struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_aes = { 1436struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_aes = {
1429 .type = SAFEXCEL_ALG_TYPE_AEAD, 1437 .type = SAFEXCEL_ALG_TYPE_AEAD,
1438 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_256,
1430 .alg.aead = { 1439 .alg.aead = {
1431 .setkey = safexcel_aead_setkey, 1440 .setkey = safexcel_aead_setkey,
1432 .encrypt = safexcel_aead_encrypt, 1441 .encrypt = safexcel_aead_encrypt,
@@ -1461,6 +1470,7 @@ static int safexcel_aead_sha224_cra_init(struct crypto_tfm *tfm)
1461 1470
1462struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_aes = { 1471struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_aes = {
1463 .type = SAFEXCEL_ALG_TYPE_AEAD, 1472 .type = SAFEXCEL_ALG_TYPE_AEAD,
1473 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_256,
1464 .alg.aead = { 1474 .alg.aead = {
1465 .setkey = safexcel_aead_setkey, 1475 .setkey = safexcel_aead_setkey,
1466 .encrypt = safexcel_aead_encrypt, 1476 .encrypt = safexcel_aead_encrypt,
@@ -1495,6 +1505,7 @@ static int safexcel_aead_sha512_cra_init(struct crypto_tfm *tfm)
1495 1505
1496struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_aes = { 1506struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_aes = {
1497 .type = SAFEXCEL_ALG_TYPE_AEAD, 1507 .type = SAFEXCEL_ALG_TYPE_AEAD,
1508 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_512,
1498 .alg.aead = { 1509 .alg.aead = {
1499 .setkey = safexcel_aead_setkey, 1510 .setkey = safexcel_aead_setkey,
1500 .encrypt = safexcel_aead_encrypt, 1511 .encrypt = safexcel_aead_encrypt,
@@ -1529,6 +1540,7 @@ static int safexcel_aead_sha384_cra_init(struct crypto_tfm *tfm)
1529 1540
1530struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_aes = { 1541struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_aes = {
1531 .type = SAFEXCEL_ALG_TYPE_AEAD, 1542 .type = SAFEXCEL_ALG_TYPE_AEAD,
1543 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_512,
1532 .alg.aead = { 1544 .alg.aead = {
1533 .setkey = safexcel_aead_setkey, 1545 .setkey = safexcel_aead_setkey,
1534 .encrypt = safexcel_aead_encrypt, 1546 .encrypt = safexcel_aead_encrypt,
@@ -1562,6 +1574,7 @@ static int safexcel_aead_sha1_des3_cra_init(struct crypto_tfm *tfm)
1562 1574
1563struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_des3_ede = { 1575struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_des3_ede = {
1564 .type = SAFEXCEL_ALG_TYPE_AEAD, 1576 .type = SAFEXCEL_ALG_TYPE_AEAD,
1577 .algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_SHA1,
1565 .alg.aead = { 1578 .alg.aead = {
1566 .setkey = safexcel_aead_setkey, 1579 .setkey = safexcel_aead_setkey,
1567 .encrypt = safexcel_aead_encrypt, 1580 .encrypt = safexcel_aead_encrypt,
@@ -1595,6 +1608,7 @@ static int safexcel_aead_sha1_ctr_cra_init(struct crypto_tfm *tfm)
1595 1608
1596struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_ctr_aes = { 1609struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_ctr_aes = {
1597 .type = SAFEXCEL_ALG_TYPE_AEAD, 1610 .type = SAFEXCEL_ALG_TYPE_AEAD,
1611 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA1,
1598 .alg.aead = { 1612 .alg.aead = {
1599 .setkey = safexcel_aead_setkey, 1613 .setkey = safexcel_aead_setkey,
1600 .encrypt = safexcel_aead_encrypt, 1614 .encrypt = safexcel_aead_encrypt,
@@ -1628,6 +1642,7 @@ static int safexcel_aead_sha256_ctr_cra_init(struct crypto_tfm *tfm)
1628 1642
1629struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_ctr_aes = { 1643struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_ctr_aes = {
1630 .type = SAFEXCEL_ALG_TYPE_AEAD, 1644 .type = SAFEXCEL_ALG_TYPE_AEAD,
1645 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_256,
1631 .alg.aead = { 1646 .alg.aead = {
1632 .setkey = safexcel_aead_setkey, 1647 .setkey = safexcel_aead_setkey,
1633 .encrypt = safexcel_aead_encrypt, 1648 .encrypt = safexcel_aead_encrypt,
@@ -1661,6 +1676,7 @@ static int safexcel_aead_sha224_ctr_cra_init(struct crypto_tfm *tfm)
1661 1676
1662struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_ctr_aes = { 1677struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_ctr_aes = {
1663 .type = SAFEXCEL_ALG_TYPE_AEAD, 1678 .type = SAFEXCEL_ALG_TYPE_AEAD,
1679 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_256,
1664 .alg.aead = { 1680 .alg.aead = {
1665 .setkey = safexcel_aead_setkey, 1681 .setkey = safexcel_aead_setkey,
1666 .encrypt = safexcel_aead_encrypt, 1682 .encrypt = safexcel_aead_encrypt,
@@ -1694,6 +1710,7 @@ static int safexcel_aead_sha512_ctr_cra_init(struct crypto_tfm *tfm)
1694 1710
1695struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_ctr_aes = { 1711struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_ctr_aes = {
1696 .type = SAFEXCEL_ALG_TYPE_AEAD, 1712 .type = SAFEXCEL_ALG_TYPE_AEAD,
1713 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_512,
1697 .alg.aead = { 1714 .alg.aead = {
1698 .setkey = safexcel_aead_setkey, 1715 .setkey = safexcel_aead_setkey,
1699 .encrypt = safexcel_aead_encrypt, 1716 .encrypt = safexcel_aead_encrypt,
@@ -1727,6 +1744,7 @@ static int safexcel_aead_sha384_ctr_cra_init(struct crypto_tfm *tfm)
1727 1744
1728struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_ctr_aes = { 1745struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_ctr_aes = {
1729 .type = SAFEXCEL_ALG_TYPE_AEAD, 1746 .type = SAFEXCEL_ALG_TYPE_AEAD,
1747 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_SHA2_512,
1730 .alg.aead = { 1748 .alg.aead = {
1731 .setkey = safexcel_aead_setkey, 1749 .setkey = safexcel_aead_setkey,
1732 .encrypt = safexcel_aead_encrypt, 1750 .encrypt = safexcel_aead_encrypt,
@@ -1840,6 +1858,7 @@ static int safexcel_decrypt_xts(struct skcipher_request *req)
1840 1858
1841struct safexcel_alg_template safexcel_alg_xts_aes = { 1859struct safexcel_alg_template safexcel_alg_xts_aes = {
1842 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 1860 .type = SAFEXCEL_ALG_TYPE_SKCIPHER,
1861 .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_AES_XTS,
1843 .alg.skcipher = { 1862 .alg.skcipher = {
1844 .setkey = safexcel_skcipher_aesxts_setkey, 1863 .setkey = safexcel_skcipher_aesxts_setkey,
1845 .encrypt = safexcel_encrypt_xts, 1864 .encrypt = safexcel_encrypt_xts,
diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
index 626dd82e583f..e60838f2fa96 100644
--- a/drivers/crypto/inside-secure/safexcel_hash.c
+++ b/drivers/crypto/inside-secure/safexcel_hash.c
@@ -845,6 +845,7 @@ static void safexcel_ahash_cra_exit(struct crypto_tfm *tfm)
845 845
846struct safexcel_alg_template safexcel_alg_sha1 = { 846struct safexcel_alg_template safexcel_alg_sha1 = {
847 .type = SAFEXCEL_ALG_TYPE_AHASH, 847 .type = SAFEXCEL_ALG_TYPE_AHASH,
848 .algo_mask = SAFEXCEL_ALG_SHA1,
848 .alg.ahash = { 849 .alg.ahash = {
849 .init = safexcel_sha1_init, 850 .init = safexcel_sha1_init,
850 .update = safexcel_ahash_update, 851 .update = safexcel_ahash_update,
@@ -1085,6 +1086,7 @@ static int safexcel_hmac_sha1_setkey(struct crypto_ahash *tfm, const u8 *key,
1085 1086
1086struct safexcel_alg_template safexcel_alg_hmac_sha1 = { 1087struct safexcel_alg_template safexcel_alg_hmac_sha1 = {
1087 .type = SAFEXCEL_ALG_TYPE_AHASH, 1088 .type = SAFEXCEL_ALG_TYPE_AHASH,
1089 .algo_mask = SAFEXCEL_ALG_SHA1,
1088 .alg.ahash = { 1090 .alg.ahash = {
1089 .init = safexcel_hmac_sha1_init, 1091 .init = safexcel_hmac_sha1_init,
1090 .update = safexcel_ahash_update, 1092 .update = safexcel_ahash_update,
@@ -1140,6 +1142,7 @@ static int safexcel_sha256_digest(struct ahash_request *areq)
1140 1142
1141struct safexcel_alg_template safexcel_alg_sha256 = { 1143struct safexcel_alg_template safexcel_alg_sha256 = {
1142 .type = SAFEXCEL_ALG_TYPE_AHASH, 1144 .type = SAFEXCEL_ALG_TYPE_AHASH,
1145 .algo_mask = SAFEXCEL_ALG_SHA2_256,
1143 .alg.ahash = { 1146 .alg.ahash = {
1144 .init = safexcel_sha256_init, 1147 .init = safexcel_sha256_init,
1145 .update = safexcel_ahash_update, 1148 .update = safexcel_ahash_update,
@@ -1194,6 +1197,7 @@ static int safexcel_sha224_digest(struct ahash_request *areq)
1194 1197
1195struct safexcel_alg_template safexcel_alg_sha224 = { 1198struct safexcel_alg_template safexcel_alg_sha224 = {
1196 .type = SAFEXCEL_ALG_TYPE_AHASH, 1199 .type = SAFEXCEL_ALG_TYPE_AHASH,
1200 .algo_mask = SAFEXCEL_ALG_SHA2_256,
1197 .alg.ahash = { 1201 .alg.ahash = {
1198 .init = safexcel_sha224_init, 1202 .init = safexcel_sha224_init,
1199 .update = safexcel_ahash_update, 1203 .update = safexcel_ahash_update,
@@ -1262,6 +1266,7 @@ static int safexcel_hmac_sha224_digest(struct ahash_request *areq)
1262 1266
1263struct safexcel_alg_template safexcel_alg_hmac_sha224 = { 1267struct safexcel_alg_template safexcel_alg_hmac_sha224 = {
1264 .type = SAFEXCEL_ALG_TYPE_AHASH, 1268 .type = SAFEXCEL_ALG_TYPE_AHASH,
1269 .algo_mask = SAFEXCEL_ALG_SHA2_256,
1265 .alg.ahash = { 1270 .alg.ahash = {
1266 .init = safexcel_hmac_sha224_init, 1271 .init = safexcel_hmac_sha224_init,
1267 .update = safexcel_ahash_update, 1272 .update = safexcel_ahash_update,
@@ -1331,6 +1336,7 @@ static int safexcel_hmac_sha256_digest(struct ahash_request *areq)
1331 1336
1332struct safexcel_alg_template safexcel_alg_hmac_sha256 = { 1337struct safexcel_alg_template safexcel_alg_hmac_sha256 = {
1333 .type = SAFEXCEL_ALG_TYPE_AHASH, 1338 .type = SAFEXCEL_ALG_TYPE_AHASH,
1339 .algo_mask = SAFEXCEL_ALG_SHA2_256,
1334 .alg.ahash = { 1340 .alg.ahash = {
1335 .init = safexcel_hmac_sha256_init, 1341 .init = safexcel_hmac_sha256_init,
1336 .update = safexcel_ahash_update, 1342 .update = safexcel_ahash_update,
@@ -1386,6 +1392,7 @@ static int safexcel_sha512_digest(struct ahash_request *areq)
1386 1392
1387struct safexcel_alg_template safexcel_alg_sha512 = { 1393struct safexcel_alg_template safexcel_alg_sha512 = {
1388 .type = SAFEXCEL_ALG_TYPE_AHASH, 1394 .type = SAFEXCEL_ALG_TYPE_AHASH,
1395 .algo_mask = SAFEXCEL_ALG_SHA2_512,
1389 .alg.ahash = { 1396 .alg.ahash = {
1390 .init = safexcel_sha512_init, 1397 .init = safexcel_sha512_init,
1391 .update = safexcel_ahash_update, 1398 .update = safexcel_ahash_update,
@@ -1440,6 +1447,7 @@ static int safexcel_sha384_digest(struct ahash_request *areq)
1440 1447
1441struct safexcel_alg_template safexcel_alg_sha384 = { 1448struct safexcel_alg_template safexcel_alg_sha384 = {
1442 .type = SAFEXCEL_ALG_TYPE_AHASH, 1449 .type = SAFEXCEL_ALG_TYPE_AHASH,
1450 .algo_mask = SAFEXCEL_ALG_SHA2_512,
1443 .alg.ahash = { 1451 .alg.ahash = {
1444 .init = safexcel_sha384_init, 1452 .init = safexcel_sha384_init,
1445 .update = safexcel_ahash_update, 1453 .update = safexcel_ahash_update,
@@ -1508,6 +1516,7 @@ static int safexcel_hmac_sha512_digest(struct ahash_request *areq)
1508 1516
1509struct safexcel_alg_template safexcel_alg_hmac_sha512 = { 1517struct safexcel_alg_template safexcel_alg_hmac_sha512 = {
1510 .type = SAFEXCEL_ALG_TYPE_AHASH, 1518 .type = SAFEXCEL_ALG_TYPE_AHASH,
1519 .algo_mask = SAFEXCEL_ALG_SHA2_512,
1511 .alg.ahash = { 1520 .alg.ahash = {
1512 .init = safexcel_hmac_sha512_init, 1521 .init = safexcel_hmac_sha512_init,
1513 .update = safexcel_ahash_update, 1522 .update = safexcel_ahash_update,
@@ -1577,6 +1586,7 @@ static int safexcel_hmac_sha384_digest(struct ahash_request *areq)
1577 1586
1578struct safexcel_alg_template safexcel_alg_hmac_sha384 = { 1587struct safexcel_alg_template safexcel_alg_hmac_sha384 = {
1579 .type = SAFEXCEL_ALG_TYPE_AHASH, 1588 .type = SAFEXCEL_ALG_TYPE_AHASH,
1589 .algo_mask = SAFEXCEL_ALG_SHA2_512,
1580 .alg.ahash = { 1590 .alg.ahash = {
1581 .init = safexcel_hmac_sha384_init, 1591 .init = safexcel_hmac_sha384_init,
1582 .update = safexcel_ahash_update, 1592 .update = safexcel_ahash_update,
@@ -1632,6 +1642,7 @@ static int safexcel_md5_digest(struct ahash_request *areq)
1632 1642
1633struct safexcel_alg_template safexcel_alg_md5 = { 1643struct safexcel_alg_template safexcel_alg_md5 = {
1634 .type = SAFEXCEL_ALG_TYPE_AHASH, 1644 .type = SAFEXCEL_ALG_TYPE_AHASH,
1645 .algo_mask = SAFEXCEL_ALG_MD5,
1635 .alg.ahash = { 1646 .alg.ahash = {
1636 .init = safexcel_md5_init, 1647 .init = safexcel_md5_init,
1637 .update = safexcel_ahash_update, 1648 .update = safexcel_ahash_update,
@@ -1701,6 +1712,7 @@ static int safexcel_hmac_md5_digest(struct ahash_request *areq)
1701 1712
1702struct safexcel_alg_template safexcel_alg_hmac_md5 = { 1713struct safexcel_alg_template safexcel_alg_hmac_md5 = {
1703 .type = SAFEXCEL_ALG_TYPE_AHASH, 1714 .type = SAFEXCEL_ALG_TYPE_AHASH,
1715 .algo_mask = SAFEXCEL_ALG_MD5,
1704 .alg.ahash = { 1716 .alg.ahash = {
1705 .init = safexcel_hmac_md5_init, 1717 .init = safexcel_hmac_md5_init,
1706 .update = safexcel_ahash_update, 1718 .update = safexcel_ahash_update,