Symbol: rk_rng
drivers/char/hw_random/rockchip-rng.c
142
static void rk_rng_write_ctl(struct rk_rng *rng, u32 val, u32 mask)
drivers/char/hw_random/rockchip-rng.c
147
static inline void rk_rng_writel(struct rk_rng *rng, u32 val, u32 offset)
drivers/char/hw_random/rockchip-rng.c
152
static inline u32 rk_rng_readl(struct rk_rng *rng, u32 offset)
drivers/char/hw_random/rockchip-rng.c
157
static int rk_rng_enable_clks(struct rk_rng *rk_rng)
drivers/char/hw_random/rockchip-rng.c
161
ret = clk_bulk_prepare_enable(rk_rng->clk_num, rk_rng->clk_bulks);
drivers/char/hw_random/rockchip-rng.c
163
dev_err(rk_rng->dev, "Failed to enable clocks: %d\n", ret);
drivers/char/hw_random/rockchip-rng.c
172
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
175
ret = rk_rng_enable_clks(rk_rng);
drivers/char/hw_random/rockchip-rng.c
180
writel(RK_RNG_SAMPLE_CNT, rk_rng->base + TRNG_RNG_SAMPLE_CNT);
drivers/char/hw_random/rockchip-rng.c
183
rk_rng_write_ctl(rk_rng, TRNG_RNG_CTL_LEN_256_BIT |
drivers/char/hw_random/rockchip-rng.c
193
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
196
rk_rng_write_ctl(rk_rng, 0, TRNG_RNG_CTL_MASK);
drivers/char/hw_random/rockchip-rng.c
199
clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
drivers/char/hw_random/rockchip-rng.c
204
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
209
ret = pm_runtime_resume_and_get(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
214
rk_rng_write_ctl(rk_rng, TRNG_RNG_CTL_START, TRNG_RNG_CTL_START);
drivers/char/hw_random/rockchip-rng.c
216
ret = readl_poll_timeout(rk_rng->base + TRNG_RNG_CTL, reg,
drivers/char/hw_random/rockchip-rng.c
224
memcpy_fromio(buf, rk_rng->base + TRNG_RNG_DOUT, to_read);
drivers/char/hw_random/rockchip-rng.c
226
pm_runtime_put_sync_autosuspend(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
233
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
235
return rk_rng_enable_clks(rk_rng);
drivers/char/hw_random/rockchip-rng.c
240
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
245
ret = pm_runtime_resume_and_get(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
249
rk_rng_writel(rk_rng, RKRNG_CTRL_REQ_TRNG | (RKRNG_CTRL_REQ_TRNG << 16),
drivers/char/hw_random/rockchip-rng.c
252
if (readl_poll_timeout(rk_rng->base + RKRNG_STATE, val,
drivers/char/hw_random/rockchip-rng.c
255
dev_err(rk_rng->dev, "timed out waiting for data\n");
drivers/char/hw_random/rockchip-rng.c
260
rk_rng_writel(rk_rng, RKRNG_STATE_TRNG_RDY, RKRNG_STATE);
drivers/char/hw_random/rockchip-rng.c
262
memcpy_fromio(buf, rk_rng->base + RKRNG_TRNG_DATA0, to_read);
drivers/char/hw_random/rockchip-rng.c
265
pm_runtime_put_sync_autosuspend(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
272
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
276
ret = rk_rng_enable_clks(rk_rng);
drivers/char/hw_random/rockchip-rng.c
280
version = rk_rng_readl(rk_rng, TRNG_V1_VERSION);
drivers/char/hw_random/rockchip-rng.c
282
dev_err(rk_rng->dev,
drivers/char/hw_random/rockchip-rng.c
291
if (readl_poll_timeout(rk_rng->base + TRNG_V1_STAT, status,
drivers/char/hw_random/rockchip-rng.c
294
dev_err(rk_rng->dev, "timed out waiting for hwrng to reseed\n");
drivers/char/hw_random/rockchip-rng.c
303
istat = rk_rng_readl(rk_rng, TRNG_V1_ISTAT);
drivers/char/hw_random/rockchip-rng.c
304
rk_rng_writel(rk_rng, istat, TRNG_V1_ISTAT);
drivers/char/hw_random/rockchip-rng.c
307
rk_rng_writel(rk_rng, RK_TRNG_V1_AUTO_RESEED_CNT / 16, TRNG_V1_AUTO_RQSTS);
drivers/char/hw_random/rockchip-rng.c
311
clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
drivers/char/hw_random/rockchip-rng.c
317
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
319
clk_bulk_disable_unprepare(rk_rng->clk_num, rk_rng->clk_bulks);
drivers/char/hw_random/rockchip-rng.c
324
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
drivers/char/hw_random/rockchip-rng.c
329
ret = pm_runtime_resume_and_get(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
334
reg = rk_rng_readl(rk_rng, TRNG_V1_ISTAT);
drivers/char/hw_random/rockchip-rng.c
335
rk_rng_writel(rk_rng, reg, TRNG_V1_ISTAT);
drivers/char/hw_random/rockchip-rng.c
338
rk_rng_writel(rk_rng, TRNG_V1_MODE_256_BIT, TRNG_V1_MODE);
drivers/char/hw_random/rockchip-rng.c
339
rk_rng_writel(rk_rng, TRNG_V1_CTRL_RAND, TRNG_V1_CTRL);
drivers/char/hw_random/rockchip-rng.c
341
ret = readl_poll_timeout_atomic(rk_rng->base + TRNG_V1_ISTAT, reg,
drivers/char/hw_random/rockchip-rng.c
348
memcpy_fromio(buf, rk_rng->base + TRNG_V1_RAND0, to_read);
drivers/char/hw_random/rockchip-rng.c
352
rk_rng_writel(rk_rng, reg, TRNG_V1_ISTAT);
drivers/char/hw_random/rockchip-rng.c
354
rk_rng_writel(rk_rng, TRNG_V1_CTRL_NOP, TRNG_V1_CTRL);
drivers/char/hw_random/rockchip-rng.c
356
pm_runtime_put_sync_autosuspend(rk_rng->dev);
drivers/char/hw_random/rockchip-rng.c
389
struct rk_rng *rk_rng;
drivers/char/hw_random/rockchip-rng.c
392
rk_rng = devm_kzalloc(dev, sizeof(*rk_rng), GFP_KERNEL);
drivers/char/hw_random/rockchip-rng.c
393
if (!rk_rng)
drivers/char/hw_random/rockchip-rng.c
396
rk_rng->soc_data = of_device_get_match_data(dev);
drivers/char/hw_random/rockchip-rng.c
397
rk_rng->base = devm_platform_ioremap_resource(pdev, 0);
drivers/char/hw_random/rockchip-rng.c
398
if (IS_ERR(rk_rng->base))
drivers/char/hw_random/rockchip-rng.c
399
return PTR_ERR(rk_rng->base);
drivers/char/hw_random/rockchip-rng.c
401
rk_rng->clk_num = devm_clk_bulk_get_all(dev, &rk_rng->clk_bulks);
drivers/char/hw_random/rockchip-rng.c
402
if (rk_rng->clk_num < 0)
drivers/char/hw_random/rockchip-rng.c
403
return dev_err_probe(dev, rk_rng->clk_num,
drivers/char/hw_random/rockchip-rng.c
406
if (rk_rng->soc_data->reset_optional)
drivers/char/hw_random/rockchip-rng.c
420
platform_set_drvdata(pdev, rk_rng);
drivers/char/hw_random/rockchip-rng.c
422
rk_rng->rng.name = dev_driver_string(dev);
drivers/char/hw_random/rockchip-rng.c
424
rk_rng->rng.init = rk_rng->soc_data->rk_rng_init;
drivers/char/hw_random/rockchip-rng.c
425
rk_rng->rng.cleanup = rk_rng->soc_data->rk_rng_cleanup;
drivers/char/hw_random/rockchip-rng.c
427
rk_rng->rng.read = rk_rng->soc_data->rk_rng_read;
drivers/char/hw_random/rockchip-rng.c
428
rk_rng->dev = dev;
drivers/char/hw_random/rockchip-rng.c
429
rk_rng->rng.quality = rk_rng->soc_data->quality;
drivers/char/hw_random/rockchip-rng.c
437
ret = devm_hwrng_register(dev, &rk_rng->rng);
drivers/char/hw_random/rockchip-rng.c
446
struct rk_rng *rk_rng = dev_get_drvdata(dev);
drivers/char/hw_random/rockchip-rng.c
448
rk_rng->soc_data->rk_rng_cleanup(&rk_rng->rng);
drivers/char/hw_random/rockchip-rng.c
455
struct rk_rng *rk_rng = dev_get_drvdata(dev);
drivers/char/hw_random/rockchip-rng.c
457
return rk_rng->soc_data->rk_rng_init(&rk_rng->rng);