Message ID | 20220611151015.548325-2-Jason@zx2c4.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | powerpc: wire up rng during setup_arch | expand |
Le 11/06/2022 à 17:10, Jason A. Donenfeld a écrit : > The platform's RNG must be available before random_init() in order to be > useful for initial seeding, which in turn means that it needs to be > called from setup_arch(), rather than from an init call. Fortunately, > each platform already has a setup_arch function pointer, which means > it's easy to wire this up. This commit also removes some noisy log > messages that don't add much. > > Cc: stable@vger.kernel.org > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Christophe Leroy <christophe.leroy@csgroup.eu> > Fixes: c25769fddaec ("powerpc/microwatt: Add support for hardware random number generator") > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > arch/powerpc/platforms/microwatt/microwatt.h | 7 +++++++ > arch/powerpc/platforms/microwatt/rng.c | 10 +++------- > arch/powerpc/platforms/microwatt/setup.c | 8 ++++++++ > 3 files changed, 18 insertions(+), 7 deletions(-) > create mode 100644 arch/powerpc/platforms/microwatt/microwatt.h > > diff --git a/arch/powerpc/platforms/microwatt/microwatt.h b/arch/powerpc/platforms/microwatt/microwatt.h > new file mode 100644 > index 000000000000..335417e95e66 > --- /dev/null > +++ b/arch/powerpc/platforms/microwatt/microwatt.h > @@ -0,0 +1,7 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _MICROWATT_H > +#define _MICROWATT_H > + > +void microwatt_rng_init(void); > + > +#endif /* _MICROWATT_H */ > diff --git a/arch/powerpc/platforms/microwatt/rng.c b/arch/powerpc/platforms/microwatt/rng.c > index 7bc4d1cbfaf0..8ece87d005c8 100644 > --- a/arch/powerpc/platforms/microwatt/rng.c > +++ b/arch/powerpc/platforms/microwatt/rng.c > @@ -11,6 +11,7 @@ > #include <asm/archrandom.h> > #include <asm/cputable.h> > #include <asm/machdep.h> > +#include "microwatt.h" > > #define DARN_ERR 0xFFFFFFFFFFFFFFFFul > > @@ -29,7 +30,7 @@ static int microwatt_get_random_darn(unsigned long *v) > return 1; > } > > -static __init int rng_init(void) > +void __init microwatt_rng_init(void) > { > unsigned long val; > int i; > @@ -37,12 +38,7 @@ static __init int rng_init(void) > for (i = 0; i < 10; i++) { > if (microwatt_get_random_darn(&val)) { > ppc_md.get_random_seed = microwatt_get_random_darn; > - return 0; > + return; > } > } > - > - pr_warn("Unable to use DARN for get_random_seed()\n"); > - > - return -EIO; > } > -machine_subsys_initcall(, rng_init); > diff --git a/arch/powerpc/platforms/microwatt/setup.c b/arch/powerpc/platforms/microwatt/setup.c > index 0b02603bdb74..6b32539395a4 100644 > --- a/arch/powerpc/platforms/microwatt/setup.c > +++ b/arch/powerpc/platforms/microwatt/setup.c > @@ -16,6 +16,8 @@ > #include <asm/xics.h> > #include <asm/udbg.h> > > +#include "microwatt.h" > + > static void __init microwatt_init_IRQ(void) > { > xics_init(); > @@ -32,10 +34,16 @@ static int __init microwatt_populate(void) > } > machine_arch_initcall(microwatt, microwatt_populate); > > +static void __init microwatt_setup_arch(void) > +{ > + microwatt_rng_init(); > +} > + > define_machine(microwatt) { > .name = "microwatt", > .probe = microwatt_probe, > .init_IRQ = microwatt_init_IRQ, > + .setup_arch = microwatt_setup_arch, > .progress = udbg_progress, > .calibrate_decr = generic_calibrate_decr, > };
diff --git a/arch/powerpc/platforms/microwatt/microwatt.h b/arch/powerpc/platforms/microwatt/microwatt.h new file mode 100644 index 000000000000..335417e95e66 --- /dev/null +++ b/arch/powerpc/platforms/microwatt/microwatt.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _MICROWATT_H +#define _MICROWATT_H + +void microwatt_rng_init(void); + +#endif /* _MICROWATT_H */ diff --git a/arch/powerpc/platforms/microwatt/rng.c b/arch/powerpc/platforms/microwatt/rng.c index 7bc4d1cbfaf0..8ece87d005c8 100644 --- a/arch/powerpc/platforms/microwatt/rng.c +++ b/arch/powerpc/platforms/microwatt/rng.c @@ -11,6 +11,7 @@ #include <asm/archrandom.h> #include <asm/cputable.h> #include <asm/machdep.h> +#include "microwatt.h" #define DARN_ERR 0xFFFFFFFFFFFFFFFFul @@ -29,7 +30,7 @@ static int microwatt_get_random_darn(unsigned long *v) return 1; } -static __init int rng_init(void) +void __init microwatt_rng_init(void) { unsigned long val; int i; @@ -37,12 +38,7 @@ static __init int rng_init(void) for (i = 0; i < 10; i++) { if (microwatt_get_random_darn(&val)) { ppc_md.get_random_seed = microwatt_get_random_darn; - return 0; + return; } } - - pr_warn("Unable to use DARN for get_random_seed()\n"); - - return -EIO; } -machine_subsys_initcall(, rng_init); diff --git a/arch/powerpc/platforms/microwatt/setup.c b/arch/powerpc/platforms/microwatt/setup.c index 0b02603bdb74..6b32539395a4 100644 --- a/arch/powerpc/platforms/microwatt/setup.c +++ b/arch/powerpc/platforms/microwatt/setup.c @@ -16,6 +16,8 @@ #include <asm/xics.h> #include <asm/udbg.h> +#include "microwatt.h" + static void __init microwatt_init_IRQ(void) { xics_init(); @@ -32,10 +34,16 @@ static int __init microwatt_populate(void) } machine_arch_initcall(microwatt, microwatt_populate); +static void __init microwatt_setup_arch(void) +{ + microwatt_rng_init(); +} + define_machine(microwatt) { .name = "microwatt", .probe = microwatt_probe, .init_IRQ = microwatt_init_IRQ, + .setup_arch = microwatt_setup_arch, .progress = udbg_progress, .calibrate_decr = generic_calibrate_decr, };
The platform's RNG must be available before random_init() in order to be useful for initial seeding, which in turn means that it needs to be called from setup_arch(), rather than from an init call. Fortunately, each platform already has a setup_arch function pointer, which means it's easy to wire this up. This commit also removes some noisy log messages that don't add much. Cc: stable@vger.kernel.org Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Fixes: c25769fddaec ("powerpc/microwatt: Add support for hardware random number generator") Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> --- arch/powerpc/platforms/microwatt/microwatt.h | 7 +++++++ arch/powerpc/platforms/microwatt/rng.c | 10 +++------- arch/powerpc/platforms/microwatt/setup.c | 8 ++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 arch/powerpc/platforms/microwatt/microwatt.h