Lines Matching refs:ks_sa_rng

83 struct ks_sa_rng {  struct
117 struct ks_sa_rng *ks_sa_rng = dev_get_drvdata(dev); in ks_sa_rng_init() local
118 unsigned long clk_rate = clk_get_rate(ks_sa_rng->clk); in ks_sa_rng_init()
121 regmap_write_bits(ks_sa_rng->regmap_cfg, SA_CMD_STATUS_OFS, in ks_sa_rng_init()
126 writel(0, &ks_sa_rng->reg_rng->control); in ks_sa_rng_init()
128 writel(value, &ks_sa_rng->reg_rng->control); in ks_sa_rng_init()
137 writel(value, &ks_sa_rng->reg_rng->config); in ks_sa_rng_init()
140 writel(0, &ks_sa_rng->reg_rng->intmask); in ks_sa_rng_init()
143 value = readl(&ks_sa_rng->reg_rng->control); in ks_sa_rng_init()
145 writel(value, &ks_sa_rng->reg_rng->control); in ks_sa_rng_init()
147 ks_sa_rng->refill_delay_ns = refill_delay_ns(clk_rate); in ks_sa_rng_init()
148 ks_sa_rng->ready_ts = ktime_get_ns() + in ks_sa_rng_init()
157 struct ks_sa_rng *ks_sa_rng = dev_get_drvdata(dev); in ks_sa_rng_cleanup() local
160 writel(0, &ks_sa_rng->reg_rng->control); in ks_sa_rng_cleanup()
161 regmap_write_bits(ks_sa_rng->regmap_cfg, SA_CMD_STATUS_OFS, in ks_sa_rng_cleanup()
168 struct ks_sa_rng *ks_sa_rng = dev_get_drvdata(dev); in ks_sa_rng_data_read() local
171 data[0] = readl(&ks_sa_rng->reg_rng->output_l); in ks_sa_rng_data_read()
172 data[1] = readl(&ks_sa_rng->reg_rng->output_h); in ks_sa_rng_data_read()
174 writel(TRNG_INTACK_REG_READY, &ks_sa_rng->reg_rng->intack); in ks_sa_rng_data_read()
175 ks_sa_rng->ready_ts = ktime_get_ns() + ks_sa_rng->refill_delay_ns; in ks_sa_rng_data_read()
183 struct ks_sa_rng *ks_sa_rng = dev_get_drvdata(dev); in ks_sa_rng_data_present() local
189 if (wait && now < ks_sa_rng->ready_ts) { in ks_sa_rng_data_present()
192 DIV_ROUND_UP((u32)(ks_sa_rng->ready_ts - now), 1000); in ks_sa_rng_data_present()
198 ready = readl(&ks_sa_rng->reg_rng->status); in ks_sa_rng_data_present()
212 struct ks_sa_rng *ks_sa_rng; in ks_sa_rng_probe() local
216 ks_sa_rng = devm_kzalloc(dev, sizeof(*ks_sa_rng), GFP_KERNEL); in ks_sa_rng_probe()
217 if (!ks_sa_rng) in ks_sa_rng_probe()
220 ks_sa_rng->dev = dev; in ks_sa_rng_probe()
221 ks_sa_rng->rng = (struct hwrng) { in ks_sa_rng_probe()
228 ks_sa_rng->rng.priv = (unsigned long)dev; in ks_sa_rng_probe()
230 ks_sa_rng->reg_rng = devm_platform_ioremap_resource(pdev, 0); in ks_sa_rng_probe()
231 if (IS_ERR(ks_sa_rng->reg_rng)) in ks_sa_rng_probe()
232 return PTR_ERR(ks_sa_rng->reg_rng); in ks_sa_rng_probe()
234 ks_sa_rng->regmap_cfg = in ks_sa_rng_probe()
238 if (IS_ERR(ks_sa_rng->regmap_cfg)) { in ks_sa_rng_probe()
251 platform_set_drvdata(pdev, ks_sa_rng); in ks_sa_rng_probe()
253 return devm_hwrng_register(&pdev->dev, &ks_sa_rng->rng); in ks_sa_rng_probe()