]> rtime.felk.cvut.cz Git - zynq/linux.git/commitdiff
crypto: zynqmp: Use new firmware ops
authorRajan Vaja <rajan.vaja@xilinx.com>
Thu, 1 Mar 2018 19:32:00 +0000 (11:32 -0800)
committerMichal Simek <michal.simek@xilinx.com>
Thu, 15 Mar 2018 14:21:09 +0000 (15:21 +0100)
ZynqMP firmware interface driver has been replaced
with new firmware driver. Use new firmware ops
instead of old firmware APIs in crypto drivers.

Signed-off-by: Rajan Vaja <rajanv@xilinx.com>
Acked-by: Jolly Shah <jollys@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/crypto/zynqmp-rsa.c
drivers/crypto/zynqmp-sha.c

index 8da71faa2e96fc731e3c489cb9a508d3596a61a2..98f9e4ad726f78286847288ccadc63e23638d1a8 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/platform_device.h>
 #include <linux/scatterlist.h>
 #include <crypto/scatterwalk.h>
-#include <linux/soc/xilinx/zynqmp/firmware.h>
+#include <linux/firmware/xilinx/zynqmp/firmware.h>
 
 #define ZYNQMP_RSA_QUEUE_LENGTH        1
 #define ZYNQMP_RSA_MAX_KEY_SIZE        1024
