Commit 8483c831 authored by Andrey Smirnov's avatar Andrey Smirnov Committed by Herbert Xu

crypto: caam - use struct hwrng's .init for initialization

Make caamrng code a bit more symmetric by moving initialization code
to .init hook of struct hwrng.
Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
Reviewed-by: default avatarHoria Geantă <horia.geanta@nxp.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Horia Geantă <horia.geanta@nxp.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Iuliana Prodan <iuliana.prodan@nxp.com>
Cc: linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-imx@nxp.com
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent f0ac02c7
...@@ -256,6 +256,7 @@ static void caam_cleanup(struct hwrng *rng) ...@@ -256,6 +256,7 @@ static void caam_cleanup(struct hwrng *rng)
} }
rng_unmap_ctx(rng_ctx); rng_unmap_ctx(rng_ctx);
caam_jr_free(rng_ctx->jrdev);
} }
static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id) static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
...@@ -274,28 +275,43 @@ static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id) ...@@ -274,28 +275,43 @@ static int caam_init_buf(struct caam_rng_ctx *ctx, int buf_id)
return 0; return 0;
} }
static int caam_init_rng(struct caam_rng_ctx *ctx, struct device *jrdev) static int caam_init(struct hwrng *rng)
{ {
struct caam_rng_ctx *ctx = rng_ctx;
int err; int err;
ctx->jrdev = jrdev; ctx->jrdev = caam_jr_alloc();
err = PTR_ERR_OR_ZERO(ctx->jrdev);
if (err) {
pr_err("Job Ring Device allocation for transform failed\n");
return err;
}
err = rng_create_sh_desc(ctx); err = rng_create_sh_desc(ctx);
if (err) if (err)
return err; goto free_jrdev;
ctx->current_buf = 0; ctx->current_buf = 0;
ctx->cur_buf_idx = 0; ctx->cur_buf_idx = 0;
err = caam_init_buf(ctx, 0); err = caam_init_buf(ctx, 0);
if (err) if (err)
return err; goto free_jrdev;
err = caam_init_buf(ctx, 1);
if (err)
goto free_jrdev;
return caam_init_buf(ctx, 1); return 0;
free_jrdev:
caam_jr_free(ctx->jrdev);
return err;
} }
static struct hwrng caam_rng = { static struct hwrng caam_rng = {
.name = "rng-caam", .name = "rng-caam",
.init = caam_init,
.cleanup = caam_cleanup, .cleanup = caam_cleanup,
.read = caam_read, .read = caam_read,
}; };
...@@ -305,14 +321,12 @@ void caam_rng_exit(void) ...@@ -305,14 +321,12 @@ void caam_rng_exit(void)
if (!init_done) if (!init_done)
return; return;
caam_jr_free(rng_ctx->jrdev);
hwrng_unregister(&caam_rng); hwrng_unregister(&caam_rng);
kfree(rng_ctx); kfree(rng_ctx);
} }
int caam_rng_init(struct device *ctrldev) int caam_rng_init(struct device *ctrldev)
{ {
struct device *dev;
u32 rng_inst; u32 rng_inst;
struct caam_drv_private *priv = dev_get_drvdata(ctrldev); struct caam_drv_private *priv = dev_get_drvdata(ctrldev);
int err; int err;
...@@ -328,21 +342,11 @@ int caam_rng_init(struct device *ctrldev) ...@@ -328,21 +342,11 @@ int caam_rng_init(struct device *ctrldev)
if (!rng_inst) if (!rng_inst)
return 0; return 0;
dev = caam_jr_alloc();
if (IS_ERR(dev)) {
pr_err("Job Ring Device allocation for transform failed\n");
return PTR_ERR(dev);
}
rng_ctx = kmalloc(sizeof(*rng_ctx), GFP_DMA | GFP_KERNEL); rng_ctx = kmalloc(sizeof(*rng_ctx), GFP_DMA | GFP_KERNEL);
if (!rng_ctx) { if (!rng_ctx)
err = -ENOMEM; return -ENOMEM;
goto free_caam_alloc;
}
err = caam_init_rng(rng_ctx, dev);
if (err)
goto free_rng_ctx;
dev_info(dev, "registering rng-caam\n"); dev_info(ctrldev, "registering rng-caam\n");
err = hwrng_register(&caam_rng); err = hwrng_register(&caam_rng);
if (!err) { if (!err) {
...@@ -350,9 +354,6 @@ int caam_rng_init(struct device *ctrldev) ...@@ -350,9 +354,6 @@ int caam_rng_init(struct device *ctrldev)
return err; return err;
} }
free_rng_ctx:
kfree(rng_ctx); kfree(rng_ctx);
free_caam_alloc:
caam_jr_free(dev);
return err; return err;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment