Lines Matching refs:rng
82 static int check_rng_health(struct cavium_rng *rng)
90 if (!rng->pf_regbase)
93 status = readq(rng->pf_regbase + HEALTH_STATUS_REG);
95 dev_err(&rng->pdev->dev, "HWRNG: Startup health test failed\n");
110 cur_err = (cycles * 1000000000) / rng->clock_rate; /* In nanosec */
116 rng->prev_error = 0;
117 rng->prev_time = 0;
121 if (rng->prev_error) {
125 time_elapsed = (cur_time - rng->prev_time) * 10;
126 time_elapsed += rng->prev_error;
133 dev_err(&rng->pdev->dev, "HWRNG failure detected\n");
134 rng->prev_error = cur_err;
135 rng->prev_time = cur_time;
140 rng->prev_error = cur_err;
141 rng->prev_time = cur_time;
146 static int cavium_rng_read(struct hwrng *rng, void *dat, size_t max, bool wait)
148 struct cavium_rng *p = container_of(rng, struct cavium_rng, ops);
169 static int cavium_map_pf_regs(struct cavium_rng *rng)
174 if (is_octeontx(rng->pdev)) {
175 rng->pf_regbase = NULL;
186 rng->pf_regbase = ioremap(pci_resource_start(pdev, 0),
188 if (!rng->pf_regbase) {
197 rng->clock_rate = rng_get_coprocessor_clkrate();
206 struct cavium_rng *rng;
209 rng = devm_kzalloc(&pdev->dev, sizeof(*rng), GFP_KERNEL);
210 if (!rng)
213 rng->pdev = pdev;
216 rng->result = pcim_iomap(pdev, 0, 0);
217 if (!rng->result) {
222 rng->ops.name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
223 "cavium-rng-%s", dev_name(&pdev->dev));
224 if (!rng->ops.name)
227 rng->ops.read = cavium_rng_read;
229 pci_set_drvdata(pdev, rng);
232 ret = cavium_map_pf_regs(rng);
236 ret = devm_hwrng_register(&pdev->dev, &rng->ops);
248 struct cavium_rng *rng;
250 rng = pci_get_drvdata(pdev);
251 iounmap(rng->pf_regbase);