File tree Expand file tree Collapse file tree 3 files changed +50
-1
lines changed
arch/powerpc/platforms/microwatt Expand file tree Collapse file tree 3 files changed +50
-1
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ config PPC_MICROWATT
7
7
select PPC_ICP_NATIVE
8
8
select PPC_NATIVE
9
9
select PPC_UDBG_16550
10
+ select ARCH_RANDOM
10
11
help
11
12
This option enables support for FPGA-based Microwatt implementations.
12
13
Original file line number Diff line number Diff line change 1
- obj-y += setup.o
1
+ obj-y += setup.o rng.o
Original file line number Diff line number Diff line change
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
+ 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 );
You can’t perform that action at this time.
0 commit comments