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

crypto: inside-secure - eip197d support

This patch adds support for the eip197d engine to the Inside Secure
SafeXcel cryptographic driver. This new engine is similar to the eip197b
and reuse most of its code.

Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Antoine Tenart and committed by
Herbert Xu
5eb09118 367571e4

+54 -27
+36 -10
drivers/crypto/inside-secure/safexcel.c
··· 132 132 { 133 133 const char *fw_name[] = {"ifpp.bin", "ipue.bin"}; 134 134 const struct firmware *fw[FW_NB]; 135 - char fw_path[31]; 135 + char fw_path[31], *dir = NULL; 136 136 int i, j, ret = 0, pe; 137 137 u32 val; 138 138 139 + switch (priv->version) { 140 + case EIP197B: 141 + dir = "eip197b"; 142 + break; 143 + case EIP197D: 144 + dir = "eip197d"; 145 + break; 146 + default: 147 + /* No firmware is required */ 148 + return 0; 149 + } 150 + 139 151 for (i = 0; i < FW_NB; i++) { 140 - snprintf(fw_path, 31, "inside-secure/eip197b/%s", fw_name[i]); 152 + snprintf(fw_path, 31, "inside-secure/%s/%s", dir, fw_name[i]); 141 153 ret = request_firmware(&fw[i], fw_path, priv->dev); 142 154 if (ret) { 143 - /* Fallback to the old firmware location. */ 155 + if (priv->version != EIP197B) 156 + goto release_fw; 157 + 158 + /* Fallback to the old firmware location for the 159 + * EIP197b. 160 + */ 144 161 ret = request_firmware(&fw[i], fw_name[i], priv->dev); 145 162 if (ret) { 146 163 dev_err(priv->dev, ··· 317 300 writel(EIP197_DxE_THR_CTRL_RESET_PE, 318 301 EIP197_HIA_DFE_THR(priv) + EIP197_HIA_DFE_THR_CTRL(pe)); 319 302 320 - if (priv->version == EIP197B) { 303 + if (priv->version == EIP197B || priv->version == EIP197D) { 321 304 /* Reset HIA input interface arbiter */ 322 305 writel(EIP197_HIA_RA_PE_CTRL_RESET, 323 306 EIP197_HIA_AIC(priv) + EIP197_HIA_RA_PE_CTRL(pe)); ··· 344 327 EIP197_PE_IN_xBUF_THRES_MAX(7), 345 328 EIP197_PE(priv) + EIP197_PE_IN_TBUF_THRES(pe)); 346 329 347 - if (priv->version == EIP197B) { 330 + if (priv->version == EIP197B || priv->version == EIP197D) { 348 331 /* enable HIA input interface arbiter and rings */ 349 332 writel(EIP197_HIA_RA_PE_CTRL_EN | 350 333 GENMASK(priv->config.rings - 1, 0), ··· 371 354 /* FIXME: instability issues can occur for EIP97 but disabling it impact 372 355 * performances. 373 356 */ 374 - if (priv->version == EIP197B) 357 + if (priv->version == EIP197B || priv->version == EIP197D) 375 358 val |= EIP197_HIA_DSE_CFG_EN_SINGLE_WR; 376 359 writel(val, EIP197_HIA_DSE(priv) + EIP197_HIA_DSE_CFG(pe)); 377 360 ··· 457 440 /* Clear any HIA interrupt */ 458 441 writel(GENMASK(30, 20), EIP197_HIA_AIC_G(priv) + EIP197_HIA_AIC_G_ACK); 459 442 460 - if (priv->version == EIP197B) { 443 + if (priv->version == EIP197B || priv->version == EIP197D) { 461 444 eip197_trc_cache_init(priv); 462 445 463 446 ret = eip197_load_firmwares(priv); ··· 907 890 /* Read number of PEs from the engine */ 908 891 switch (priv->version) { 909 892 case EIP197B: 893 + case EIP197D: 910 894 mask = EIP197_N_PES_MASK; 911 895 break; 912 896 default: ··· 932 914 { 933 915 struct safexcel_register_offsets *offsets = &priv->offsets; 934 916 935 - if (priv->version == EIP197B) { 917 + switch (priv->version) { 918 + case EIP197B: 919 + case EIP197D: 936 920 offsets->hia_aic = EIP197_HIA_AIC_BASE; 937 921 offsets->hia_aic_g = EIP197_HIA_AIC_G_BASE; 938 922 offsets->hia_aic_r = EIP197_HIA_AIC_R_BASE; ··· 945 925 offsets->hia_dse_thr = EIP197_HIA_DSE_THR_BASE; 946 926 offsets->hia_gen_cfg = EIP197_HIA_GEN_CFG_BASE; 947 927 offsets->pe = EIP197_PE_BASE; 948 - } else { 928 + break; 929 + case EIP97IES: 949 930 offsets->hia_aic = EIP97_HIA_AIC_BASE; 950 931 offsets->hia_aic_g = EIP97_HIA_AIC_G_BASE; 951 932 offsets->hia_aic_r = EIP97_HIA_AIC_R_BASE; ··· 957 936 offsets->hia_dse_thr = EIP97_HIA_DSE_THR_BASE; 958 937 offsets->hia_gen_cfg = EIP97_HIA_GEN_CFG_BASE; 959 938 offsets->pe = EIP97_PE_BASE; 939 + break; 960 940 } 961 941 } 962 942 ··· 975 953 priv->dev = dev; 976 954 priv->version = (enum safexcel_eip_version)of_device_get_match_data(dev); 977 955 978 - if (priv->version == EIP197B) 956 + if (priv->version == EIP197B || priv->version == EIP197D) 979 957 priv->flags |= EIP197_TRC_CACHE; 980 958 981 959 safexcel_init_register_offsets(priv); ··· 1136 1114 { 1137 1115 .compatible = "inside-secure,safexcel-eip197b", 1138 1116 .data = (void *)EIP197B, 1117 + }, 1118 + { 1119 + .compatible = "inside-secure,safexcel-eip197d", 1120 + .data = (void *)EIP197D, 1139 1121 }, 1140 1122 { 1141 1123 /* Deprecated. Kept for backward compatibility. */
+1
drivers/crypto/inside-secure/safexcel.h
··· 566 566 enum safexcel_eip_version { 567 567 EIP97IES = BIT(0), 568 568 EIP197B = BIT(1), 569 + EIP197D = BIT(2), 569 570 }; 570 571 571 572 struct safexcel_register_offsets {
+7 -7
drivers/crypto/inside-secure/safexcel_cipher.c
··· 835 835 836 836 struct safexcel_alg_template safexcel_alg_ecb_aes = { 837 837 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 838 - .engines = EIP97IES | EIP197B, 838 + .engines = EIP97IES | EIP197B | EIP197D, 839 839 .alg.skcipher = { 840 840 .setkey = safexcel_skcipher_aes_setkey, 841 841 .encrypt = safexcel_ecb_aes_encrypt, ··· 872 872 873 873 struct safexcel_alg_template safexcel_alg_cbc_aes = { 874 874 .type = SAFEXCEL_ALG_TYPE_SKCIPHER, 875 - .engines = EIP97IES | EIP197B, 875 + .engines = EIP97IES | EIP197B | EIP197D, 876 876 .alg.skcipher = { 877 877 .setkey = safexcel_skcipher_aes_setkey, 878 878 .encrypt = safexcel_cbc_aes_encrypt, ··· 942 942 943 943 struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_aes = { 944 944 .type = SAFEXCEL_ALG_TYPE_AEAD, 945 - .engines = EIP97IES | EIP197B, 945 + .engines = EIP97IES | EIP197B | EIP197D, 946 946 .alg.aead = { 947 947 .setkey = safexcel_aead_aes_setkey, 948 948 .encrypt = safexcel_aead_encrypt, ··· 977 977 978 978 struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_aes = { 979 979 .type = SAFEXCEL_ALG_TYPE_AEAD, 980 - .engines = EIP97IES | EIP197B, 980 + .engines = EIP97IES | EIP197B | EIP197D, 981 981 .alg.aead = { 982 982 .setkey = safexcel_aead_aes_setkey, 983 983 .encrypt = safexcel_aead_encrypt, ··· 1012 1012 1013 1013 struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_aes = { 1014 1014 .type = SAFEXCEL_ALG_TYPE_AEAD, 1015 - .engines = EIP97IES | EIP197B, 1015 + .engines = EIP97IES | EIP197B | EIP197D, 1016 1016 .alg.aead = { 1017 1017 .setkey = safexcel_aead_aes_setkey, 1018 1018 .encrypt = safexcel_aead_encrypt, ··· 1047 1047 1048 1048 struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_aes = { 1049 1049 .type = SAFEXCEL_ALG_TYPE_AEAD, 1050 - .engines = EIP97IES | EIP197B, 1050 + .engines = EIP97IES | EIP197B | EIP197D, 1051 1051 .alg.aead = { 1052 1052 .setkey = safexcel_aead_aes_setkey, 1053 1053 .encrypt = safexcel_aead_encrypt, ··· 1082 1082 1083 1083 struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_aes = { 1084 1084 .type = SAFEXCEL_ALG_TYPE_AEAD, 1085 - .engines = EIP97IES | EIP197B, 1085 + .engines = EIP97IES | EIP197B | EIP197D, 1086 1086 .alg.aead = { 1087 1087 .setkey = safexcel_aead_aes_setkey, 1088 1088 .encrypt = safexcel_aead_encrypt,
+10 -10
drivers/crypto/inside-secure/safexcel_hash.c
··· 796 796 797 797 struct safexcel_alg_template safexcel_alg_sha1 = { 798 798 .type = SAFEXCEL_ALG_TYPE_AHASH, 799 - .engines = EIP97IES | EIP197B, 799 + .engines = EIP97IES | EIP197B | EIP197D, 800 800 .alg.ahash = { 801 801 .init = safexcel_sha1_init, 802 802 .update = safexcel_ahash_update, ··· 1030 1030 1031 1031 struct safexcel_alg_template safexcel_alg_hmac_sha1 = { 1032 1032 .type = SAFEXCEL_ALG_TYPE_AHASH, 1033 - .engines = EIP97IES | EIP197B, 1033 + .engines = EIP97IES | EIP197B | EIP197D, 1034 1034 .alg.ahash = { 1035 1035 .init = safexcel_hmac_sha1_init, 1036 1036 .update = safexcel_ahash_update, ··· 1094 1094 1095 1095 struct safexcel_alg_template safexcel_alg_sha256 = { 1096 1096 .type = SAFEXCEL_ALG_TYPE_AHASH, 1097 - .engines = EIP97IES | EIP197B, 1097 + .engines = EIP97IES | EIP197B | EIP197D, 1098 1098 .alg.ahash = { 1099 1099 .init = safexcel_sha256_init, 1100 1100 .update = safexcel_ahash_update, ··· 1157 1157 1158 1158 struct safexcel_alg_template safexcel_alg_sha224 = { 1159 1159 .type = SAFEXCEL_ALG_TYPE_AHASH, 1160 - .engines = EIP97IES | EIP197B, 1160 + .engines = EIP97IES | EIP197B | EIP197D, 1161 1161 .alg.ahash = { 1162 1162 .init = safexcel_sha224_init, 1163 1163 .update = safexcel_ahash_update, ··· 1213 1213 1214 1214 struct safexcel_alg_template safexcel_alg_hmac_sha224 = { 1215 1215 .type = SAFEXCEL_ALG_TYPE_AHASH, 1216 - .engines = EIP97IES | EIP197B, 1216 + .engines = EIP97IES | EIP197B | EIP197D, 1217 1217 .alg.ahash = { 1218 1218 .init = safexcel_hmac_sha224_init, 1219 1219 .update = safexcel_ahash_update, ··· 1270 1270 1271 1271 struct safexcel_alg_template safexcel_alg_hmac_sha256 = { 1272 1272 .type = SAFEXCEL_ALG_TYPE_AHASH, 1273 - .engines = EIP97IES | EIP197B, 1273 + .engines = EIP97IES | EIP197B | EIP197D, 1274 1274 .alg.ahash = { 1275 1275 .init = safexcel_hmac_sha256_init, 1276 1276 .update = safexcel_ahash_update, ··· 1342 1342 1343 1343 struct safexcel_alg_template safexcel_alg_sha512 = { 1344 1344 .type = SAFEXCEL_ALG_TYPE_AHASH, 1345 - .engines = EIP97IES | EIP197B, 1345 + .engines = EIP97IES | EIP197B | EIP197D, 1346 1346 .alg.ahash = { 1347 1347 .init = safexcel_sha512_init, 1348 1348 .update = safexcel_ahash_update, ··· 1413 1413 1414 1414 struct safexcel_alg_template safexcel_alg_sha384 = { 1415 1415 .type = SAFEXCEL_ALG_TYPE_AHASH, 1416 - .engines = EIP97IES | EIP197B, 1416 + .engines = EIP97IES | EIP197B | EIP197D, 1417 1417 .alg.ahash = { 1418 1418 .init = safexcel_sha384_init, 1419 1419 .update = safexcel_ahash_update, ··· 1469 1469 1470 1470 struct safexcel_alg_template safexcel_alg_hmac_sha512 = { 1471 1471 .type = SAFEXCEL_ALG_TYPE_AHASH, 1472 - .engines = EIP97IES | EIP197B, 1472 + .engines = EIP97IES | EIP197B | EIP197D, 1473 1473 .alg.ahash = { 1474 1474 .init = safexcel_hmac_sha512_init, 1475 1475 .update = safexcel_ahash_update, ··· 1526 1526 1527 1527 struct safexcel_alg_template safexcel_alg_hmac_sha384 = { 1528 1528 .type = SAFEXCEL_ALG_TYPE_AHASH, 1529 - .engines = EIP97IES | EIP197B, 1529 + .engines = EIP97IES | EIP197B | EIP197D, 1530 1530 .alg.ahash = { 1531 1531 .init = safexcel_hmac_sha384_init, 1532 1532 .update = safexcel_ahash_update,