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

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
Loading
Loading
Loading
Loading
+24 −23
Original line number Diff line number Diff line
@@ -256,6 +256,7 @@ static void caam_cleanup(struct hwrng *rng)
	}

	rng_unmap_ctx(rng_ctx);
	caam_jr_free(rng_ctx->jrdev);
}

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;
}

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;

	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);
	if (err)
		return err;
		goto free_jrdev;

	ctx->current_buf = 0;
	ctx->cur_buf_idx = 0;

	err = caam_init_buf(ctx, 0);
	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 = {
	.name		= "rng-caam",
	.init           = caam_init,
	.cleanup	= caam_cleanup,
	.read		= caam_read,
};
@@ -305,14 +321,12 @@ void caam_rng_exit(void)
	if (!init_done)
		return;

	caam_jr_free(rng_ctx->jrdev);
	hwrng_unregister(&caam_rng);
	kfree(rng_ctx);
}

int caam_rng_init(struct device *ctrldev)
{
	struct device *dev;
	u32 rng_inst;
	struct caam_drv_private *priv = dev_get_drvdata(ctrldev);
	int err;
@@ -328,21 +342,11 @@ int caam_rng_init(struct device *ctrldev)
	if (!rng_inst)
		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);
	if (!rng_ctx) {
		err = -ENOMEM;
		goto free_caam_alloc;
	}
	err = caam_init_rng(rng_ctx, dev);
	if (err)
		goto free_rng_ctx;
	if (!rng_ctx)
		return -ENOMEM;

	dev_info(dev, "registering rng-caam\n");
	dev_info(ctrldev, "registering rng-caam\n");

	err = hwrng_register(&caam_rng);
	if (!err) {
@@ -350,9 +354,6 @@ int caam_rng_init(struct device *ctrldev)
		return err;
	}

free_rng_ctx:
	kfree(rng_ctx);
free_caam_alloc:
	caam_jr_free(dev);
	return err;
}