diff options
author | Chris Morgan <macromorgan@hotmail.com> | 2024-01-02 09:46:52 -0600 |
---|---|---|
committer | Kever Yang <kever.yang@rock-chips.com> | 2024-01-19 10:57:36 +0800 |
commit | d2048bafae4014fbfacb2fc860da72c1bc525354 (patch) | |
tree | e00095dee7edfdbd914e737ec76fa80365b037eb | |
parent | 4913ce37c4400e44598a8dfe2162f4351c4c025e (diff) | |
download | u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.zip u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.tar.gz u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.tar.bz2 |
rockchip: board: Add board_rng_seed() for all Rockchip devices
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>
-rw-r--r-- | arch/arm/mach-rockchip/board.c | 32 | ||||
-rw-r--r-- | 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 38a2a4b..c1cfe0e 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -320,3 +320,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 3d0c614..3ff2e94 100644 --- a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c +++ b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c @@ -16,7 +16,6 @@ #include <mmc.h> #include <panel.h> #include <pwm.h> -#include <rng.h> #include <stdlib.h> #include <video_bridge.h> @@ -133,34 +132,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. |