From 3f0522ce8f818e3e777279b8f7c55abc694954a3 Mon Sep 17 00:00:00 2001 From: Joseph Chen Date: Fri, 29 Jan 2021 20:06:29 +0800 Subject: [PATCH] rng: rockchip: add hardware rand library Signed-off-by: Joseph Chen Change-Id: Id22c5725158d86cc8a2ff80fdf09b0146d04be41 --- drivers/rng/Makefile | 5 +++++ drivers/rng/rockchip_rand.c | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 drivers/rng/rockchip_rand.c diff --git a/drivers/rng/Makefile b/drivers/rng/Makefile index 471cf5d6a4..58cee3a56e 100644 --- a/drivers/rng/Makefile +++ b/drivers/rng/Makefile @@ -5,3 +5,8 @@ obj-$(CONFIG_DM_RNG) += rng-uclass.o obj-$(CONFIG_RNG_ROCKCHIP) += rockchip_rng.o + +ifdef CONFIG_LIB_HW_RAND +obj-$(CONFIG_RNG_ROCKCHIP) += rockchip_rand.o +endif + diff --git a/drivers/rng/rockchip_rand.c b/drivers/rng/rockchip_rand.c new file mode 100644 index 0000000000..e8bac8f629 --- /dev/null +++ b/drivers/rng/rockchip_rand.c @@ -0,0 +1,40 @@ +/* + * (C) Copyright 2021 Rockchip Electronics Co., Ltd + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include + +unsigned int rand_r(unsigned int *seedp) +{ + struct udevice *dev; + unsigned int rand; + int ret; + + ret = uclass_get_device(UCLASS_RNG, 0, &dev); + if (ret) { + printf("No RNG device, ret=%d\n", ret); + return ret; + } + + ret = dm_rng_read(dev, &rand, sizeof(unsigned int)); + if (ret) { + printf("Reading RNG failed, ret=%d\n", ret); + return ret; + } + + return rand; +} + +unsigned int rand(void) +{ + return rand_r(0); +} + +void srand(unsigned int seed) +{ + /* nothing to do */ +} +