Lines Matching refs:ctx

105 	struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) arg;  in xgene_rng_expired_timer()  local
108 disable_irq(ctx->irq); in xgene_rng_expired_timer()
109 ctx->failure_cnt = 0; in xgene_rng_expired_timer()
110 del_timer(&ctx->failure_timer); in xgene_rng_expired_timer()
111 enable_irq(ctx->irq); in xgene_rng_expired_timer()
114 static void xgene_rng_start_timer(struct xgene_rng_dev *ctx) in xgene_rng_start_timer() argument
116 ctx->failure_timer.data = (unsigned long) ctx; in xgene_rng_start_timer()
117 ctx->failure_timer.function = xgene_rng_expired_timer; in xgene_rng_start_timer()
118 ctx->failure_timer.expires = jiffies + 120 * HZ; in xgene_rng_start_timer()
119 add_timer(&ctx->failure_timer); in xgene_rng_start_timer()
125 static void xgene_rng_init_fro(struct xgene_rng_dev *ctx, u32 fro_val) in xgene_rng_init_fro() argument
127 writel(fro_val, ctx->csr_base + RNG_FRODETUNE); in xgene_rng_init_fro()
128 writel(0x00000000, ctx->csr_base + RNG_ALARMMASK); in xgene_rng_init_fro()
129 writel(0x00000000, ctx->csr_base + RNG_ALARMSTOP); in xgene_rng_init_fro()
130 writel(0xFFFFFFFF, ctx->csr_base + RNG_FROENABLE); in xgene_rng_init_fro()
133 static void xgene_rng_chk_overflow(struct xgene_rng_dev *ctx) in xgene_rng_chk_overflow() argument
137 val = readl(ctx->csr_base + RNG_INTR_STS_ACK); in xgene_rng_chk_overflow()
144 dev_err(ctx->dev, "test monobit failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
152 dev_err(ctx->dev, "test poker failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
158 dev_err(ctx->dev, "test long run failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
165 dev_err(ctx->dev, "test run failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
168 dev_err(ctx->dev, "noise failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
174 dev_err(ctx->dev, "stuck out failure error 0x%08X\n", val); in xgene_rng_chk_overflow()
180 if (++ctx->failure_cnt == 1) { in xgene_rng_chk_overflow()
182 ctx->failure_ts = jiffies; in xgene_rng_chk_overflow()
183 frostopped = readl(ctx->csr_base + RNG_ALARMSTOP); in xgene_rng_chk_overflow()
184 xgene_rng_init_fro(ctx, frostopped); in xgene_rng_chk_overflow()
190 xgene_rng_start_timer(ctx); in xgene_rng_chk_overflow()
193 if (time_after(ctx->failure_ts + 60 * HZ, jiffies)) { in xgene_rng_chk_overflow()
194 dev_err(ctx->dev, in xgene_rng_chk_overflow()
199 ctx->failure_ts = jiffies; in xgene_rng_chk_overflow()
200 ctx->failure_cnt = 1; in xgene_rng_chk_overflow()
206 xgene_rng_start_timer(ctx); in xgene_rng_chk_overflow()
208 frostopped = readl(ctx->csr_base + RNG_ALARMSTOP); in xgene_rng_chk_overflow()
209 xgene_rng_init_fro(ctx, frostopped); in xgene_rng_chk_overflow()
213 writel(val, ctx->csr_base + RNG_INTR_STS_ACK); in xgene_rng_chk_overflow()
218 struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) id; in xgene_rng_irq_handler() local
221 xgene_rng_chk_overflow(ctx); in xgene_rng_irq_handler()
228 struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) rng->priv; in xgene_rng_data_present() local
232 val = readl(ctx->csr_base + RNG_INTR_STS_ACK); in xgene_rng_data_present()
243 struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) rng->priv; in xgene_rng_data_read() local
246 for (i = 0; i < ctx->datum_size; i++) in xgene_rng_data_read()
247 data[i] = readl(ctx->csr_base + RNG_INOUT_0 + i * 4); in xgene_rng_data_read()
250 writel(READY_MASK, ctx->csr_base + RNG_INTR_STS_ACK); in xgene_rng_data_read()
252 return ctx->datum_size << 2; in xgene_rng_data_read()
255 static void xgene_rng_init_internal(struct xgene_rng_dev *ctx) in xgene_rng_init_internal() argument
259 writel(0x00000000, ctx->csr_base + RNG_CONTROL); in xgene_rng_init_internal()
263 writel(val, ctx->csr_base + RNG_CONFIG); in xgene_rng_init_internal()
266 writel(val, ctx->csr_base + RNG_ALARMCNT); in xgene_rng_init_internal()
268 xgene_rng_init_fro(ctx, 0); in xgene_rng_init_internal()
277 READY_MASK, ctx->csr_base + RNG_INTR_STS_ACK); in xgene_rng_init_internal()
287 writel(val, ctx->csr_base + RNG_CONTROL); in xgene_rng_init_internal()
292 struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) rng->priv; in xgene_rng_init() local
294 ctx->failure_cnt = 0; in xgene_rng_init()
295 init_timer(&ctx->failure_timer); in xgene_rng_init()
297 ctx->revision = readl(ctx->csr_base + RNG_EIP_REV); in xgene_rng_init()
299 dev_dbg(ctx->dev, "Rev %d.%d.%d\n", in xgene_rng_init()
300 MAJOR_HW_REV_RD(ctx->revision), in xgene_rng_init()
301 MINOR_HW_REV_RD(ctx->revision), in xgene_rng_init()
302 HW_PATCH_LEVEL_RD(ctx->revision)); in xgene_rng_init()
304 dev_dbg(ctx->dev, "Options 0x%08X", in xgene_rng_init()
305 readl(ctx->csr_base + RNG_OPTIONS)); in xgene_rng_init()
307 xgene_rng_init_internal(ctx); in xgene_rng_init()
309 ctx->datum_size = RNG_MAX_DATUM; in xgene_rng_init()
332 struct xgene_rng_dev *ctx; in xgene_rng_probe() local
335 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in xgene_rng_probe()
336 if (!ctx) in xgene_rng_probe()
339 ctx->dev = &pdev->dev; in xgene_rng_probe()
340 platform_set_drvdata(pdev, ctx); in xgene_rng_probe()
343 ctx->csr_base = devm_ioremap_resource(&pdev->dev, res); in xgene_rng_probe()
344 if (IS_ERR(ctx->csr_base)) in xgene_rng_probe()
345 return PTR_ERR(ctx->csr_base); in xgene_rng_probe()
352 ctx->irq = rc; in xgene_rng_probe()
355 ctx->csr_base, ctx->irq); in xgene_rng_probe()
357 rc = devm_request_irq(&pdev->dev, ctx->irq, xgene_rng_irq_handler, 0, in xgene_rng_probe()
358 dev_name(&pdev->dev), ctx); in xgene_rng_probe()
365 ctx->clk = devm_clk_get(&pdev->dev, NULL); in xgene_rng_probe()
366 if (IS_ERR(ctx->clk)) { in xgene_rng_probe()
369 rc = clk_prepare_enable(ctx->clk); in xgene_rng_probe()
377 xgene_rng_func.priv = (unsigned long) ctx; in xgene_rng_probe()
382 if (!IS_ERR(ctx->clk)) in xgene_rng_probe()
383 clk_disable_unprepare(ctx->clk); in xgene_rng_probe()
391 if (!IS_ERR(ctx->clk)) in xgene_rng_probe()
392 clk_disable_unprepare(ctx->clk); in xgene_rng_probe()
402 struct xgene_rng_dev *ctx = platform_get_drvdata(pdev); in xgene_rng_remove() local
408 if (!IS_ERR(ctx->clk)) in xgene_rng_remove()
409 clk_disable_unprepare(ctx->clk); in xgene_rng_remove()