Lines Matching refs:rng

4 // Based on msm-rng.c and downstream driver
6 #include <crypto/internal/rng.h>
39 struct qcom_rng *rng;
44 static int qcom_rng_read(struct qcom_rng *rng, u8 *data, unsigned int max)
52 ret = readl_poll_timeout(rng->base + PRNG_STATUS, val,
58 val = readl_relaxed(rng->base + PRNG_DATA_OUT);
81 struct qcom_rng *rng = ctx->rng;
84 ret = clk_prepare_enable(rng->clk);
88 mutex_lock(&rng->lock);
90 ret = qcom_rng_read(rng, dstn, dlen);
92 mutex_unlock(&rng->lock);
93 clk_disable_unprepare(rng->clk);
104 static int qcom_rng_enable(struct qcom_rng *rng)
109 ret = clk_prepare_enable(rng->clk);
114 val = readl_relaxed(rng->base + PRNG_CONFIG);
118 val = readl_relaxed(rng->base + PRNG_LFSR_CFG);
121 writel(val, rng->base + PRNG_LFSR_CFG);
123 val = readl_relaxed(rng->base + PRNG_CONFIG);
125 writel(val, rng->base + PRNG_CONFIG);
128 clk_disable_unprepare(rng->clk);
137 ctx->rng = qcom_rng_dev;
139 if (!ctx->rng->skip_init)
140 return qcom_rng_enable(ctx->rng);
151 .cra_driver_name = "qcom-rng",
162 struct qcom_rng *rng;
165 rng = devm_kzalloc(&pdev->dev, sizeof(*rng), GFP_KERNEL);
166 if (!rng)
169 platform_set_drvdata(pdev, rng);
170 mutex_init(&rng->lock);
172 rng->base = devm_platform_ioremap_resource(pdev, 0);
173 if (IS_ERR(rng->base))
174 return PTR_ERR(rng->base);
176 rng->clk = devm_clk_get_optional(&pdev->dev, "core");
177 if (IS_ERR(rng->clk))
178 return PTR_ERR(rng->clk);
180 rng->skip_init = (unsigned long)device_get_match_data(&pdev->dev);
182 qcom_rng_dev = rng;
185 dev_err(&pdev->dev, "Register crypto rng failed: %d\n", ret);