@@ -97,12 +97,16 @@ zynqmp_rsa_decrypt(struct blkcipher_desc *desc,
 {
        struct zynqmp_rsa_op *op = crypto_blkcipher_ctx(desc->tfm);
        struct zynqmp_rsa_dev *dd = zynqmp_rsa_find_dev(op);
+       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_pm_get_eemi_ops();
        struct blkcipher_walk walk;
        char *kbuf;
        size_t dma_size;
        dma_addr_t dma_addr;
        int err;
 
+       if (!eemi_ops || !eemi_ops->rsa)
+               return -ENOTSUPP;
+
        blkcipher_walk_init(&walk, dst, src, nbytes);
        err = blkcipher_walk_virt(desc, &walk);
        op->iv = walk.iv;
@@ -116,7 +120,7 @@ zynqmp_rsa_decrypt(struct blkcipher_desc *desc,
 
        memcpy(kbuf, op->src, nbytes);
        memcpy(kbuf + nbytes, op->key, op->keylen);
-       zynqmp_pm_rsa(dma_addr, nbytes, 0);
+       eemi_ops->rsa(dma_addr, nbytes, 0);
        memcpy(walk.dst.virt.addr, kbuf, nbytes);
        err = blkcipher_walk_done(desc, &walk, nbytes  - 1);
        dma_free_coherent(dd->dev, dma_size, kbuf, dma_addr);
@@ -131,12 +135,16 @@ zynqmp_rsa_encrypt(struct blkcipher_desc *desc,
 {
        struct zynqmp_rsa_op *op = crypto_blkcipher_ctx(desc->tfm);
        struct zynqmp_rsa_dev *dd = zynqmp_rsa_find_dev(op);
+       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_pm_get_eemi_ops();
        struct blkcipher_walk walk;
        char *kbuf;
        size_t dma_size;
        dma_addr_t dma_addr;
        int err;
 
+       if (!eemi_ops || !eemi_ops->rsa)
+               return -ENOTSUPP;
+
        blkcipher_walk_init(&walk, dst, src, nbytes);
        err = blkcipher_walk_virt(desc, &walk);
        op->iv = walk.iv;
@@ -150,7 +158,7 @@ zynqmp_rsa_encrypt(struct blkcipher_desc *desc,
 
        memcpy(kbuf, op->src, nbytes);
        memcpy(kbuf + nbytes, op->key, op->keylen);
-       zynqmp_pm_rsa(dma_addr, nbytes, 1);
+       eemi_ops->rsa(dma_addr, nbytes, 1);
        memcpy(walk.dst.virt.addr, kbuf, nbytes);
        err = blkcipher_walk_done(desc, &walk, nbytes  - 1);
        dma_free_coherent(dd->dev, dma_size, kbuf, dma_addr);
index dfce1954c61828e55069fef3a5fc7e4d7791a9c8..9a045fa383037f3bd257f03cf8f52ae601a3539f 100644 (file)
@@ -28,7 +28,7 @@
 #include <crypto/sha.h>
 #include <crypto/hash.h>
 #include <crypto/internal/hash.h>
-#include <linux/soc/xilinx/zynqmp/firmware.h>
+#include <linux/firmware/xilinx/zynqmp/firmware.h>
 
 #define ZYNQMP_SHA3_INIT       1
 #define ZYNQMP_SHA3_UPDATE     2
@@ -80,10 +80,14 @@ static int zynqmp_sha_init(struct ahash_request *req)
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
        struct zynqmp_sha_ctx *tctx = crypto_ahash_ctx(tfm);
        struct zynqmp_sha_reqctx *ctx = ahash_request_ctx(req);
+       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_pm_get_eemi_ops();
        struct zynqmp_sha_dev *dd = NULL;
        struct zynqmp_sha_dev *tmp;
        int ret;
 
+       if (!eemi_ops || !eemi_ops->sha_hash)
+               return -ENOTSUPP;
+
        spin_lock_bh(&zynqmp_sha.lock);
        if (!tctx->dd) {
                list_for_each_entry(tmp, &zynqmp_sha.dev_list, list) {
@@ -100,7 +104,7 @@ static int zynqmp_sha_init(struct ahash_request *req)
        dev_dbg(dd->dev, "init: digest size: %d\n",
                crypto_ahash_digestsize(tfm));
 
-       ret = zynqmp_pm_sha_hash(0, 0, ZYNQMP_SHA3_INIT);
+       ret = eemi_ops->sha_hash(0, 0, ZYNQMP_SHA3_INIT);
 
        return ret;
 }
@@ -109,6 +113,7 @@ static int zynqmp_sha_update(struct ahash_request *req)
 {
        struct zynqmp_sha_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
        struct zynqmp_sha_dev *dd = tctx->dd;
+       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_pm_get_eemi_ops();
        char *kbuf;
        size_t dma_size = req->nbytes;
        dma_addr_t dma_addr;
@@ -117,6 +122,9 @@ static int zynqmp_sha_update(struct ahash_request *req)
        if (!req->nbytes)
                return 0;
 
+       if (!eemi_ops || !eemi_ops->sha_hash)
+               return -ENOTSUPP;
+
        kbuf = dma_alloc_coherent(dd->dev, dma_size, &dma_addr, GFP_KERNEL);
        if (!kbuf)
                return -ENOMEM;
@@ -124,7 +132,7 @@ static int zynqmp_sha_update(struct ahash_request *req)
        scatterwalk_map_and_copy(kbuf, req->src, 0, req->nbytes, 0);
         __flush_cache_user_range((unsigned long)kbuf,
                                  (unsigned long)kbuf + dma_size);
-       ret = zynqmp_pm_sha_hash(dma_addr, req->nbytes, ZYNQMP_SHA3_UPDATE);
+       ret = eemi_ops->sha_hash(dma_addr, req->nbytes, ZYNQMP_SHA3_UPDATE);
        dma_free_coherent(dd->dev, dma_size, kbuf, dma_addr);
 
        return ret;
@@ -134,16 +142,20 @@ static int zynqmp_sha_final(struct ahash_request *req)
 {
        struct zynqmp_sha_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
        struct zynqmp_sha_dev *dd = tctx->dd;
+       const struct zynqmp_eemi_ops *eemi_ops = zynqmp_pm_get_eemi_ops();
        char *kbuf;
        size_t dma_size = SHA384_DIGEST_SIZE;
        dma_addr_t dma_addr;
        int ret;
 
+       if (!eemi_ops || !eemi_ops->sha_hash)
+               return -ENOTSUPP;
+
        kbuf = dma_alloc_coherent(dd->dev, dma_size, &dma_addr, GFP_KERNEL);
        if (!kbuf)
                return -ENOMEM;
 
-       ret = zynqmp_pm_sha_hash(dma_addr, dma_size, ZYNQMP_SHA3_FINAL);
+       ret = eemi_ops->sha_hash(dma_addr, dma_size, ZYNQMP_SHA3_FINAL);
        memcpy(req->result, kbuf, 48);
        dma_free_coherent(dd->dev, dma_size, kbuf, dma_addr);