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@xxxxxxxxxxxxxxx > Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> > Cc: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > Fixes: c25769fddaec ("powerpc/microwatt: Add support for hardware random number generator") > Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx> Reviewed-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > --- > 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, > };