Lines Matching refs:rk_rng
52 struct rk_rng { struct
60 static void rk_rng_write_ctl(struct rk_rng *rng, u32 val, u32 mask) in rk_rng_write_ctl() argument
67 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_init() local
71 ret = clk_bulk_prepare_enable(rk_rng->clk_num, rk_rng->clk_bulks); in rk_rng_init()
73 dev_err((struct device *) rk_rng->rng.priv, in rk_rng_init()
79 writel(RK_RNG_SAMPLE_CNT, rk_rng->base + TRNG_RNG_SAMPLE_CNT); in rk_rng_init()
82 rk_rng_write_ctl(rk_rng, TRNG_RNG_CTL_LEN_256_BIT | in rk_rng_init()
92 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_cleanup() local
95 rk_rng_write_ctl(rk_rng, 0, TRNG_RNG_CTL_MASK); in rk_rng_cleanup()
98 clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks); in rk_rng_cleanup()
103 struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng); in rk_rng_read() local
108 ret = pm_runtime_resume_and_get((struct device *) rk_rng->rng.priv); in rk_rng_read()
113 rk_rng_write_ctl(rk_rng, TRNG_RNG_CTL_START, TRNG_RNG_CTL_START); in rk_rng_read()
115 ret = readl_poll_timeout(rk_rng->base + TRNG_RNG_CTL, reg, in rk_rng_read()
123 memcpy_fromio(buf, rk_rng->base + TRNG_RNG_DOUT, to_read); 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()
135 struct rk_rng *rk_rng; in rk_rng_probe() local
138 rk_rng = devm_kzalloc(dev, sizeof(*rk_rng), GFP_KERNEL); in rk_rng_probe()
139 if (!rk_rng) in rk_rng_probe()
142 rk_rng->base = devm_platform_ioremap_resource(pdev, 0); in rk_rng_probe()
143 if (IS_ERR(rk_rng->base)) in rk_rng_probe()
144 return PTR_ERR(rk_rng->base); in rk_rng_probe()
146 rk_rng->clk_num = devm_clk_bulk_get_all(dev, &rk_rng->clk_bulks); in rk_rng_probe()
147 if (rk_rng->clk_num < 0) in rk_rng_probe()
148 return dev_err_probe(dev, rk_rng->clk_num, in rk_rng_probe()
159 platform_set_drvdata(pdev, rk_rng); in rk_rng_probe()
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()
185 struct rk_rng *rk_rng = dev_get_drvdata(dev); in rk_rng_runtime_suspend() local
187 rk_rng_cleanup(&rk_rng->rng); in rk_rng_runtime_suspend()
194 struct rk_rng *rk_rng = dev_get_drvdata(dev); in rk_rng_runtime_resume() local
196 return rk_rng_init(&rk_rng->rng); in rk_rng_runtime_resume()