xref: /rk3399_rockchip-uboot/drivers/rng/rockchip_rand.c (revision 3f0522ce8f818e3e777279b8f7c55abc694954a3)
1*3f0522ceSJoseph Chen /*
2*3f0522ceSJoseph Chen  * (C) Copyright 2021 Rockchip Electronics Co., Ltd
3*3f0522ceSJoseph Chen  *
4*3f0522ceSJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5*3f0522ceSJoseph Chen  */
6*3f0522ceSJoseph Chen #include <common.h>
7*3f0522ceSJoseph Chen #include <dm.h>
8*3f0522ceSJoseph Chen #include <rng.h>
9*3f0522ceSJoseph Chen 
rand_r(unsigned int * seedp)10*3f0522ceSJoseph Chen unsigned int rand_r(unsigned int *seedp)
11*3f0522ceSJoseph Chen {
12*3f0522ceSJoseph Chen 	struct udevice *dev;
13*3f0522ceSJoseph Chen 	unsigned int rand;
14*3f0522ceSJoseph Chen 	int ret;
15*3f0522ceSJoseph Chen 
16*3f0522ceSJoseph Chen 	ret = uclass_get_device(UCLASS_RNG, 0, &dev);
17*3f0522ceSJoseph Chen 	if (ret) {
18*3f0522ceSJoseph Chen 		printf("No RNG device, ret=%d\n", ret);
19*3f0522ceSJoseph Chen 		return ret;
20*3f0522ceSJoseph Chen 	}
21*3f0522ceSJoseph Chen 
22*3f0522ceSJoseph Chen 	ret = dm_rng_read(dev, &rand, sizeof(unsigned int));
23*3f0522ceSJoseph Chen 	if (ret) {
24*3f0522ceSJoseph Chen 		printf("Reading RNG failed, ret=%d\n", ret);
25*3f0522ceSJoseph Chen 		return ret;
26*3f0522ceSJoseph Chen 	}
27*3f0522ceSJoseph Chen 
28*3f0522ceSJoseph Chen 	return rand;
29*3f0522ceSJoseph Chen }
30*3f0522ceSJoseph Chen 
rand(void)31*3f0522ceSJoseph Chen unsigned int rand(void)
32*3f0522ceSJoseph Chen {
33*3f0522ceSJoseph Chen 	return rand_r(0);
34*3f0522ceSJoseph Chen }
35*3f0522ceSJoseph Chen 
srand(unsigned int seed)36*3f0522ceSJoseph Chen void srand(unsigned int seed)
37*3f0522ceSJoseph Chen {
38*3f0522ceSJoseph Chen 	/* nothing to do */
39*3f0522ceSJoseph Chen }
40*3f0522ceSJoseph Chen 
41