Lines Matching +full:rng +full:-
20 #include <asm/octeon/cvmx-rnm-defs.h>
28 static int octeon_rng_init(struct hwrng *rng) in octeon_rng_init() argument
31 struct octeon_rng *p = container_of(rng, struct octeon_rng, ops); in octeon_rng_init()
35 ctl.s.rng_en = 1; /* Enable the RNG hardware. */ in octeon_rng_init()
36 cvmx_write_csr((unsigned long)p->control_status, ctl.u64); in octeon_rng_init()
40 static void octeon_rng_cleanup(struct hwrng *rng) in octeon_rng_cleanup() argument
43 struct octeon_rng *p = container_of(rng, struct octeon_rng, ops); in octeon_rng_cleanup()
47 cvmx_write_csr((unsigned long)p->control_status, ctl.u64); in octeon_rng_cleanup()
50 static int octeon_rng_data_read(struct hwrng *rng, u32 *data) in octeon_rng_data_read() argument
52 struct octeon_rng *p = container_of(rng, struct octeon_rng, ops); in octeon_rng_data_read()
54 *data = cvmx_read64_uint32((unsigned long)p->result); in octeon_rng_data_read()
62 struct octeon_rng *rng; in octeon_rng_probe() local
71 rng = devm_kzalloc(&pdev->dev, sizeof(*rng), GFP_KERNEL); in octeon_rng_probe()
72 if (!rng) in octeon_rng_probe()
73 return -ENOMEM; in octeon_rng_probe()
77 return -ENOENT; in octeon_rng_probe()
81 return -ENOENT; in octeon_rng_probe()
84 rng->control_status = devm_ioremap(&pdev->dev, in octeon_rng_probe()
85 res_ports->start, in octeon_rng_probe()
87 if (!rng->control_status) in octeon_rng_probe()
88 return -ENOENT; in octeon_rng_probe()
90 rng->result = devm_ioremap(&pdev->dev, in octeon_rng_probe()
91 res_result->start, in octeon_rng_probe()
93 if (!rng->result) in octeon_rng_probe()
94 return -ENOENT; in octeon_rng_probe()
96 rng->ops = ops; in octeon_rng_probe()
98 platform_set_drvdata(pdev, &rng->ops); in octeon_rng_probe()
99 ret = devm_hwrng_register(&pdev->dev, &rng->ops); in octeon_rng_probe()
101 return -ENOENT; in octeon_rng_probe()
103 dev_info(&pdev->dev, "Octeon Random Number Generator\n"); in octeon_rng_probe()