Lines Matching full:rng
3 * rockchip-rng.c True Random Number Generator driver for Rockchip RK3568 SoC
53 struct hwrng rng; member
60 static void rk_rng_write_ctl(struct rk_rng *rng, u32 val, u32 mask) in rk_rng_write_ctl() argument
62 writel((mask << 16) | val, rng->base + TRNG_RNG_CTL); in rk_rng_write_ctl()
65 static int rk_rng_init(struct hwrng *rng) in rk_rng_init() argument
67 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_init()
73 dev_err((struct device *) rk_rng->rng.priv, in rk_rng_init()
90 static void rk_rng_cleanup(struct hwrng *rng) in rk_rng_cleanup() argument
92 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_cleanup()
101 static int rk_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) in rk_rng_read() argument
103 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_read()
108 ret = pm_runtime_resume_and_get((struct device *) rk_rng->rng.priv); in rk_rng_read()
125 pm_runtime_mark_last_busy((struct device *) rk_rng->rng.priv); in rk_rng_read()
126 pm_runtime_put_sync_autosuspend((struct device *) rk_rng->rng.priv); in rk_rng_read()
161 rk_rng->rng.name = dev_driver_string(dev); in rk_rng_probe()
163 rk_rng->rng.init = rk_rng_init; in rk_rng_probe()
164 rk_rng->rng.cleanup = rk_rng_cleanup; in rk_rng_probe()
166 rk_rng->rng.read = rk_rng_read; in rk_rng_probe()
167 rk_rng->rng.priv = (unsigned long) dev; in rk_rng_probe()
168 rk_rng->rng.quality = 900; in rk_rng_probe()
176 ret = devm_hwrng_register(dev, &rk_rng->rng); in rk_rng_probe()
187 rk_rng_cleanup(&rk_rng->rng); in rk_rng_runtime_suspend()
196 return rk_rng_init(&rk_rng->rng); in rk_rng_runtime_resume()
207 { .compatible = "rockchip,rk3568-rng", },
215 .name = "rockchip-rng",