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 /arch/arm/mach-rockchip | |
parent | 4913ce37c4400e44598a8dfe2162f4351c4c025e (diff) | |
download | u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.tar.gz u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.tar.bz2 u-boot-d2048bafae4014fbfacb2fc860da72c1bc525354.zip |
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>
Diffstat (limited to 'arch/arm/mach-rockchip')
-rw-r--r-- | arch/arm/mach-rockchip/board.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 38a2a4b95e..c1cfe0ea1d 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 |