lkml.org 
[lkml]   [2020]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 2/9] crypto: caam - use struct hwrng's .init for initialization
    Date
    Make caamrng code a bit more symmetric by moving initialization code
    to .init hook of struct hwrng.

    Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
    Reviewed-by: Horia 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
    ---
    drivers/crypto/caam/caamrng.c | 47 ++++++++++++++++++-----------------
    1 file changed, 24 insertions(+), 23 deletions(-)

    diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c
    index 34cbb4a56f05..69a02ac5de54 100644
    --- a/drivers/crypto/caam/caamrng.c
    +++ b/drivers/crypto/caam/caamrng.c
    @@ -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;
    }
    --
    2.21.0
    \
     
     \ /
      Last update: 2020-03-19 17:13    [W:2.935 / U:0.812 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site