Lines Matching full:trng

85 	struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv;
89 writel_relaxed(max * 8, trng->mem + EXYNOS_TRNG_FIFO_CTRL);
90 val = readl_poll_timeout(trng->mem + EXYNOS_TRNG_FIFO_CTRL, val,
95 memcpy_fromio(data, trng->mem + EXYNOS_TRNG_FIFO_0, max);
135 struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv;
139 sss_rate = clk_get_rate(trng->clk);
142 * For most TRNG circuits the clock frequency of under 500 kHz
147 dev_err(trng->dev, "clock divider too large: %d\n", val);
151 writel_relaxed(val, trng->mem + EXYNOS_TRNG_CLKDIV);
155 writel_relaxed(val, trng->mem + EXYNOS_TRNG_CTRL);
161 writel_relaxed(0, trng->mem + EXYNOS_TRNG_POST_CTRL);
168 struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv;
174 dev_err(trng->dev, "SMC command for TRNG init failed (%d)\n",
179 dev_info(trng->dev, "Make sure LDFW is loaded by your BL\n");
186 struct exynos_trng_dev *trng;
189 trng = devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL);
190 if (!trng)
193 platform_set_drvdata(pdev, trng);
194 trng->dev = &pdev->dev;
196 trng->flags = (unsigned long)device_get_match_data(&pdev->dev);
198 trng->rng.name = devm_kstrdup(&pdev->dev, dev_name(&pdev->dev),
200 if (!trng->rng.name)
203 trng->rng.priv = (unsigned long)trng;
205 if (trng->flags & EXYNOS_SMC) {
206 trng->rng.init = exynos_trng_init_smc;
207 trng->rng.read = exynos_trng_do_read_smc;
209 trng->rng.init = exynos_trng_init_reg;
210 trng->rng.read = exynos_trng_do_read_reg;
212 trng->mem = devm_platform_ioremap_resource(pdev, 0);
213 if (IS_ERR(trng->mem))
214 return PTR_ERR(trng->mem);
224 trng->clk = devm_clk_get_enabled(&pdev->dev, "secss");
225 if (IS_ERR(trng->clk)) {
226 ret = dev_err_probe(&pdev->dev, PTR_ERR(trng->clk),
231 trng->pclk = devm_clk_get_optional_enabled(&pdev->dev, "pclk");
232 if (IS_ERR(trng->pclk)) {
233 ret = dev_err_probe(&pdev->dev, PTR_ERR(trng->pclk),
238 ret = devm_hwrng_register(&pdev->dev, &trng->rng);
259 struct exynos_trng_dev *trng = platform_get_drvdata(pdev);
261 if (trng->flags & EXYNOS_SMC) {
274 struct exynos_trng_dev *trng = dev_get_drvdata(dev);
277 if (trng->flags & EXYNOS_SMC) {
291 struct exynos_trng_dev *trng = dev_get_drvdata(dev);
300 if (trng->flags & EXYNOS_SMC) {
322 .compatible = "samsung,exynos5250-trng",
324 .compatible = "samsung,exynos850-trng",
333 .name = "exynos-trng",
344 MODULE_DESCRIPTION("H/W TRNG driver for Exynos chips");