powerpc/microwatt: Make microwatt_get_random_darn() static
[linux-2.6-microblaze.git] / arch / powerpc / platforms / microwatt / rng.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Derived from arch/powerpc/platforms/powernv/rng.c, which is:
4  * Copyright 2013, Michael Ellerman, IBM Corporation.
5  */
6
7 #define pr_fmt(fmt)     "microwatt-rng: " fmt
8
9 #include <linux/kernel.h>
10 #include <linux/smp.h>
11 #include <asm/archrandom.h>
12 #include <asm/cputable.h>
13 #include <asm/machdep.h>
14
15 #define DARN_ERR 0xFFFFFFFFFFFFFFFFul
16
17 static int microwatt_get_random_darn(unsigned long *v)
18 {
19         unsigned long val;
20
21         /* Using DARN with L=1 - 64-bit conditioned random number */
22         asm volatile(PPC_DARN(%0, 1) : "=r"(val));
23
24         if (val == DARN_ERR)
25                 return 0;
26
27         *v = val;
28
29         return 1;
30 }
31
32 static __init int rng_init(void)
33 {
34         unsigned long val;
35         int i;
36
37         for (i = 0; i < 10; i++) {
38                 if (microwatt_get_random_darn(&val)) {
39                         ppc_md.get_random_seed = microwatt_get_random_darn;
40                         return 0;
41                 }
42         }
43
44         pr_warn("Unable to use DARN for get_random_seed()\n");
45
46         return -EIO;
47 }
48 machine_subsys_initcall(, rng_init);