Message ID | 20240102154654.191055-6-macroalpha82@gmail.com |
---|---|
State | Accepted |
Commit | d2048bafae4014fbfacb2fc860da72c1bc525354 |
Delegated to: | Kever Yang |
Headers | show |
Series | Add Additional Boards and Features to RGxx3 | expand |
On 2024/1/2 23:46, Chris Morgan wrote: > From: Chris Morgan <macromorgan@hotmail.com> > > Allow all rockchip devices to use the hardware RNG to seed Linux > RNG. > > Signed-off-by: Chris Morgan <macromorgan@hotmail.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Thanks, - Kever > --- > arch/arm/mach-rockchip/board.c | 32 ++++++++++++++++++++++ > board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c | 29 -------------------- > 2 files changed, 32 insertions(+), 29 deletions(-) > > diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c > index 57f08e0be0..77145524ea 100644 > --- a/arch/arm/mach-rockchip/board.c > +++ b/arch/arm/mach-rockchip/board.c > @@ -348,3 +348,35 @@ __weak int misc_init_r(void) > return ret; > } > #endif > + > +#if IS_ENABLED(CONFIG_BOARD_RNG_SEED) && IS_ENABLED(CONFIG_RNG_ROCKCHIP) > +#include <rng.h> > + > +/* Use hardware rng to seed Linux random. */ > +__weak int board_rng_seed(struct abuf *buf) > +{ > + struct udevice *dev; > + size_t len = 0x8; > + u64 *data; > + > + data = malloc(len); > + if (!data) { > + printf("Out of memory\n"); > + return -ENOMEM; > + } > + > + if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { > + printf("No RNG device\n"); > + return -ENODEV; > + } > + > + if (dm_rng_read(dev, data, len)) { > + printf("Reading RNG failed\n"); > + return -EIO; > + } > + > + abuf_init_set(buf, data, len); > + > + return 0; > +} > +#endif > diff --git a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c > index 45854709f5..7bef5a53f0 100644 > --- a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c > +++ b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c > @@ -17,7 +17,6 @@ > #include <mmc.h> > #include <panel.h> > #include <pwm.h> > -#include <rng.h> > #include <stdlib.h> > #include <video_bridge.h> > > @@ -137,34 +136,6 @@ void spl_board_init(void) > (GPIO0_BASE + GPIO_SWPORT_DR_H)); > } > > -/* Use hardware rng to seed Linux random. */ > -int board_rng_seed(struct abuf *buf) > -{ > - struct udevice *dev; > - size_t len = 0x8; > - u64 *data; > - > - data = malloc(len); > - if (!data) { > - printf("Out of memory\n"); > - return -ENOMEM; > - } > - > - if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { > - printf("No RNG device\n"); > - return -ENODEV; > - } > - > - if (dm_rng_read(dev, data, len)) { > - printf("Reading RNG failed\n"); > - return -EIO; > - } > - > - abuf_init_set(buf, data, len); > - > - return 0; > -} > - > /* > * Buzz the buzzer so the user knows something is going on. Make it > * optional in case PWM is disabled.
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 57f08e0be0..77145524ea 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -348,3 +348,35 @@ __weak int misc_init_r(void) return ret; } #endif + +#if IS_ENABLED(CONFIG_BOARD_RNG_SEED) && IS_ENABLED(CONFIG_RNG_ROCKCHIP) +#include <rng.h> + +/* Use hardware rng to seed Linux random. */ +__weak int board_rng_seed(struct abuf *buf) +{ + struct udevice *dev; + size_t len = 0x8; + u64 *data; + + data = malloc(len); + if (!data) { + printf("Out of memory\n"); + return -ENOMEM; + } + + if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { + printf("No RNG device\n"); + return -ENODEV; + } + + if (dm_rng_read(dev, data, len)) { + printf("Reading RNG failed\n"); + return -EIO; + } + + abuf_init_set(buf, data, len); + + return 0; +} +#endif diff --git a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c index 45854709f5..7bef5a53f0 100644 --- a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c +++ b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c @@ -17,7 +17,6 @@ #include <mmc.h> #include <panel.h> #include <pwm.h> -#include <rng.h> #include <stdlib.h> #include <video_bridge.h> @@ -137,34 +136,6 @@ void spl_board_init(void) (GPIO0_BASE + GPIO_SWPORT_DR_H)); } -/* Use hardware rng to seed Linux random. */ -int board_rng_seed(struct abuf *buf) -{ - struct udevice *dev; - size_t len = 0x8; - u64 *data; - - data = malloc(len); - if (!data) { - printf("Out of memory\n"); - return -ENOMEM; - } - - if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { - printf("No RNG device\n"); - return -ENODEV; - } - - if (dm_rng_read(dev, data, len)) { - printf("Reading RNG failed\n"); - return -EIO; - } - - abuf_init_set(buf, data, len); - - return 0; -} - /* * Buzz the buzzer so the user knows something is going on. Make it * optional in case PWM is disabled.