#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
{
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;
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);
{
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;
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);
#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
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) {
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;
}
{
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;
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;
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;
{
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);