Skip to content

Commit

Permalink
crypto: qcom-rng - Add support for prng-ee
Browse files Browse the repository at this point in the history
Qcom 8996 and later chips features multiple Execution Environments
(EE) and secure world is typically responsible for configuring the
prng.

Add driver data for qcom,prng as 0 and qcom,prng-ee as 1 and use
that to skip initialization routine.

Signed-off-by: Vinod Koul <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
vinodkoul authored and herbertx committed Jul 27, 2018
1 parent 3be36ce commit ba3ab63
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions drivers/crypto/qcom-rng.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ struct qcom_rng {
struct mutex lock;
void __iomem *base;
struct clk *clk;
unsigned int skip_init;
};

struct qcom_rng_ctx {
Expand Down Expand Up @@ -128,7 +129,10 @@ static int qcom_rng_init(struct crypto_tfm *tfm)

ctx->rng = qcom_rng_dev;

return qcom_rng_enable(ctx->rng);
if (!ctx->rng->skip_init)
return qcom_rng_enable(ctx->rng);

return 0;
}

static struct rng_alg qcom_rng_alg = {
Expand Down Expand Up @@ -168,6 +172,8 @@ static int qcom_rng_probe(struct platform_device *pdev)
if (IS_ERR(rng->clk))
return PTR_ERR(rng->clk);

rng->skip_init = (unsigned long)device_get_match_data(&pdev->dev);

qcom_rng_dev = rng;
ret = crypto_register_rng(&qcom_rng_alg);
if (ret) {
Expand All @@ -188,7 +194,8 @@ static int qcom_rng_remove(struct platform_device *pdev)
}

static const struct of_device_id qcom_rng_of_match[] = {
{ .compatible = "qcom,prng" },
{ .compatible = "qcom,prng", .data = (void *)0},
{ .compatible = "qcom,prng-ee", .data = (void *)1},
{}
};
MODULE_DEVICE_TABLE(of, qcom_rng_of_match);
Expand Down

0 comments on commit ba3ab63

Please sign in to comment.