Lines Matching +full:rng +full:-

1 // SPDX-License-Identifier: GPL-2.0-only
3 * PIC32 RNG driver
30 struct hwrng rng; member
40 static int pic32_rng_init(struct hwrng *rng) in pic32_rng_init() argument
42 struct pic32_rng *priv = container_of(rng, struct pic32_rng, rng); in pic32_rng_init()
45 writel(TRNGEN | TRNGMOD, priv->base + RNGCON); in pic32_rng_init()
49 static int pic32_rng_read(struct hwrng *rng, void *buf, size_t max, in pic32_rng_read() argument
52 struct pic32_rng *priv = container_of(rng, struct pic32_rng, rng); in pic32_rng_read()
58 t = readl(priv->base + RNGRCNT) & RCNT_MASK; in pic32_rng_read()
61 *data = ((u64)readl(priv->base + RNGSEED2) << 32) + in pic32_rng_read()
62 readl(priv->base + RNGSEED1); in pic32_rng_read()
65 } while (wait && --timeout); in pic32_rng_read()
67 return -EIO; in pic32_rng_read()
70 static void pic32_rng_cleanup(struct hwrng *rng) in pic32_rng_cleanup() argument
72 struct pic32_rng *priv = container_of(rng, struct pic32_rng, rng); in pic32_rng_cleanup()
74 writel(0, priv->base + RNGCON); in pic32_rng_cleanup()
82 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in pic32_rng_probe()
84 return -ENOMEM; in pic32_rng_probe()
86 priv->base = devm_platform_ioremap_resource(pdev, 0); in pic32_rng_probe()
87 if (IS_ERR(priv->base)) in pic32_rng_probe()
88 return PTR_ERR(priv->base); in pic32_rng_probe()
90 clk = devm_clk_get_enabled(&pdev->dev, NULL); in pic32_rng_probe()
94 priv->rng.name = pdev->name; in pic32_rng_probe()
95 priv->rng.init = pic32_rng_init; in pic32_rng_probe()
96 priv->rng.read = pic32_rng_read; in pic32_rng_probe()
97 priv->rng.cleanup = pic32_rng_cleanup; in pic32_rng_probe()
99 return devm_hwrng_register(&pdev->dev, &priv->rng); in pic32_rng_probe()
103 { .compatible = "microchip,pic32mzda-rng", },
111 .name = "pic32-rng",
120 MODULE_DESCRIPTION("Microchip PIC32 RNG Driver");