]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
crypto: inside-secure - use precise compatibles
authorAntoine Tenart <antoine.tenart@bootlin.com>
Thu, 28 Jun 2018 15:15:32 +0000 (17:15 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 8 Jul 2018 16:30:10 +0000 (00:30 +0800)
At first we used two compatibles in the SafeXcel driver, named after the
engine revision: eip97 and eip197. However this family of engines has
more precise versions and in fact we're supporting the eip97ies and
eip197b. More versions will be supported in the future, such as the
eip197d, and we'll need to differentiate them.

This patch fixes the compatibles used in the driver, to now use precise
ones. The two historical compatibles are kept for backward
compatibility.

Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel.c
drivers/crypto/inside-secure/safexcel.h
drivers/crypto/inside-secure/safexcel_cipher.c
drivers/crypto/inside-secure/safexcel_hash.c

index a04d39231aaf08bad7100f72f9913f29f1980aa2..c28ab137d721c2aad09ae009a25105e01d9186b7 100644 (file)
@@ -294,7 +294,7 @@ static int safexcel_hw_init(struct safexcel_crypto_priv *priv)
        writel(EIP197_DxE_THR_CTRL_RESET_PE,
               EIP197_HIA_DFE_THR(priv) + EIP197_HIA_DFE_THR_CTRL);
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                /* Reset HIA input interface arbiter */
                writel(EIP197_HIA_RA_PE_CTRL_RESET,
                       EIP197_HIA_AIC(priv) + EIP197_HIA_RA_PE_CTRL);
@@ -317,7 +317,7 @@ static int safexcel_hw_init(struct safexcel_crypto_priv *priv)
        writel(EIP197_PE_IN_xBUF_THRES_MIN(6) | EIP197_PE_IN_xBUF_THRES_MAX(7),
               EIP197_PE(priv) + EIP197_PE_IN_TBUF_THRES);
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                /* enable HIA input interface arbiter and rings */
                writel(EIP197_HIA_RA_PE_CTRL_EN |
                       GENMASK(priv->config.rings - 1, 0),
@@ -343,7 +343,7 @@ static int safexcel_hw_init(struct safexcel_crypto_priv *priv)
        /* FIXME: instability issues can occur for EIP97 but disabling it impact
         * performances.
         */
-       if (priv->version == EIP197)
+       if (priv->version == EIP197B)
                val |= EIP197_HIA_DSE_CFG_EN_SINGLE_WR;
        writel(val, EIP197_HIA_DSE(priv) + EIP197_HIA_DSE_CFG);
 
@@ -425,7 +425,7 @@ static int safexcel_hw_init(struct safexcel_crypto_priv *priv)
        /* Clear any HIA interrupt */
        writel(GENMASK(30, 20), EIP197_HIA_AIC_G(priv) + EIP197_HIA_AIC_G_ACK);
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                eip197_trc_cache_init(priv);
 
                ret = eip197_load_firmwares(priv);
@@ -879,7 +879,7 @@ static void safexcel_init_register_offsets(struct safexcel_crypto_priv *priv)
 {
        struct safexcel_register_offsets *offsets = &priv->offsets;
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                offsets->hia_aic        = EIP197_HIA_AIC_BASE;
                offsets->hia_aic_g      = EIP197_HIA_AIC_G_BASE;
                offsets->hia_aic_r      = EIP197_HIA_AIC_R_BASE;
@@ -1063,12 +1063,22 @@ static int safexcel_remove(struct platform_device *pdev)
 
 static const struct of_device_id safexcel_of_match_table[] = {
        {
+               .compatible = "inside-secure,safexcel-eip97ies",
+               .data = (void *)EIP97IES,
+       },
+       {
+               .compatible = "inside-secure,safexcel-eip197b",
+               .data = (void *)EIP197B,
+       },
+       {
+               /* Deprecated. Kept for backward compatibility. */
                .compatible = "inside-secure,safexcel-eip97",
-               .data = (void *)EIP97,
+               .data = (void *)EIP97IES,
        },
        {
+               /* Deprecated. Kept for backward compatibility. */
                .compatible = "inside-secure,safexcel-eip197",
-               .data = (void *)EIP197,
+               .data = (void *)EIP197B,
        },
        {},
 };
index 5d6b3b705d0c087e1de03a6a89d3bd4577cbe108..6e6bdad6a6f5c69014a421be80341f415d95e817 100644 (file)
@@ -529,8 +529,8 @@ struct safexcel_work_data {
 };
 
 enum safexcel_eip_version {
-       EIP97,
-       EIP197,
+       EIP97IES,
+       EIP197B,
 };
 
 struct safexcel_register_offsets {
index ca4bc2d28d2a41c307c332a68c9c19b98e6b0835..845546129d091f99093aadb7af72359070229ad7 100644 (file)
@@ -145,7 +145,7 @@ static int safexcel_skcipher_aes_setkey(struct crypto_skcipher *ctfm,
                return ret;
        }
 
-       if (priv->version == EIP197 && ctx->base.ctxr_dma) {
+       if (priv->version == EIP197B && ctx->base.ctxr_dma) {
                for (i = 0; i < len / sizeof(u32); i++) {
                        if (ctx->key[i] != cpu_to_le32(aes.key_enc[i])) {
                                ctx->base.needs_inv = true;
@@ -179,7 +179,7 @@ static int safexcel_aead_aes_setkey(struct crypto_aead *ctfm, const u8 *key,
                goto badkey;
 
        /* Encryption key */
-       if (priv->version == EIP197 && ctx->base.ctxr_dma &&
+       if (priv->version == EIP197B && ctx->base.ctxr_dma &&
            memcmp(ctx->key, keys.enckey, keys.enckeylen))
                ctx->base.needs_inv = true;
 
@@ -218,7 +218,7 @@ static int safexcel_aead_aes_setkey(struct crypto_aead *ctfm, const u8 *key,
        crypto_aead_set_flags(ctfm, crypto_aead_get_flags(ctfm) &
                                    CRYPTO_TFM_RES_MASK);
 
-       if (priv->version == EIP197 && ctx->base.ctxr_dma &&
+       if (priv->version == EIP197B && ctx->base.ctxr_dma &&
            (memcmp(ctx->ipad, istate.state, ctx->state_sz) ||
             memcmp(ctx->opad, ostate.state, ctx->state_sz)))
                ctx->base.needs_inv = true;
@@ -612,7 +612,7 @@ static int safexcel_skcipher_send(struct crypto_async_request *async, int ring,
        struct safexcel_crypto_priv *priv = ctx->priv;
        int ret;
 
-       BUG_ON(priv->version == EIP97 && sreq->needs_inv);
+       BUG_ON(priv->version == EIP97IES && sreq->needs_inv);
 
        if (sreq->needs_inv)
                ret = safexcel_cipher_send_inv(async, ring, request, commands,
@@ -635,7 +635,7 @@ static int safexcel_aead_send(struct crypto_async_request *async, int ring,
        struct safexcel_crypto_priv *priv = ctx->priv;
        int ret;
 
-       BUG_ON(priv->version == EIP97 && sreq->needs_inv);
+       BUG_ON(priv->version == EIP97IES && sreq->needs_inv);
 
        if (sreq->needs_inv)
                ret = safexcel_cipher_send_inv(async, ring, request, commands,
@@ -725,7 +725,7 @@ static int safexcel_aes(struct crypto_async_request *base,
        ctx->mode = mode;
 
        if (ctx->base.ctxr) {
-               if (priv->version == EIP197 && ctx->base.needs_inv) {
+               if (priv->version == EIP197B && ctx->base.needs_inv) {
                        sreq->needs_inv = true;
                        ctx->base.needs_inv = false;
                }
@@ -802,7 +802,7 @@ static void safexcel_skcipher_cra_exit(struct crypto_tfm *tfm)
        if (safexcel_cipher_cra_exit(tfm))
                return;
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                ret = safexcel_skcipher_exit_inv(tfm);
                if (ret)
                        dev_warn(priv->dev, "skcipher: invalidation error %d\n",
@@ -822,7 +822,7 @@ static void safexcel_aead_cra_exit(struct crypto_tfm *tfm)
        if (safexcel_cipher_cra_exit(tfm))
                return;
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                ret = safexcel_aead_exit_inv(tfm);
                if (ret)
                        dev_warn(priv->dev, "aead: invalidation error %d\n",
index 188ba0734337acda8da9732f283395f51015d844..dc7239945dc0ed95146b5d5299e2874d5c4f2ef1 100644 (file)
@@ -442,7 +442,7 @@ static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
        struct safexcel_ahash_req *req = ahash_request_ctx(areq);
        int err;
 
-       BUG_ON(priv->version == EIP97 && req->needs_inv);
+       BUG_ON(priv->version == EIP97IES && req->needs_inv);
 
        if (req->needs_inv) {
                req->needs_inv = false;
@@ -575,7 +575,7 @@ static int safexcel_ahash_enqueue(struct ahash_request *areq)
        req->needs_inv = false;
 
        if (ctx->base.ctxr) {
-               if (priv->version == EIP197 && !ctx->base.needs_inv &&
+               if (priv->version == EIP197B && !ctx->base.needs_inv &&
                    (req->processed[0] || req->processed[1]) &&
                    req->digest == CONTEXT_CONTROL_DIGEST_PRECOMPUTED)
                        /* We're still setting needs_inv here, even though it is
@@ -784,7 +784,7 @@ static void safexcel_ahash_cra_exit(struct crypto_tfm *tfm)
        if (!ctx->base.ctxr)
                return;
 
-       if (priv->version == EIP197) {
+       if (priv->version == EIP197B) {
                ret = safexcel_ahash_exit_inv(tfm);
                if (ret)
                        dev_warn(priv->dev, "hash: invalidation error %d\n", ret);
@@ -1004,7 +1004,7 @@ static int safexcel_hmac_alg_setkey(struct crypto_ahash *tfm, const u8 *key,
        if (ret)
                return ret;
 
-       if (priv->version == EIP197 && ctx->base.ctxr) {
+       if (priv->version == EIP197B && ctx->base.ctxr) {
                for (i = 0; i < state_sz / sizeof(u32); i++) {
                        if (ctx->ipad[i] != le32_to_cpu(istate.state[i]) ||
                            ctx->opad[i] != le32_to_cpu(ostate.state[i])) {